PHPでHTMLをPDF出力するライブラリについて調べてみた

php PHP
codeigniter CodeIgniter
pdf PDF

やりたい事とポイント

  • 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出力の方法は記事を分けます。