TCPDFで背景を使った擬似レイヤーの表現(PHPでPDF作成)
PHPでPDFを作成することのできるフリーのライブラリで「TCPDF」がありますが、これを使って複数ページ構成のPDFを作る際に背景をページごとに切り替える方法を紹介します。
TCPDFにはレイヤー機能がない
調べていてビックリしたのですが、TCPDFにはレイヤーをページごとに作成する機能がありません。
代わりに背景画像を指定することができるので、この機能を使ってページごとに背景画像を切り替える方法で対処します。
私の場合は、ユーザーとなるお客さまに口座自動振替用紙を提供したり、住所情報を埋め込んだ封筒テンプレートを作成して提供する場合などに重宝しています。
作成例
仕様
今回作成するPDFの仕様は以下の通り。
- 1ページ目の背景にAdobe Illustrator 形式の「sample1.ai」ファイルを指定する。
- 2ページ目の背景に通常のJPEG画像「sample2.jpg」ファイルを指定する。
サンプルコード
require_once('/tcpdf/config/lang/eng.php'); require_once('/tcpdf/tcpdf.php'); /** * MYPDF * */ class MYPDF extends TCPDF { /** * header関数 * * @access public */ public function Header() { // 背景をフルスクリーンに設定 $auto_page_break = $this->AutoPageBreak; $this->SetAutoPageBreak(false, 0); if ($this->page == 1) { $this->ImageEps('sample1.ai', $x=0, $y=0, $w=210, $h=297, $link='', $useBoundingBox = true, $align='', $palign='', $border=0); } else if ($this->page == 2) { $this->Image('sample2.jpg', $x=0, $y=0, $w=210, $h=297, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0); } $this->SetAutoPageBreak($auto_page_break); } } /** * メイン処理 */ // MYPDFインスタンスを生成 $pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); //中略 // 1ページ目を追加 $pdf->AddPage(); // 2ページ目を追加 $pdf->AddPage(); // PDFファイルを出力 $pdf->Output('example.pdf', 'I');
かんたんな解説
ポイントはクラス定義内のheader関数です。
header関数はページに背景画像を指定することができ、addPage()関数でページが追加されるごとに呼び出されます。
このheader関数の中で、現在のページ番号ごとに分岐を行って、image(), imageEps()等で指定する画像を切り替えます。
現在のページ番号は「$this->page」で取得することができます。
いろいろ応用できるテクニックなので覚えておくと良いでしょう
2010-02-02