Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

既存のPDF文書をもとに新たなPDF文書を生成する(FPDI)

2014年8月26日

FPDIを使って、既存のPDF文書をテンプレートとして引用する方法を説明する。書籍転載の9本目(書籍内の番号は「31」)。

WINGSプロジェクト 山田 祥寛
  • このエントリーをはてなブックマークに追加

書籍転載について

 本コーナーは、技術評論社発行の書籍『PHPライブラリ&サンプル実践活用[厳選100]』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 

 『PHPライブラリ&サンプル実践活用[厳選100]』の詳細や購入は技術評論社のサイト目次ページをご覧ください。

ご注意

 本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。

 FPDFではさまざまな表現が可能ですが、決まりきったレイアウトを一から動的に生成するのは無駄なことです。そのような場合にはFPDIを利用することで、既存のPDF文書をテンプレートとして引用できるようになります。あとはテンプレートからの差分のみを生成するようにすることで、コードもシンプルになりますし、なによりサーバへの負荷を軽減できます。

インストール

 FPDIは、FPDFとのセットで利用します。本家サイトからFPDF_TPL-1.2.3.zip、FPDI-1.4.4.zipをダウンロードしたら、配下のファイルをfpdf.phpと同じフォルダにコピーしてください。

 ただし、そのままでは日本語を正しく扱えませんので、リスト31-1のように、japanese.phpをFPDI対応のために編集します。以降は、このFPDI対応のjapanese.phpを利用していきます。
テンプレートをページに適用する

PHP
<?php
require('fpdf.php');
require('fpdi.php');
……中略……
class PDF_Japanese extends FPDI
{
  ……後略……
リスト31-1 japanese.php

 リスト31-2は、テンプレートtemplate.pdfをもとに、新たなPDF文書(図31-1)を生成する例です。

PHP
<?php
require_once 'libs/japanese.php';

// 文字列をSJISに変換するsjis関数
function sjis($str) {
  return mb_convert_encoding($str, 'SJIS', 'auto');
}

// A4サイズのPDF文書を準備
$pdf = new PDF_Japanese('P', 'mm', 'A4');
$pdf->AddSJISFont();

// 1テンプレートをインポート
$pdf->setSourceFile('template.pdf');
$importPage = $pdf->importPage(1);

$pdf->addPage();
// 2テンプレートをページに適用
$pdf->useTemplate($importPage, 0, 0);

// テンプレートにコンテンツを描画
$pdf->setFont('SJIS', 'B', 16);
$pdf->setXY(100, 80);
$pdf->write(18, sjis('こんにちは、世界! '));

// 最終結果を出力
$pdf->output();
リスト31-2 template.php
図31-1 template.pdfをもとに新規文書を生成

 テンプレートを利用するには、テンプレートそのもののインポート、ページへの適用という2段階を踏む必要があります。まず、最初のステップが1のsetSourceFile&importPageメソッドです。これでtemplate.pdfの1ページ目をインポートしなさいという意味になります。

 importPageメソッドの戻り値は、テンプレートを表すページ識別子です。

 あとは、addPageメソッドで新規に生成したページに対して、2のuseTemplateメソッドで使用するテンプレートを指定します。引数には、ページ識別子、配置先の座標(X、Y座標)の順で指定します。

 以上で現在のページにテンプレートの内容を反映しますので、あとは、前項の要領で、個別のコンテンツを埋め込んでいくだけです。

※以下では、本稿の前後を合わせて5回分(第7回~第11回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
7. PDF文書を動的に生成する(FPDF)

PHPスクリプトからPDF文書を動的に生成できるFPDFの基本的な使い方を説明する。書籍転載の7本目(書籍内の番号は「29」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
8. 表組みや画像/ハイパーリンク付きのPDFを作成する(FPDF)

FPDF(PDF_Japanese)クラスのメソッドを利用したさまざまな表現――文字列の装飾や画像の貼り付け、リンクの設置、表組みなどについて説明する。書籍転載の8本目(書籍内の番号は「30」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
9. 【現在、表示中】≫ 既存のPDF文書をもとに新たなPDF文書を生成する(FPDI)

FPDIを使って、既存のPDF文書をテンプレートとして引用する方法を説明する。書籍転載の9本目(書籍内の番号は「31」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
10. PDFファイルを読み込む/生成する(Zend_Pdf)

PDFファイルの読み込みや生成が容易にできるライブラリ「Zend¥Pdf」の基本的な使い方を説明する。書籍転載の10本目(書籍内の番号は「32」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
11. テンプレートエンジンでロジックとレイアウトを分離する(Smarty)

PHPで人気のテンプレートエンジン「Smarty」の基本的な使い方を説明する。書籍転載の11本目(書籍内の番号は「40」)。

サイトからのお知らせ

Twitterでつぶやこう!