タイトルの通りです。ここに作業を記録しておきしますが、GOOGLE検索でわかることをここで書いても仕方ないので、概要だけ。
お仕事としてはPHPからPDFを生成するためにTCPDFを使うのですが、名前の部分で通常のUNICODEでは対応できない外字とサロゲートペア文字を出す必要になりました。
まず外字ですが、クライアントが購入した外字辞典を使わせる必要があり。TCPDFにはフォントを追加するメソッドがあるので、それにしたがって追加すればOK
ここの手順はググれば出てくるので割愛
問題は外字辞典をSetFontで適用すると、既存の文字が化けるのですよ。なので1文字づつ外字判定してやることにする。
理想は 外字+使ってるフォントをマージしてTTFファイルにできればなのだが、そんな知識は無い!
ともあれ1文字づつ判定で外字は出た。
しかしサロゲートペア文字は出ない。あ、サロゲートペアについては自分で調べて。
で、対処法だがTCPDF.PHPを読み込むと、作者がCIDフォントをベースにサロゲート対応したフォントを用意していることを発見
CASE文があって CID0JPという改造されたフォントが生成されるようなので試してみる。
ちなみにサロゲ文字の場合はCID0JPフォントをSetしてやらなければならない。まあ普通の文字もCIDで出るみたいだけど。
つまり 外字フォント 通常フォント CID0JPフォントの3つを使い分けなければならないことになった。
しかもCID0JPフォントはCHROMEのPDFビューワーでは表示できないおまけつき。ここはアドビリーダーインスコしてもらってそれで見てね!でお願いする。
ともあれ、フォントを切り替えてやることで対応できることは分かったが、さらに問題が。表形式の描画が多いのでMultiCell関数を多用していたのだが、MultiCellってセル単位にしかフォントが追加できない。
今は1文字づつフォントを適用する構造なので、MultiCellをまんま使えないことになり、MultiCell関数をラップする関数を作って、その中で1文字づつフォントを適用することにしました。
一週間くらいこれにハマって、すっかりTCPDFに詳しくなってしまったが、今後使うこともないだろうからすぐに忘れるでしょう。