Изменение встроенного шрифта TrueType, таким образом, это будет применимо Windows GDI

Я пытаюсь представить содержание PDF к контексту устройства GDI (битовый массив на 24 бита, чтобы быть точным). Парсинг потока PDF в объекты PDF и рендеринг команд PDF из словаря содержания работают хорошо, включая рендеринг шрифта.

Встроенные шрифты распаковываются от их потоков FontFile и "загрузили" использование AddFontMemResourceEx. Теперь некоторые встроенные шрифты удаляют некоторые таблицы TrueType, которые необходимы GDI, как таблица 'имени'. Из-за этого я пытался изменить шрифт путем парсинга шрифта подмножества TrueType в, он - таблицы, и измените те таблицы, которые имеют пропавших без вести данных / недостающие таблицы повторно созданы с максимально корректной информацией.

Я использую инструмент Microsoft Font Validator, чтобы видеть, насколько "корректный" сгенерированный шрифт. Я все еще получаю несколько ошибок, как для maxp таблицы, макс. значения являются обычно слишком большими (это - подмножество), или xAvgCharWidth поле не равняется расчетному значению таблицы 'OS/2', не корректно, но это не останавливает другие встроенные шрифты, чтобы быть применимым. Шрифты встроили использование, PDFCreator - те, которые проблематичны.

Вопросы:

  1. Как я могу определить то, что я должен изменить на файл шрифтов для GDI, чтобы смочь использовать его?
  2. Есть ли какие-либо другие инструменты проверки шрифта, которые могли бы дать мне понимание, что является все еще неправильным с fontfile?

В случае необходимости: Я могу сделать исходный fontfile и измененное fontfile доступное для скачивания где-нибудь.

Какие модификации сделаны до сих пор:

  • Удостоверьтесь, что существует 'голова', 'hhea', 'maxp' и раздел 'OS/2'.
  • Если мы имеем шрифт символа, убираем поля Panose и Unicode в разделе 'OS/2'
  • Заполните правильные значения для WInAscent/Desc и TypoAsc/Desc, если они мы - нуль.
  • Заполните допустимые значения для супер/нижних/подчеркиваний положений и размеров.
  • Просканируйте все глифы, которые оставляют, en заполняют минимальные значения X/Y / макс. значения в голове.
  • Восстановите раздел имени с информацией из файла PDF, из которого это прибыло.

6
задан Todd Main 22 July 2010 в 19:06
поделиться

1 ответ

С помощью AddMemoryFont в GDI + вы можете проверить его Status на наличие ошибок в шрифте памяти, например NotTrueTypeFont .

Одним из вариантов для GDI может быть попытка самостоятельно загрузить встроенный шрифт в документ / форму с помощью TTLoadEmbeddedFont , а затем проверить все ошибки, возвращаемые из сообщений об ошибках . Единственные функции, которые предоставляют больше информации, чем эта, - это CreateFontPackage / MergeFontPackage и их коды ошибок , но я не понимаю, как их можно использовать в ваша ситуация.

За исключением всего этого, была ли у вас возможность ознакомиться с исходным кодом PDFCreator (при условии, что вы используете код с открытым исходным кодом, а не коммерческий)?

3
ответ дан 17 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: