Edited at

Laravel 4.2のPDFファイル作成

More than 1 year has passed since last update.

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で日本語問題を解決した方がいればぜひ手順を教えていただきたいです。