業務で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ではないのでリンクは貼っていません。少し古いですがリファレンスとして参考になります。