LoginSignup
0
0

PHP7に PDF Haru拡張をインストール

Last updated at Posted at 2023-09-20

tcpdf を使っていて、PDFが表示されるまで時間がかかりすぎるという問題に悩んでいました。haruで解決しました。

haruについて

haru の使い方は以下記事で紹介されています。
https://codezine.jp/article/detail/7141

haru のクラスメソッド説明(英文)
https://durak.org/sean/pubs/software/php-7.0.0/book.haru.html

tcpdf との相違

  • 座標原点が左下
  • テキスト/画像などの位置決めの原点も左下
  • 文字エンコーディングが Shift JIS
  • 座標単位がポイントのみ

メソッド名は異なりますが、引数は似通っています。

ソースからビルドする必要性

pecl で PDF Haru拡張機能を PHP7 にインストールしようとすると、PHPバージョンが対応外であるため失敗します。

PHP Extention haru Install
>pecl install haru
pecl/haru requires PHP (version >= 5.1.3, version <= 6.0.0, excluded versions: 6.0.0), installed version is 7.4.15
No valid packages found
install failed

そこで libharu と PHP7に対応した haru拡張をソースからビルドしてインストールします。

必須ライブラリ/プログラムのインストール

ソース取得には wget, git、libharu ビルドには cmake, zlib, libpgn, haru拡張には php-devel,libtool が必要です。

Install requisite modules and programs
>apt install zlib1g-dev libpng-dev cmake php-dev libtool wget git

libharuビルド

Githubからcloneすると最新版が取り込まれます。v2.4.4 に固定するため tarボールを wget します( 2023/9月現在の最新版は v2.4.4 )。

Get and expand libharu source file
>wget -P /var/tmp https://github.com/libharu/libharu/archive/refs/tags/v2.4.4.tar.gz
>tar xvzf /var/tmp/v2.4.4.tar.gz -C /usr/local/src    

/usr/local/src/libharu-2.4.4 に展開されます。

ビルドは次のページに従って make / make installします。

Build and install libharu
cd /usr/local/src
mkdir haru-build
cd /usr/local/src/haru-build
cmake ../libharu-2.4.4 && make && make install

PHP7対応 haru拡張のビルド

gitでソースをクローンします。

Clone pecl-haru for PHP7
cd /usr/local/src
git clone https://github.com/dionx/pecl-haru.git
cd /usr/local/src/pecl-haru 

取り込んだソースのままではコンパイルエラーになるため、haru.c に以下のパッチを当てます。

haru.diff
2050c2050
< 		case HPDF_PROJECTING_SCUARE_END:
---
> 		case HPDF_PROJECTING_SQUARE_END:
5803c5803
< 	HARU_CLASS_CONST(ce_harupage, "PROJECTING_SCUARE_END", HPDF_PROJECTING_SCUARE_END);
---
> 	HARU_CLASS_CONST(ce_harupage, "PROJECTING_SQUARE_END", HPDF_PROJECTING_SQUARE_END);
5870c5870
< 	HARU_CLASS_CONST(ce_haruencoder, "BYTE_TYPE_TRAIL", HPDF_BYTE_TYPE_TRIAL); /* note the typo in the original name.. */
---
> 	HARU_CLASS_CONST(ce_haruencoder, "BYTE_TYPE_TRAIL", HPDF_BYTE_TYPE_TRAIL); /* note the typo in the original name.. */
Build pecl-haru for PHP7
>patch haru.c < ./haru.diff     (パッチ)
>phpize
>./configure --with-php-config=/usr/bin/php-config
>make
>make test      ( haru.so がロードすることを確認 )
>make install

configure に --with-php-config オプションで php-config を指定すると、拡張ファイルが正しいPHP拡張フォルダにインストールされるようになります。指定しないとソースディレクトリの modulesディレクトリにインストールされました。

make test を実行すると、libhpdf.so.2.4 が見つからないというエラーで haru.soがロードされませんでした。/usr/local/lib64 にインストールされていたので、このディレクトリが共有ライブラリフォルダとして検索されるように設定後 ( /etc/ld.so.conf.d 内に userlib.confファイルを作成、そのファイルで /usr/local/lib64 を指定後、 ldconfig 実行 )、ロード成功

/etc/ld.so.conf.d

ld.so.conf.d設定例
[ld.so.conf.d]# ls userlib.conf
userlib.conf
[ld.so.conf.d]# cat userlib.conf
/usr/local/lib64

haru拡張有効化

拡張を有効化するために、php.ini または 追加設定ディレクトリ php.dのファイルで extension=haru を指定( Docker では docker-php-ext-enable haru で有効化 )

/etc/php.d

haru拡張有効化例
[php.d]$ ls 20-haru.ini
20-haru.ini
[php.d]$ cat 20-haru.ini
extension=haru

Webサーバ/php-fpm再起動

最後にWebサーバや php-fpmを再起動して、phpinfo() で haru が表示されたら成功。php-fpmを使っている場合、php-fpmを再起動しないと haruは読み込まれません。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0