TCPDF&FPDIでフォーマットPDFを使用し、複数ページのPDFを作成する方法
2026/07/17
TCPDF&FPDIを用いて請求書PDFを発行するシステムがあった。請求書内の品目数が多い場合に1ページでは収まらず、複数のPDFを作成しZIPにまとめてダウンロードさせる仕様となっていた。この仕様を見直し、複数ページを持つ1枚のPDFとして出力できるようにしたい。以下に実装方法をメモ。
事前準備
TCPDF、FPDIの設置やテンプレートPDFの用意に関しては過去記事を参考。
やりたいこと
- テンプレート用PDF(1ページのもの)を使用し、複数ページを持つ1枚のPDFを作成
- 現在のページ数が分かりやすいようページ内に「現在ページ/総ページ数」を追記
実装方法
ソースコード
<?php
include('./tcpdf/tcpdf.php');
include('./fpdi/autoload.php');
do{
//TCPDFオブジェクト作成
$pdf = new setasign\Fpdi\Tcpdf\Fpdi();
//余白無し
$pdf->SetMargins(0, 0, 0);
//自動で改ページさせない
$pdf->SetAutoPageBreak(false, 0);
//ヘッダーフッター無し
$pdf->setPrintHeader( false );
$pdf->setPrintFooter( false );
//PDF読み込み
$pdf->setSourceFile('./test.pdf');
//新ページを作成
$pdf->AddPage();
//読み込んだPDFの1ページ目を取得
$tpl = $pdf->importPage(1);
$pdf->useTemplate($tpl, null, null, null, null, true);
//フォント、フォントサイズ指定
$pdf->SetFont('arialunicid0', '', 17);
//表示する文言
$text = '1/2';
$pdf->Write( 5, $text, false, false, 'R', true );
//ここから2ページ目の処理
$pdf->AddPage();
$tpl = $pdf->importPage(1);
$pdf->useTemplate($tpl, null, null, null, null, true);
//表示する文言
$text = '2/2';
$pdf->Write( 5, $text, false, false, 'R', true );
$pdf->Output("output.pdf", "I");
}while(0);
解説等
2ページ目の処理の際、AddPageでページ追加した上で改めてuseTemplateでテンプレート用PDFを呼び出さないと2ページ目が真っ白な状態となるので注意。また、ページ数については右上かつ右寄せ表示としたためTextではなくWriteメソッドを使用している。
出力例
こちらがテンプレート用PDFでこちらがページを追加したPDFになる。
ページを追加したPDFは2ページ構成かつ右上にページ数表記が確認できる筈。
所感
複数枚のPDFを発行するのはNGということではないだろうけど、1枚にまとまっていた方がユーザ側としてはありがたいんじゃないかと思う。
また、zip化する処理も省けるので若干の高速化、負荷軽減にもなりそう。
そのため今後はこちらの方法を使っていきたいところ。
関連記事
-
-
PHPでパスワード付きのZIP / PDFファイルを作成する方法
PHPでZIPファイル化する方法やPDFファイル出力する方法を過去に書いたが、何 ...
-
-
mpdfで「The /e modifier is …」エラー発生時の対応方法
pdf関連のPHPライブラリ「mPDF」を使っているページがエラーログにのってお ...
-
-
PHPでフォーマットPDFにリンク付きの文字を追記する方法(TCPDF&FPDI)
以前、PHPのTCPDF&FPDIを用いてテンプレートPDFに対し、動的 ...
-
-
HTML / CSSで作成したコンテンツをPDFファイルで出力する方法(TCPDF)
HTML / CSSで作成したコンテンツをPDFファイルで出力させたい。以前mp ...
-
-
PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法
以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...