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