わけあってCIDをもとに対応する文字を取得したい。
ざっと調べてみたら、CIDと文字が対になった一覧表はこのへんにあるんだけどプログラムからは使いにくい。
プログラムから使いやすそうな資料を探してみたところ、どうもAcrobat内部ではCIDをUnicodeに変換するようなことをしてるらしいことがわかった。その変換に関する資料がこれ。
すかさずこの資料の後半のMapping Fileを拝借。
CIDを投げたらCID→Unicode→String.fromCharCode()で文字を取得ってクラスを作ったんだけど、どうも取得したUnicodeが期待した文字に変換できてない。
この「Unicode」はString.fromCharCodeで変換できる「Unicode」じゃないのかなぁ?
うーん…
と思ったら、FontForgeで使ってるcidmapっていうCIDのマッピングファイルに「Adobe-Japan1-6.cidmap」ってのがあった。これをコンバートして使ってみたらうまく変換できた。ワーイ。
どうも上記のデータはAdobe-Japan2のマッピングデータらしい。なるほろ。
package
{
public class CharCodeUtil
{
static private var list:Array;
public function CharCodeUtil()
{
}
static public function getCharFromCID(cid:uint):String
{
var char:String = "";
init();
for each (var obj:Object in list)
{
if (cid == uint(obj.c[0]))
{
char = String.fromCharCode(uint(obj.u));
break;
}
}
return char;
}
static private function init():void
{
if (list) return;
list = [
//ここに.cidmapをArray化したデータを
];
}
}
}