Laravel(PHP)でbladeテンプレートを用いたPDFを作りたい、と色々なライブラリを試してみた結果、何だかんだでTCPDFが一番しっくりと来たのでメモしてみます。
ComposerからTCPDFをインストール~日本語TrueTypeフォントのインストールまではこちらの記事を参考にさせて頂きました。
Laravel 4.2のPDFファイル作成 - Qiita
先に挙げたURLを参考にTCPDFをインストールしたLaravel5.1.27(LTS)の環境で、PDFを作ってみます。
任意のControllerのuse句に
use TCPDF;
として、次のような関数を作ります。
public function getPrint()
{
//PDF作成
$pdf = new TCPDF();
//フォント名,フォントスタイル(空文字でレギュラー),フォントサイズ
$pdf->setFont('ipaexg','',10);
//ページを追加
$pdf->addPage();
//viewから起こす
$pdf->writeHTML(view("hoge.print")->render());
//第一引数はファイル名、第二引数で挙動を指定(D=ダウンロード)
$pdf->output('hoge' . '.pdf', 'D');
//今回は適当にブラウザバック
return Redirect::back();
}
これでroutes.phpに
Route::controllers(['hoge' => 'HogeController']);
等のルートを書いてあげれば、ブラウザからbladeテンプレートで作成したhoge.pdfをダウンロードさせる事ができます。
また、サーバー上にPDFファイルを保存しながらダウンロードをさせたい場合は、
//中略
$pdf_path = storage_path() . '/hoge.pdf';
$pdf->output($pdf_path, 'F');
return Response::download($pdf_path);
で出来ます。
TCPDFのパラメータ等はこちらの日本語訳がとても参考になります。
TCPDFマニュアル(勝手訳)
また、TCPDFは外部CSSを読み込むものの、bootstrapのような複雑なCSSは読んでくれないという都合上、PDF出力用のbladeテンプレートを作ってあげる必要があります。
2015/12/30現在の最新版ではmargin: 0 auto;の様なセンタリングが効かなかったりするので、tableタグで無理やり配置する必要がありますが、帳票のような物なら短期間で作成可能だと思います。
以上です。