2007/03/18

FPDF から TCPDF へ

以前日本語化された FPDF を使って PHP スクリプトによる PDF ドキュメント生成スクリプトを書いた事がある。

そのライブラリは当時日本語のフォントファイルの埋め込みをサポートしておらず(現在もしていないようだ)、PDF を開く環境によってはフォントが変わって表示されてしまう問題があった。
今日では Windows, MacOSX, Linux 系などを始めとした様々なプラットフォームがあるが、残念ながらどの環境でも共通に指定できるフォントというのは存在しないので「深刻な問題だなあ」と思いつつも、埋め込めるようにコーディングする能力も持っておらず何となく消化不良のまま利用してスクリプトを組んでいた記憶がある。

今日思いつきでそのライブラリ周辺を調べてみると、TCPDF という FPDF を拡張したライブラリを発見した。
かなり多数の拡張が施されているようで、その中にはフォントの埋め込み機能もあり少し気になったのでダウンロードして導入してみた。

ネット上の記事を探してみるといくつか改行コード変換に伴ったバグで日本語が化ける問題があったようなのだが、CHANGELOG.TXT を読んでみるとどうやら修正されているようで、確かに化けるといわれていた「名」などをそのまま出力する事ができた。
フォントファイルの埋め込みはそのまま TTF フォントで行う事は出来ないのだが、変換用ツールとスクリプトが同梱されており、それを使う事で簡単に専用形式で出力されるので最初に少し手間は掛かるが利用には差し支えない。
出力フォーマットも HTML である程度指定する事が出来るようになっているので、ちょっとした出力を整形するためならほとんど生コードを書かなくてもよくなっており非常に洗練されたライブラリになっているようだ。

望みの機能は大体実装されていたのだが、些細な不満もなかったわけではなかった。
フォント情報はサブセットではなくそのまま埋め込まれるような設計になっているため、サブセットを使えば 100KB 未満で済むような小さなデータでもフォント情報を全て抱え込むと 3MB ぐらいになってしまった(それでも zlib で圧縮されているので、生の TTF ファイルを抱え込むよりは数倍マシである)。
ビットマップフォントが主流の時代であればノーマルフォントを加工してボールドフォントを生成したりするのも現実的な選択肢だったが、アウトラインフォントが中心となった今では太字には太字専用のフォントが欲しい。しかしフォントファイルを2つ抱え込むと単純に容量が増えるので、こういう状況の時を考えてもフォントのサブセットでの埋め込みに対応してくれる事を心のどこかで期待している自分がいる。

PHP はインターネット経由で使われる事が多いこともあり、ファイルサイズに対しては厳しい目で見てしまう。
もしこのライブラリがローカルな環境でしか使えないものだったなら、それは気にならなかったと思う。

0 件のコメント: