Edited at

TCPDF + FPDIで既存PDFに日本語文章を追加

More than 3 years have passed since last update.


概要

既存PDFを修正するっていう案件が来て、phpからpdfを操作するライブラリを調べてましたが、 TCPDF + FPDI がいいかなという結論になったので、早速使ってみました。

調べるといろいろ記事があったので楽勝かなと思ったんですが、古い情報が多くて結構手こずりました。

以下、手順を備忘録的に残しておきます。


手順


(1) composerインストール

TCPDFもFPDIもpackagistにありますので、落としてきまます。

fpdiからtcpdfを使用するための fpdi-tcpdf なるものも一緒に落とします。


(2) 実装コード

$pdf = new FPDI();

$pdf->setSourceFile("test.pdf");
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->addPage();
$importPage = $pdf->importPage(1);
$pdf->useTemplate($importPage, 0, 0);
$pdf->SetFont("kozminproregular", "", 12);
$pdf->Text(50, 100, "ポケモンゲットだぜ!!");
$pdf->Output("/tmp/output.pdf", "F");


実装コードの説明

$pdf->setSourceFile("test.pdf");

編集したいpdfファイルを指定してます。

$pdf->setPrintHeader(false);

$pdf->setPrintFooter(false);

pdfのheader部分、fotter部分を表示しないように指定しています。

特に $pdf->setPrintHeader(false); に関しては、これを指定していないと、outputで出力したpdfの上の方に横線が入ってしまっていました。

特別な理由がない限りfalseで指定してしまっていいと思います。

$importPage = $pdf->importPage(1);

$pdf->addPage();
$pdf->useTemplate($importPage, 0, 0);

PDFテンプレートの指定ページを設定しています。



  1. $pdf->importPage(1); で読み込んだpdfの1ページ目の情報を取得します。


  2. $pdf->addPage(); で新ページを作成します。


  3. $pdf->useTemplate($importPage, 0, 0); で読み込んだpdfの情報をテンプレートに指定します。

$pdf->SetFont("kozminproregular", "", 12);

フォントを設定します。

kozminproregularはtcpdfがサポートしている日本語フォントのようです。

$pdf->Text(50, 100, "ポケモンゲットだぜ!!");

x=50, y=100のところに、"ポケモンゲットだぜ!!という文字を書き込みます。

$pdf->Output("/tmp/output.pdf", "F");

指定パスに、pdfを出力します。第二引数の F はローカルファイルとして出力するモードの指定になります。


最後に

今回 TCPDF + FPDI で実行しましたが、「こっちのライブラリのほうがいいよ」みたいな情報お待ちしております。