Я пытаюсь отобразить содержимое PDF в контексте устройства GDI (точнее, 24-битное растровое изображение). Синтаксический анализ потока PDF в объекты PDF и рендеринг команд PDF из словаря содержимого работает хорошо, включая отрисовку шрифтов.
Встроенные шрифты распаковываются из потоков FontFile и «загружаются» с помощью AddFontMemResourceEx
. Теперь некоторые встроенные шрифты удаляют некоторые таблицы TrueType, которые нужны GDI, такие как таблица 'name'. Из-за этого я попытался изменить шрифт, проанализировав шрифт подмножества TrueType в его таблицах, и изменил те таблицы, в которых отсутствуют / отсутствуют данные, сгенерированы как можно более точные данные.
Я использую инструмент Microsoft Font Validator , чтобы увидеть, насколько «правильный» сгенерированный шрифт. Я все еще получаю несколько ошибок, например, для таблицы maxp значения max обычно слишком велики (это подмножество) или поле xAvgCharWidth
не равно расчетному значению таблицы 'OS / 2', но это неверно, но это не мешает использовать другие встроенные шрифты. Шрифты, встроенные с использованием PDFCreator, являются проблемными.
Вопросы:
- Как я могу определить, что мне нужно
перейти к файлу шрифта для того, чтобы
GDI, чтобы иметь возможность использовать его?
- Есть ли другие проверки шрифтов?
инструменты, которые могут дать мне понимание
в то, что все еще не так с
fontfile
При необходимости: я могу сделать исходный файл шрифтов и измененный файл шрифтов доступными для скачивания где-нибудь.
Какие модификации сделаны до сих пор:
- Убедитесь, что есть разделы «head», «hhea», «maxp» и «OS / 2».
- Если у нас есть символьный шрифт, очистите поля Panose и Unicode в разделе «OS / 2»
- Введите правильные значения для WInAscent / Desc и TypoAsc / Desc, если они равны нулю.
- Заполните допустимые значения для позиций / размеров super / subscript / underline.
- Сканирование всех оставленных глифов и заполнение значений X / Y min / max в голове.
- Перестройте раздел имени с информацией из файла PDF, из которого он получен.