2008年09月19日

PHP + TCPDF + FPDI + FPDI_Template

環境:WindowsXP + PHP(5.2.6) + TCPDF(4.0.025) + FPDI(1.2.1) + FPDI_TPL(1.1.2)

FPDIのページを見たら「TCPDFにも対応したよ!」と書いてあったのでついでに試してみる。

FPDIのページから最新バージョンをダウンロード。
・FPDI 1.2.1
・FPDI_TPL 1.1.2

解凍したら全てのファイルを1つのフォルダにまとめて、PHPのincludeの下に配置する。
例)
phpをインストールしたフォルダ
└ includes
 └ fpdi ←このフォルダに全部入れる。
  ├ decodersフォルダ
  ├ fpdi2tcpdf_bridge.php
  ├ fpdi.php
  ├ fpdi_pdf_parser.php
  ├ pdf_context.php
  ├ pdf_parser.php
  ├ wrapper_functions.php
  └ fpdf_tpl.php

php.iniのinclude_pathにincludes/fpdiを追加。
(Windowsの例)
include_path = ".;c:/php/includes;c:/php/pear;c:/php/includes/fpdi"
 
テスト用ソース
<?php
require_once('./tcpdf/tcpdf.php');
require_once('fpdi.php');

// initiate FPDI
$pdf =& new FPDI();
// add a page
$pdf->AddPage();
// set the sourcefile
$pdf->setSourceFile('include.pdf');
// import page 1
$tplIdx = $pdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 100 mm
$pdf->useTemplate($tplIdx);

// now write some text above the imported page
$pdf->SetFont('dejavusans');
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(25, 25);
$pdf->Write(0, "This is just a simple text");

$pdf->Output('newpdf.pdf', 'F');
?>

上記ソースの実行にはテスト用ソースのほかに、Includeするファイル(include.pdf)とTCPDFが必要。
ソースの配置
プログラムを実行するフォルダ
├ fpditest.php
├ include.pdf(includeするpdf)
└ tcpdf(TCPDFのソースフォルダ)
※TCPDFのインストールはこちらを見てください。

FPDIクラスはTCPDFクラスをExtendしていますので、FPDIやFPDI_TPL独自のメソッド以外はすべてそのまま使えます。

さて使ってみた感想。
○他のアプリで作った罫線や定型文字のみのPDFをオーバーレイ的に利用できるので便利。
×インポート処理の際が重い。
×インポート元に日本語フォントが入っていると処理がさらに重くなる。
×ついでにファイルも重くなる。
×インポート元のファイルに入っている日本語フォントと同じ日本語フォントを使って文字を追加したときにフォントが2重に含まれてしまうらしく、ファイルサイズがほぼ倍になる(英文フォントも倍になってるっぽい)

ちなみに普通にTCPDFでIPAフォントを使って4ページくらいのファイルを作ったら、サイズは4.5MB。そのファイルをインポートしてIPAフォントでファイルをつくるとほぼ倍の8.9MB…。
インポート元のファイルにはフォントを含まないようにするか、もしくは罫線のみにしたほうがいいです。

というかTCPDFで日本語フォントを使った場合、Webでは無理なサイズ。

標準の明朝とゴシックだけでいいのであればFPDF+FPDIのほうがサイズが小さくて実用性があると思います。

いろいろ書きましたが、サイズの問題は日本語フォントを使っていることなので、フリーでここまでできることに感謝します。
posted by まきすけ at 20:58| Comment(0) | TrackBack(0) | Linuxとか | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック