« KDDIの営業さんがやってきた | トップページ | 映画「南極料理人」のエキストラ »

2010年3月 9日 (火)

TCPDFとFPDI(+FPDF_TPL)を使う

フォームで入力した名前や住所のデータをあらかじめ用意してある申込用紙(PDFファイル)の指定された位置に表示させるためのWEBページ制作を頼まれました(そういや先週やった確定申告も同じような仕組みだったな)。 有償ソフトもあるようですが、 無償ソフトの組み合わせとしてはTCPDFとFPDIの組み合わせが有名のようなのでテスト環境で実験してみました。

古いバージョンだとパッチをあてたり日本語フォントを自分で準備したり大変だったようですが、 今のバージョンでは日本語フォントも標準で含まれています。パッチも不要で簡単ですが最初にエラーがでたので備忘録を残しておきます。

TCPDF
このページのdownloadリンクから飛んでダウンロードページからファイルを取ってきます。 今回使ったバージョンはtcpdf_4_8_036.zipでした。

FPDIとFPDF_TPL
同じようにFPDIのページからDownloadsのリンクへ進み、 ダウンロードページからFPDIとFPDF_TPLのファイルを取ってきます。 バージョンはそれぞれFPDI_1.3.2とFPDF_TPL-1.1.4でした。

日本語フォントも標準で含まれているので必要な物は上記の3つだけです。 FPDIのファイルはインクルードして使うだけなのでDocumentRootの外にfpdiというディレクトリを作って全部いれておきました。 FPDF_TPLの中身もファイル一つだけですが同じfpdiの中に置きます。ディレクトリはこんな感じで。
|- <fpdi>
|    |- (fpdiに含まれていたファイルたち全部)
|    |- fpdf_tpl.php (fpdf_tplに含まれていたファイル)
|
|- <DocumentRoot>
     |- <tcpdf>
     |     |-(tcpdfに含まれていたディレクトリ、ファイル全部)
     |
     |- test.php
     |- sample.pdf (テスト用の適当なPDFファイル)

test.phpの中身はほとんどサンプルのままですがこうなってます。
01: <?php
02: require_once('./tcpdf/tcpdf.php');
03: require_once('../fpdi/fpdi.php');
04:
05: $pdf =& new FPDI();
06: $pdf->AddPage();
07: $pdf->setSourceFile(sample.pdf');
08: $tplIdx = $pdf->importPage(1);
09: $pdf->useTemplate($tplIdx);
10: $pdf->SetFont('kozgopromedium', '', 12);
11: $pdf->MultiCell(0, 0, "テストですよ", 0, 'J', 0, 1, 105, 42);
12: $pdf->Output('newpdf.pdf', 'I');
13: ?>

これでtest.phpを開くとsample.pdfの真ん中、上の方に「テストですよ」と書かれたpdfが表示されます。

probably uses a compression technique which is not supported by ・・・
というようなエラーが表示された場合はPDFファイルのバージョンを下げてみましょう。今回はPDF1.4にしたら動きました。 実はそのあともエラーは消えたけど画面が真っ白になってしまい頭の中も真っ白になったんですが、 これはtest.phpをSJISでサーバにアップロードしてしまったためで、 UTF-8に直して再アップロードしたら正常に表示されました。

~
~

|

« KDDIの営業さんがやってきた | トップページ | 映画「南極料理人」のエキストラ »

お仕事いろいろ」カテゴリの記事

パソコン・インターネット」カテゴリの記事

コメント

記事のようにフォルダなど配置したのですが

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in c:\documents and settings\フォルダ名\test.php on line 10

となってしまいます。
フォント名を変えても同じエラーが出てしまいます。

投稿: | 2010年9月18日 (土) 16:47

あ、旅行してたのでコメント見落としてました。

test.phpに全角文字(スペースとか)が紛れ込んでませんかね?

投稿: おねむ | 2010年9月28日 (火) 02:45

参考にさせて頂いてます。

上記のサンプルでPDFファイルへ文字出力を行ったところ、表示されたPDFの上部に水平に直線が出てきました。
テンプレートのPDFファイルを読み込み、Text,Cell,MultiCell、Writeといったメソッドを使用せず、そのままOutputしても直線が出てきました。
同じような現象発生していませんでしょうか?
元々のPDFファイルに直線が無いことは確認しております。

投稿: | 2011年1月 6日 (木) 15:03

自己解決しました。
デフォルトで「ページヘッダーを出力する」ことになっていて、空のページヘッダーが線となって表示されていました。

$pdf =& new FPDI();
の後に
$pdf->setPrintHeader(false);
で消すことが出来ました。

投稿: | 2011年1月 6日 (木) 16:08

情報ありがとうございます。
テスト環境を消してしまっているので
すぐには確認できませんが、また必要になった時に
チェックしてみます。

投稿: おねむ | 2011年1月 7日 (金) 13:35

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/153269/47769996

この記事へのトラックバック一覧です: TCPDFとFPDI(+FPDF_TPL)を使う:

« KDDIの営業さんがやってきた | トップページ | 映画「南極料理人」のエキストラ »