やりたい事とポイント
- PHPでPDF出力を出力する。(そのまま)
- いちいちレイアウトを考えたくないのでHTMLをそのままPDFしたい。
- テンプレートのPDFなどは使わないシンプルな帳票で良い。
- composerでインストールできるphpのライブラリだけでやりたい。
環境
Mac OS X El Capitan 10.11.4
PHP 5.6.24
CodeIgniter 2.2.0(古い。が、他のFWでも参考になるかと思います)
PDF出力ライブラリの選定(こんなにするつもりじゃなかった)
##mPDF
ドキュメントも豊富で主流のようなのだが後述の問題があった為、不採用。
##FPDF
HTMLに対応しておらず、項目の座標をいちいち指定しないといないので却下。
mPDFと同様の問題もあったので不採用。
##html2pdf
情報が少ない上に検索すると同名のサービスもヒットするのでげんなりして不採用。
名前はシンプル過ぎてもいけない事を学んだ。
##wkhtmltopdf(+snappy)
google製で性能・信頼感はあるのだがphpのライブラリだけでやりたいので却下。
##TCPDF
結果的にはTCPDFに落ちつた。
PDF出力時に起きた問題
当初、mPDFでPDFファイルを作成したところPDFのダウンロードまでは出来るのだが
ファイルをChromeでそのまま開こうとすると
PDF ドキュメントを読み込むことができませんでした
のエラーが発生して開く事ができない。
Adobe Readerで開こうとすると
「hoge.pdf」を開けませんでした。ファイル形式がサポートされていないか、またはファイルが破損している可能性があります (例えば、電子メールの添付ファイルとして送信され、正しくデコードされなかった場合などが考えられます)。
Adobe PDF 文書を作成するには、作成元アプリケーションでファイルを Adobe PDF に印刷してください。
と激しく怒られる。
同じファイルをmacのプレビューやfirefoxで開くと普通に開ける。
調査
- Adobe ReaderのVersionが古い? → 最新版にしても現象変わらず。
- PDFしたHTMLの問題? → 適当な文字列だけのHTMLにしても現象変わらず。
- mPDFに何かオプションがある? → マニュアルを読んでもそれらしい設定はなさそう。
- 同様の事象をgoogle先生にお伺いしても「そんなのお前だけだよ」と言われる。
結局、原因が分からずmPDFが悪いに違いない!と決め付けPDF出力ライブラリの選定をやり直すハメになった。
長くなってしまったのでTCPDFを使ったPDF出力の方法は記事を分けます。