概要
Laravelで、laravel-dompdfで作成したPDFとFPDI+TCPDFで作成したPDFを結合させて
1つのPDFを作成する必要がありました。
(PDF内の順番は1.laravel-dompdf、2.FPDI+TCPDF)
その際に行った方法を備忘録として残しておきます。
※以下、各コード内のファイル名は、本投稿上の適当な名称です。
laravel-dompdf
use PDF;
// laravel-dompdfでPDFを作成する
$domPdf = PDF::loadView('generate_pdf');
※laravel-dompdfでの詳細なPDFの作成方法は以下を参考に。
LaravelでPDFを出力する方法(laravel-dompdfを使う)
FPDI+TCPDF
use setasign\Fpdi\TcpdfFpdi;
// FPDI+TCPDFでPDFを作成する
$fpdiTcpdfPdf = new TcpdfFpdi();
※FPDI+TCPDFでの詳細なPDFの作成方法は以下を参考に。
【TCPDF+FPFI】PHPでpdf帳票を作成する方法【グラフも】
laravel-dompdfで作成したPDFとFPDI+TCPDFで作成したPDFの結合
// laravel-dompdfで作成したPDFを保存したファイルパス
$domFileName = $dirPath . '/dom.pdf';
// laravel-dompdfで作成したPDFを一時フォルダに一旦保存する
$domPdf->save($domFileName);
// 2つを結合したPDF
$pdf = new TcpdfFpdi();
// laravel-dompdfで作成したPDFのページ数を取得
$count = $pdf->setSourceFile($domFileName);
// ページ数分繰り返す
for ($i = 1; $i <= $count; $i++) {
// 空のページを作成
$pdf->addPage();
// 結合させるPDFから現在のページを取得して先程作成した空のページに格納
$pdf->useTemplate($pdf->importPage($i));
}
// FPDI+TCPDFで作成したPDFを保存したファイルパス
$fpdiTcpdfFileName = $dirPath . '/fpditcpdf.pdf';
// FPDI+TCPDFで作成したPDFを一時保存する
$fpdiTcpdfPdf->Output($fpdiTcpdfFileName, 'F');
// FPDI+TCPDFで作成したPDFのページ数を取得
$count = $pdf->setSourceFile($fpdiTcpdfFileName);
// ページ数分繰り返す
for ($i = 1; $i <= $count; $i++) {
// 空のページを作成
$pdf->addPage();
// 結合させるPDFから現在のページを取得して先程作成した空のページに格納
$pdf->useTemplate($pdf->importPage($i));
}
// 2つのPDFを結合したPDFを出力
$pdf->output();
まとめ
TCPDF+FPDIで作成されたPDF同士を連結させる方法などはあったものの、
異なるライブラリ(今回のようなパターン)のPDFの結合方法はなかったため、
今回実装方法について残しました。
結合する際のポイントは、laravel-dompdfでPDFを作成して、出来上がったPDFをTCPDF+FPDIで読み込むことです。