技術メモ

TCPDFで外字とサロゲートペア文字対応をした記録

更新日:

タイトルの通りです。ここに作業を記録しておきしますが、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に詳しくなってしまったが、今後使うこともないだろうからすぐに忘れるでしょう。

 

-技術メモ

Copyright© ばしさんの開発ブログ , 2019 All Rights Reserved Powered by STINGER.