2008年09月17日

PHP + TCPDF

環境:WindowsXP + PHP(5.2.6) + TCPDF(4.0.025)

なんでこんなにPDFばっかやってんだか…。

Ruby + Prawn でのPDF出力がイマイチうまくいかなかったのでPHPでのPDF出力に変更。自分のRubyスキルと英文読解スキルが低いのが原因かと思うが…。

PHPでのPDF出力は以前FPDF+FPDIでやっていたので同じのを使おうかと思ったが、FPDFの後継でTCPDFができたよーんというので使ってみることにした。

参考リンク:
TCPDF
TCPDF Documentation
TCPDF Examples
IPAフォント

インストール

PHPが動く環境があることを前提に。
1.TCPDFをダウンロード、解凍する。
2.適当なフォルダに配置する。

私はバッチで使うつもりなので「適当なフォルダ」としましたが、Webで使う場合はWebから参照できるフォルダに配置(通常はそうだよね)

Webで使う場合は、以下のように変更
・フォルダ全体のアクセス権をWebサーバーのサービスを起動するユーザー/グループに付与する。
・TCPDFフォルダには読み取り専用アクセス権とする(chmod -R 644)
・cache、imagesフォルダは書き込み可能とする(chmod -R 666)

原文:
Post Installation

Once the installation is completed you must:

* Change the files' owner/group so they can be executed by the webserver.
* set as read-only the entire TCPDF folder (chmod -R 644 in POSIX systems);
* properly set the write permissions for the following folders where TCPDF will have to write (chmod -R 666 in POSIX systems):
o cache
o images
* point your browser to one of the example files to chek if it's all OK (i.e. http://www.yoursite.com/tcpdf/example/example_001.php)

フォントの用意

日本語フォントを用意します。今回はIPAのフリーフォントを使用。

TCPDFを解凍したフォルダの中の /fonts/utils に変換EXE(ttf2ufm.exe)があるのでこれを使ってフォントを変換。
DOS窓から
ttf2ufm.exe -a -F ipamp.ttf
ダーーーッとメッセージが出ます。WarningとかErrorっぽいのも出ますが無視。

次に同じフォルダにある makefont.php を実行
php -q makefont.php ipamp.ttf ipamp.ufm
※phpへのPATHを通しておいてくださいね。
実行すると、3つファイルができます。
・ipamp.z
・ipamp.ctg.z
・ipamp.php
※.ctg.zのファイルは原文を読む限り無い場合もあるらしい(if available と書いてある)
3つのファイルをTCPDFのfontsフォルダにコピーして終了。

以上でサンプルをいくつか動かして確認する。

WindowsXPでphp.iniの内部エンコーディングをSJIS、PHP実行ソースもSJISにて実行したところ日本語は文字化けした(TCPDFのデフォルト文字コードがUTF-8なので)
回避策としては
・環境はSJISで実行用PHPのソースをUTF-8N(BOMなし)にする(姑息な技)
・環境はSJISで日本語をmb_convert_encodingでUTF-8にする(これが正当かね〜)
・環境ごとUTF-8にする(既に他のプログラムが動いていたりすると…う〜ん)
・TCPDFのconfigを書き換える(原文読むのがメンドイ)

私はmb_convert_encodingにしときます。

続き:PHP + TCPDF + FPDI + FPDI_Template
ラベル:php5 TCPDF
posted by まきすけ at 19:25| Comment(0) | TrackBack(0) | IT・Web関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


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