Я пытаюсь представить содержание PDF к контексту устройства GDI (битовый массив на 24 бита, чтобы быть точным). Парсинг потока PDF в объекты PDF и рендеринг команд PDF из словаря содержания работают хорошо, включая рендеринг шрифта.
Встроенные шрифты распаковываются от их потоков FontFile и "загрузили" использование AddFontMemResourceEx
. Теперь некоторые встроенные шрифты удаляют некоторые таблицы TrueType, которые необходимы GDI, как таблица 'имени'. Из-за этого я пытался изменить шрифт путем парсинга шрифта подмножества TrueType в, он - таблицы, и измените те таблицы, которые имеют пропавших без вести данных / недостающие таблицы повторно созданы с максимально корректной информацией.
Я использую инструмент Microsoft Font Validator, чтобы видеть, насколько "корректный" сгенерированный шрифт. Я все еще получаю несколько ошибок, как для maxp таблицы, макс. значения являются обычно слишком большими (это - подмножество), или xAvgCharWidth
поле не равняется расчетному значению таблицы 'OS/2', не корректно, но это не останавливает другие встроенные шрифты, чтобы быть применимым. Шрифты встроили использование, PDFCreator - те, которые проблематичны.
Вопросы:
В случае необходимости: Я могу сделать исходный fontfile и измененное fontfile доступное для скачивания где-нибудь.
Какие модификации сделаны до сих пор:
С помощью AddMemoryFont в GDI + вы можете проверить его Status на наличие ошибок в шрифте памяти, например NotTrueTypeFont
.
Одним из вариантов для GDI может быть попытка самостоятельно загрузить встроенный шрифт в документ / форму с помощью TTLoadEmbeddedFont , а затем проверить все ошибки, возвращаемые из сообщений об ошибках . Единственные функции, которые предоставляют больше информации, чем эта, - это CreateFontPackage / MergeFontPackage и их коды ошибок , но я не понимаю, как их можно использовать в ваша ситуация.
За исключением всего этого, была ли у вас возможность ознакомиться с исходным кодом PDFCreator (при условии, что вы используете код с открытым исходным кодом, а не коммерческий)?