FuelPHPでテンプレートPDFファイルに動的データ追加
帳票を印刷したり、契約書を印刷したりと、基幹システムにもWebサービスを展開するにも、PDFの利用は比較的多かったりします。
今はとても便利なライブラリなどが揃っていて、簡単にPDFを出力が可能になっていますが、バージョンなどによって調整が必要だったりすることもあります。
たまたまfuelPHPで基幹システムを作成する機会があったので、fuelPHPを利用してPDFを出力する方法を記録しておきます。
PDF出力は、基本となるテンプレートPDfに情報を書き込んでいくことを想定してます。
TCPDFとFPDIの組み合わせでかなり楽に出力できるのでビックリですな。
条件
- FuelPHP 1.7
- FPDI
- TCPDF
- PDFを出力できる環境
テンプレートとなるPDFを作成できる環境(とりあえずOffice2010で出力した)
FuelPHP
利用者も多く、簡単に導入できることからインストールやら初期設定は割愛。
以下URLでわかるとおり、コマンド一、二発で完了できますね。
FuelPHP クイックインストール
これから準備する「fpdi」と「tcpdf」は以下ディレクトリに格納していきます。
[php]/fuel/app/vendor/[/php]
テンプレートPDFは以下に設置することにしておきます。
[php]/public/test.php[/php]
FPDI
FPDIは、既存のPDFファイルをテンプレートとして利用し、情報を追記することができるものです。
動的に出力される箇所以外は、既存の文書を流用させることが効率的で、ソースをシンプルにできますもんね。
FPDIのサイトからファイルをダウンロード・解凍して、「/fuel/app/vendor/」に設置します。
今回ダウンロードしたのは、Version 1.6.1でした。
FPDI Downloads
ディレクトリ名を「fpdi」にして設置しましたので、以下の様な構成になります。
[php]/fuel/app/vendor/fpdi/ファイル群[/php]
TCPDF
TCPDFは、PDFファイルを動的に生成するためのPHPライブラリです。
TCPDFのサイトからファイルをダウンロード・解凍して、「/fuel/app/vendor/」に設置します。
今回ダウンロードしたのは、Version 6.2.12でした。
TCPDF PHP class for PDF
ディレクトリ名を「fpdi」にして設置しましたので、以下の様な構成になります。
[php]/fuel/app/vendor/tcpdf/ファイル群[/php]
テンプレートPDFの用意
動的に出力される箇所以外の文書を用意しておきます。
冒頭でも記載したように、テンプレートPDFは以下に設置します。
[php]/public/test.pdf[/php]
PDF作成方法はたくさんありますが、とりあえず以下の2種類を記載しておきます。
「Office」は特別問題はなかったけど、「Adobe PDF」で印刷する場合はちょっと問題があったからね。
Office2010以降で保存
WindowsでOffice2010以降であれば、保存形式にPDFを選択できるので何も問題なさそうですね。
「Adobe PDF」で印刷
Excelなどから「Adobe PDF」で印刷してテンプレートPDFを作成したものをテンプレートとして利用する場合、PHPコードで以下のようなエラーが出力されることがあります。
これは「フリー版のFPDIでは、圧縮PDFは取り扱うことができない」というようなエラーのようです。
Acrobatで以下のような手順で圧縮を解除してあげておくことで、上記のようなエラーは回避できます。
- ①Acrobatで対象のPDFを開きます。
- ②「アドバンスト」 -> 「PDFの最適化」を開きます。
- ③左ペインの「最適化」を選択します。
- ④右ペインの「オブジェクト圧縮オプション」を【圧縮を解除】に設定します。
- ⑤ファイルを上書き保存します。