【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;
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');
}

テキストの出力について

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

楕円

$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-dompdflaravel-snappyなども人気があります。

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