Laravel 4.2にPDFファイルを自動生成する機能を追加したのでレポートします。
tcpdfとdompdfを試しましたが、今回はtcpdfの手順のみとレポートさせていただきます。https://github.com/tecnickcom/TCPDF
まず、インストールです。composer.jsonに次のコードを追加して、composer update
を実行します。
"tecnick.com/tcpdf": "6.*",
インストールが完了したら、早速次のテストコードを試しましょう。
Route::get('/test_pdf', function() {
$html = View::make("mypdf");
$filename = "mypdf";
$pdf = new TCPDF();
$pdf->addPage();
$pdf->writeHTML($html, true, false, true, false, '');
$pdf->output($filename);
exit;
});
うお!pdfが生成されました。しかし、日本語文字が表示されません!それは困ります。
デフォルトで使われているフォントはascii以外の文字が対応しないので、手動で日本語のフォントをインポートしないと、日本語が出ません。
日本語をインポートする関数はtcpdfのライブラリーの中に用意されています。/vendor/tecnick.com/tcpdf/toolsの中にtcpdf_addfont.phpがあります。それを実行すればフォントがインポートされます。
今回はipaxegというオープンフォントを利用します。そのサイトからipaexg.ttfをダウンロードします。
http://ipafont.ipa.go.jp/
そして、ダウンロードしたipaexg.ttfを先ほど話したtcpdf_addfont.phpを利用してフォントをインポートします。(tcpdf_addfont.phpに関する詳細は同じフォルダのconvert_fonts_examples.txtを参照してください。)
php ./tcpdf_addfont.php -b -t TrueTypeUnicode -f 32 -i ./ipaexg.ttf
最後に、先ほどを動かしたテストコードにsetFontを足してipaexg日本語フォントをインポートします。
Route::get('/test_pdf', function() {
$html = View::make("mypdf");
$filename = "mypdf";
$pdf = new TCPDF();
$pdf->setFont('ipaexg','',15); // ipaexg日本語フォントをインポート
$pdf->addPage();
$pdf->writeHTML($html, true, false, true, false, '');
$pdf->output($filename);
exit;
});
これで、日本語も表示されてpdfが自動生成されました。
補足
以前dompdfを試しましたが、tcpdfと同じで日本語が表示されませんでした。対策として、このコマンド、php vendor/dompdf/dompdf/load_font.php ipaexg ipaexg.ttf
を実行しましたが、load_font.phpにエラーが発生しました。どうやらフォントのインポートがうまく処理されていないことが原因のようです。
もし、dompdfで日本語問題を解決した方がいればぜひ手順を教えていただきたいです。