skimemo


skimemo - 日記/2019-10-05/wkhtmltopdfをApacheから呼ぶ際にはまった話

_ wkhtmltopdfをApacheから呼ぶ際にはまった話

PHPからPDFを生成する際のライブラリの中で、最強と名高いwkhtmltopdfを使ってみました。

今まではTCPDFを使用していたものの、制限が多すぎて色々と苦労していたのも一気に解決です。

PHPでPDFを生成するライブラリはTCPDFの他にも幾つかありますが、いずれも自前でCSS等をレンダリングしており、昨今の非常に複雑なCSSを網羅できるものではありません。しかし、wkhtmltopdfはwebkitのエンジンを使うGoogle謹製のツールとのことで、若干ずるいですがこれに勝るものは無いと同時に、通常のHTMLにできてこれでできない事は無いと思われます。

インストールや使い方は、ググればいくらでも出てきますので、そちらを参考にしてください。

本題です。

_ 問題

手順通りに日本語フォントをインストールしたのに、WEBサーバー経由でPDF生成した場合だけフォントが表示されないです。

_ 原因

原因は、フォントファイルの権限がインストール者の700になっていたためでした。
フォントのインストール手順は、いずれの解説ページでも以下のような感じになっています。

$ wget https://oscdl.ipa.go.jp/IPAexfont/IPAexfont00401.zip
$ unzip IPAexfont00401.zip
$ sudo mv IPAexfont00401 /usr/share/fonts

しかしこのままでは、ファイルの状態が以下のようになります。

-rwx------ 1 atsumi atsumi 6099900 Apr 26 12:20 ipaexg.ttf
-rwx------ 1 atsumi atsumi 7835672 Apr 26 12:20 ipaexm.ttf
-rw-r--r-- 1 atsumi atsumi   20564 Apr 26 13:44 IPA_Font_License_Agreement_v1.0.txt
-rwx------ 1 atsumi atsumi    1834 Apr 26 14:05 Readme_IPAexfont00401.txt

結果、テスト時に自分のアカウントでコマンドラインからwkhtmltopdfを実行すると、作成されるPDFでは正常に日本語が表示されるのですが、いざPHPに組み込んでWEBサーバー経由で実行すると文字化けする(実行ユーザーがapache等なのでフォントファイルが読めない)、という現象が起きます。

私はapacheユーザーと自分ユーザーの環境を比較したりと、半日ほど使って諸々調べた結果、漸くたどり着きました。

_ 解決策

もちろん以下の通りです。

$ sudo chown root:root /usr/share/fonts/IPAexfont00401 -R
$ sudo chmod 644 /usr/share/fonts/IPAexfont00401/*.ttf

皆様もお気をつけを・・(何に?)。

Category: [Linux] - 15:14:49



 
Last-modified: 2019-10-05 (土) 17:32:22 (8d)