1
1

More than 1 year has passed since last update.

laravel-dompdfとFPDI+TCPDFで作成したPDFを1つのPDFにする

Last updated at Posted at 2022-10-13

概要

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で読み込むことです。

参考

PHP:複数のPDFを連結させる(TCPDF・FPDI)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1