Я пытаюсь отобразить PDF-контент в контексте устройства GDI (24-битная растровая карта, если быть точным). Разбор PDF-потока в PDF-объекты и рендеринг команд PDF из словаря содержимого хорошо работает, включая рендеринг шрифтов.Изменение встроенного шрифта TrueType, так что он будет использоваться Windows GDI
Встраиваемые шрифты распаковываются из потоков FontFile и «загружаются» с использованием AddFontMemResourceEx
. Теперь некоторые встроенные шрифты удаляют некоторые таблицы TrueType, которые необходимы GDI, например, таблица «name». Из-за этого я попытался изменить шрифт, проанализировав шрифт подмножества TrueType в его таблицах и изменив те таблицы, у которых отсутствующие/отсутствующие таблицы данных регенерируются с максимально возможной информацией.
Я использую инструмент Microsoft Font Validator, чтобы узнать, как «правильный» созданный шрифт. Я все еще получаю несколько ошибок, например, для таблицы maxp максимальные значения обычно слишком велики (это подмножество), или поле xAvgCharWidth
не равно расчетному значению таблицы «OS/2», но это не так прекратите использование других встроенных шрифтов. Шрифты, встроенные с помощью PDFCreator, являются проблемными.
Вопросы:
- Как я могу определить, что мне нужно изменения в файл шрифта для того, чтобы GDI, чтобы иметь возможность использовать его?
- Есть ли еще какая-либо проверка шрифта Инструменты, которые могут дать мне проницательность в то, что по-прежнему не так с файлом font ?
При необходимости: Я могу сделать оригинальный файл шрифта и измененный файл шрифтов, доступный для загрузки.
Какие изменения сделаны до сих пор:
- Убедитесь, что это 'голова', 'hhea', 'MAXP' и в разделе 'OS/2'.
- Если у нас есть шрифт символа, очистите поля Panose и Unicode в разделе «OS/2»
- Заполните правильные значения для WInAscent/Desc и TypoAsc/Desc, если они равны нулю.
- Заполните допустимые значения для положений и размеров супер/подстроки/подчеркивания.
- Сканировать все глифы, которые оставлены, и заполнить минимальные/максимальные значения X/Y в голове.
- Перестройте раздел имени с информацией из файла PDF, из которого оно было получено.
PDFCreator опирается на Ghostscript для создания PDF. Входом PDFCreator является PostScript, который (в Windows) обычно выводится как вывод драйвера принтера PostScript (чаще всего, драйвер PS от Adobe). Итак, вопрос: вы полностью контролируете свой рабочий процесс? Или вам нужно обрабатывать PDF-файлы, которые были созданы PDFCreator где-то, когда-то вне вашего контроля? Если вы находитесь под полным контролем, вы можете настроить рабочий процесс PDFCreator для встраивания оригинальных шрифтов TrueType, используемых в исходном (не-PostScript) формате документа, вместо того, чтобы рабочий процесс конвертировал шрифты в PS Type1. –
@pipitas: исходные PDF-файлы считаются «вне нашего контроля». В настоящее время у нас есть руководство, в котором говорится: при использовании PDFCreator не используйте встроенные шрифты. Основная причина, по которой я * действительно хочу решить эту проблему, - это полное понимание требований загрузки шрифтов TrueType для Windows. Если я смогу использовать GDI для рисования текста, я могу избежать в зависимости от других библиотек DLL, библиотек с их лицензиями и патентных вопросов и т. Д. Но в конце концов мне очень нравится решать эту проблему, хотя теперь она ниже в списке prio из-за к руководству. –
Хорошо, если ваша проблема возникает главным образом с выходом PDFCreator, но вам не разрешается «исправлять» причину этой проблемы в ее корне (глупой директивой, которая гласит: «Не делайте для своих PDF-файлов, что все последние усилия по стандартизации [ PDF/X, PDF/A] рекомендуется [а именно, встраивание шрифтов]! », То я в тупик ... –