До сих пор я сталкивался с тем, что я могу подумать об «ошибке» в библиотеках рендеринга шрифтов Oracle в Java.В некоторых шрифтах (например, шрифтах, встроенных в файлы PDF) используются некоторые нерегулярные коды символов, и с ними связаны глифы.
При попытке получить вектор глифа с использованием метода java.awt.Font.createGlyphVector
в таких случаях (коды символов 9), 10 и 13, которые принадлежат tab, возврат каретки и новая строка) правильный глиф не возвращается, но он работает для всего остального.
Я отслеживал проблему в реализации CMap в Java, в которой есть кодпримерно так:
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;
}
}
Итак, мой вопрос:
- Это действительно ошибка?
- Кто-нибудь знает, как обойти это?
- Есть ли способ извлечь данные CMAP из шрифтов истинного типа, чтобы я мог сопоставить символы (кодовые точки) с кодами глифов?