FPDF は PHP で手軽に PDF を出力できる手軽かる強力なライブラリで、これにマルチバイト対応の MBFPDF を利用すると日本語も利用できるようになり、非常に重宝しています。
しかし、使っているうちにどんどん欲が出てくるもので、英数字以外でもプロポーショナルフォントが使いたい…と思い、MBFPDF の改良に手を出した次第です。
プロポーショナルフォント対応版は MBFPDF を使ったスクリプトを「ほぼ」そのまま利用できるになっていますので、 まずは MBFPDF を利用できるようにしておいてください。 その上で、プロポーショナルフォント対応版 mbfpdf-1.26-kzhk.zip をダウンロード、上書きをすれば準備完了です。
プロポーショナルフォント対応版に差し替える上での注意点としては、
Windows系の文字コードを利用したい場合には、SJIS-Win や EUCJP-WIN などを指定すれば、多くの場合問題が解決できると思います。 例えば、シフトJISでスクリプトを書いている場合には、
のように指定します。
なお、未指定の場合は mb_internal_encoding() を採用します。
があげられます。
実際に、プロポーショナルフォント(PMINCHO など)を指定して、ひらがな・カタカナを含んだ PDF を作成してみて効果を確認してみてください。
プロポーショナルフォントに対応するためには、フォントのメトリクス情報が必要となるのですが、
このメトリクス情報を入手するために APACHE FOP の org.apache.fop.fonts.apps.TTFReader クラスを利用しています。
ただし、このプログラムは otf フォントには対応していないようなので、MSMincho,MSGothic 系の情報しか得られなかったため、
プロポーショナルとして指定できるのは(とりあえず)MSMincho,MSGothic 系のフォントとなります。
なお、メトリクス情報は、MBFPDF オリジナルのものとプロポーショナルフォント対応版のどちらともが利用できますが、 プロポーショナルフォント対応版の定義が優先されます。
このため、非Windows系のクライアントでは、事実上使い物にならないと考えてください。
mbfpdf-1.25-kzhk から、KozMinProVI-Regular,KozGoPro-Medium,HiraKakuPro-W3,HiraMinPro-W3 のフォント情報を追加していますが、 これらは半角部分のみのメトリクス情報なので英数字以外では固定ピッチとなります(オリジナルの MBFPDF のフォント定義です)。
メトリクス情報の作成方法に関してですが、必要となるプログラム・ファイルがちょっとややこしいので、頭の中を整理してそのうち書きます。
otf フォントのメトリクス情報の取り出し方法を知っている人は教えてもらえるとありがたいです。
SetFont() 関数と SetFontSize() 関数で「Horizontal Scaling(水平方向の描画比率)」の指定をできるようにしました。
たとえば helvetica と日本語フォントを並べると間延びして見える…というようなときに、
のように指定すると本来の80%の幅で描画することができます。
FPDF-J のフォーラムの「表の自動折り返しについて」の
GetMultiCellHeight() 関数と同等の機能の実装です。
行数ではなく、「高さ」を直接返すようにしていますので、上記フォーラムの関数の置き換え時には注意してください。
プロポーショナルフォント対応版は PHP-5.0.4 / UTF-8 環境下で作成・テストをしていますので、 それ以外の組み合わせでは正常に動作をしない可能性があります。
mbfpdf-1.24-kzhk から、MBMultiCell/MBWrite の文字幅計算部分を大幅に変更しました。
MBFPDF では素直に FPDF の実装を拡張しているようでしたが、折返し部分の抽出を共通化したため、ソース自体の見通しは良くなっています。
日本語フォント以外も MBMultiCell/MBWrite を利用するようにしたため、FPDF とは動作が異なっている可能性があります。
手持ちのスクリプトでは問題は見つけられませんでしたが、かなり力技な計算をしているのでおかしなところが残っているかと思います。
また、簡単なぶら下がり禁則を実装しましたので、MultiCell や Write も多少は細かなことを考えずに使えるようになったのではないかと思います。
Presented by Kazuhiko Iwama.