これまでに遭遇したのは、Java での Oracle のフォント レンダリング ライブラリの「バグ」と考えられるものです。特定のフォント (PDF ファイルに埋め込まれたフォントなど) では、いくつかの不規則な文字コードが使用され、それらに関連付けられたグリフがあります。
java.awt.Font.createGlyphVectorこのような場合 (タブ、キャリッジ リターン、および改行に属する文字コード 9、10、および 13) でメソッドを使用してグリフ ベクトルを取得しようとすると、正しいグリフが返されませんが、それ以外の場合はすべて機能します。
Java での CMap 実装の問題を追跡しました。これには、次のようなコードがあります。
char getGlyph(int charCode) {
if (charCode < 256) {
if (charCode < 0x0010) {
switch (charCode) {
case 0x0009:
case 0x000a:
case 0x000d: return CharToGlyphMapper.INVISIBLE_GLYPH_ID;
}
}
return (char)(0xff & cmap[charCode]);
} else {
return 0;
}
}
だから、私の質問は:
- これは本当にバグですか?
- これを回避する方法を知っている人はいますか?
- 文字 (コード ポイント) をグリフ コードにマップできるように、True Type フォントから CMAP データを抽出する方法はありますか?