このリポジトリは、TCPDFに対して以下の対応を追加したものです。
- 行間調整(行の下にマージンを追加)を最終行において行わないようにする対応
- テキストのスケーリング時に、日本語の禁則処理を踏まえた改行が行われるような対応
- Unicode IVSが出力できるようにする対応
上記の修正は、「Thinreports Generator PHP2」への改修に伴って実施しました。
- TCPDFは巨大で、正規化されておらず、(フレームワークにおいて)グローバルに扱われる変数が多く、他の機能に影響を与えずに改修を行うことは非常に困難だと思いました。
- 今回の改修はthinreports-phpを日本語環境において動作させることを目的としました。
- 追える範囲では対応していますが、他の言語や機能・関数で想定外の動作が起こる可能性が否定できません。
- オリジナルにあまり影響を与えないように作ろうと思いましたが、mbstringを使ってしまっていたため、テストが落ちています。
- 禁則対象の文字列は
TCPDF.php
の$prohibited_prefix
及び、$prohibited_suffix
として定義しています。- 現時点で外部から変更する手段を用意できていません。
- このドキュメントを書いていて気づきましたが、外部から動作自体をON/OFFする手段が抜け落ちています。
- フォントにおいてIVSグリフの有無を問い合わせるため、フォントのキャッシュデータに
$ctgivs
を追加しています。fonts/*
は必要に応じて再作成してください。
- 調べた限り、PDFフォーマットは(IVSを含む)Unicodeを無理なく処理できるものではありません。
- 具体的には、1文字がUTF16の2byteで表現できない文字が鬼門です。
- 2文字で1文字を定義するIVS及び、U+10000以降のUnicode文字については、UnicodeのBMP内の私用面(U+E000-U+F8FF)の文字列として置き換えています。
- 上記に伴い、以下の制限があります。
- 作成するPDFの中で、(1フォント毎に)私用面の領域(6400)を超える種類のIVS文字列を使用出来ない。
- 使用するフォントにおいて、私用面が利用されていないこと。
- コピペについては、ToUnicode mapを更新しているので問題ないハズです。
- PDFへのフォント埋め込みに際して、不要なグリフなどを省いたサブセットフォントを作成します。
- IVSの追加に伴い、cmapテーブルを(そのまま)追加しているため、従来よりもサイズが大きくなります。
- 主要な改修は需要側が満足したため終了しています。
- 特に反応が無い限りは、個人レベルで必要に応じて改修していく予定です。
- 今回の改修内容についてPullReqを予定していましたが、挫折しました。
- ライセンス等については変更していないので、今回の変更内容を取り込んで頂くことに問題はありません。
- 今後、これ以上の改修が必要になった場合は、根本的に作り直した方がいい気がしています。