Laravel9 + TCPDF + FPDI

業務でLaravel9にTCPDF+FPDIをインストールした時のメモです。あちこちのサイトを参考にさせていただきましたが、結局複合的に見ながら実施となりましたので、私の試した方法も一例として紹介します。

■ インストール

どちらもcomposerコマンドだけで実施できました。対象は下記の2つだけで、事前にcomposer.jsonへの追記等せず、コマンド実行だけで対応できました。

$ composer require tecnickcom/tcpdf
$ composer require setasign/fpdi

■ 実装例

利用例は下記の通りです。基本となるPDFを準備し、コントローラーだけで制御しています。

use setasign\Fpdi\Tcpdf\Fpdi;

public function testTcpdf(Request $request) {
    // FPDIインスタンス生成
    $pdf = new Fpdi();

    // ページ設定(最初に設定しないと、ヘッダーに罫線が入ってしまう)
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);

    // フォントの設定
    $pdf->SetFont('kozminproregular');
    // テンプレートとなるPDFファイルを指定(ファイルまでのパスを引数に渡す)
    $pdfbase = storage_path('app') . 'sample01.pdf';
    $pdf->setSourceFile($pdfbase);
    // 新規ページをセット
    $pdf->addPage();
    // テンプレートPDFの1ページ目を読み込み
    $page = $pdf->importPage(1); 
    // 読み込んだページをテンプレートに使用
    $pdf->useTemplate($page); 
    // 各種初期設定
    $pdf->setFontSize(12);
    $pdf->setMargins(0, 0, 0);
    $pdf->setCellPadding(0);
    $pdf->setAutoPageBreak(true, 0);

    // 文字を出力
    $pdf->setFontSize(12);
    $pdf->Text(15, 5, htmlspecialchars( '全角/12' ) );
    $pdf->Text(0, 10, htmlspecialchars( '123456789A123456789B' ) );

    $pdf->setFontSize(10);
    $pdf->Text(15,25, htmlspecialchars( '半角/10' ) );
    $pdf->Text(0, 30, htmlspecialchars( '123456789A123456789B' ) );

    // PDF出力
    // ・第1引数:ファイル名(指定しなければ doc.pdf という名前になる)
    // ・第2引数:出力モード(I:ブラウザへ出力, D :ファイルダウンロード, F:ローカルファイルとして保存, S :文字列としてドキュメントを返す)
    $pdf->Output('TCPDF-TEST.pdf','I');

    return;
}

■ 参考サイト

下記のサイトを参考させていただきました。

https://qiita.com/hinako_n/items/2bb3bd98bd7e50666c12

https://qiita.com/suupoo/items/0eb0f42c70bf535a66c3

https://hsmt-web.com/blog/php-pdf-output/

http://tcpdf.penlabo.net/ ※httpsではないのでリンクは貼っていません。少し古いですがリファレンスとして参考になります。

Author: jester