勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

TCPDF&FPDIでフォーマットPDFを使用し、複数ページのPDFを作成する方法

   2026/07/17  PHP

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

  関連記事

PHPでパスワード付きのZIP / PDFファイルを作成する方法
PHPでパスワード付きのZIP / PDFファイルを作成する方法

PHPでZIPファイル化する方法やPDFファイル出力する方法を過去に書いたが、何 ...

mpdfで「The /e modifier is …」エラー発生時の対応方法
mpdfで「The /e modifier is …」エラー発生時の対応方法

pdf関連のPHPライブラリ「mPDF」を使っているページがエラーログにのってお ...

PHPでフォーマットPDFにリンク付きの文字を追記する方法(TCPDF&FPDI)
PHPでフォーマットPDFにリンク付きの文字を追記する方法(TCPDF&FPDI)

以前、PHPのTCPDF&FPDIを用いてテンプレートPDFに対し、動的 ...

HTML / CSSで作成したコンテンツをPDFファイルで出力する方法(TCPDF)
HTML / CSSで作成したコンテンツをPDFファイルで出力する方法(TCPDF)

HTML / CSSで作成したコンテンツをPDFファイルで出力させたい。以前mp ...

PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法
PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法

以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...