LoginSignup
15
22

More than 5 years have passed since last update.

Laravel5.1でbladeテンプレートを用いてPDFを作る

Last updated at Posted at 2015-12-30

Laravel(PHP)でbladeテンプレートを用いたPDFを作りたい、と色々なライブラリを試してみた結果、何だかんだでTCPDFが一番しっくりと来たのでメモしてみます。

ComposerからTCPDFをインストール~日本語TrueTypeフォントのインストールまではこちらの記事を参考にさせて頂きました。
Laravel 4.2のPDFファイル作成 - Qiita

先に挙げたURLを参考にTCPDFをインストールしたLaravel5.1.27(LTS)の環境で、PDFを作ってみます。
任意のControllerのuse句に
use TCPDF;
として、次のような関数を作ります。

HogeController.php
    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タグで無理やり配置する必要がありますが、帳票のような物なら短期間で作成可能だと思います。

以上です。

15
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
22