ilovex blog
    【TCPDF+FPDI】Laravelでテンプレートを使ってPDF出力する

    【TCPDF+FPDI】Laravelでテンプレートを使ってPDF出力する

    はじめに

    帳票の印刷など、プログラムでPDFを出力する機会は比較的多くあります。LaravelでPDFを簡単に出力できるので、その方法をご紹介します。

    TCPDFとFPDIをインストール

    composerでインストールします。

    composer require tecnickcom/tcpdf
    composer require setasign/fpdi

    ControllerでPDFを出力

    use setasign\Fpdi\TcpdfFpdi;
    use TCPDF_FONTS;

    テキストの出力について

    テキスト以外にも楕円や画像などを出力することもできます。

    楕円

    $pdf->Ellipse($x, $y, $rx, $ry);

    パラメータ

    $x ・・・中心点のX座標

    $y ・・・中心点のY座標

    $rx・・・水平方向の径

    $ry・・・垂直方向の径(0とすると円になる)

    画像

    $pdf->Image($file, $x, $y, $w, $h);

    パラメータ

    $file・・・画像ファイル名

    $x ・・・左上のX座標

    $y ・・・左上のY座標

    $w ・・・幅

    $h ・・・高さ

    保存先について

    PDFをS3に保存したい場合はOutputの第2引数に「S」を指定します。

    出力先は以下から選択できます。

    I ・・・ブラウザに出力する。

    D・・・ブラウザでダウンロードする。

    F ・・・ローカルファイルとして保存する。

    S ・・・文字列で出力する。

    おわりに

    今回はテンプレートを使ってPDF出力しましたが、HTMLをPDF出力することもできます。ただ、使用できるCSSが限定的なので使い勝手はあまり良くないようです。

    LaravelでPDF出力するライブラリとしてはlaravel-dompdfやlaravel-snappyなども人気があります。

    機会があればご紹介したいと思います。

    tech.ilovex.co.jp
    public function createPdf()
    {
        $pdf = new TcpdfFpdi();
    
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);
        $pdf->SetAutoPageBreak(false);
        $pdf->SetMargins(0, 0, 0);
        $pdf->addPage();
    
        // テンプレートを読み込む
        $template_path = resource_path('pdf/template.pdf');
        $pdf->setSourceFile($template_path);
        $page = $pdf->importPage(1);
        $pdf->useTemplate($page);
    
        // フォントを設定(MS明朝)
        $tcpdf_fonts = new TCPDF_FONTS();
        $font = $tcpdf_fonts->addTTFfont(resource_path('fonts/msmincho.ttf'));
    
        // テキストを出力
        $pdf->SetXY(100, 50);
        $pdf->Write(0, 'テスト');
    
        // PDFをS3に保存
        $content = $pdf->Output('test.pdf', 'S');
        Storage::disk('s3')->put('test.pdf', $content, 'private');
    }