Получить имя шрифта файлов odttf, созданных программой записи документов XPS

У меня есть PDF-файл, используя только 2 типа шрифтов.

Но при экспорте pdf в формат xps в сгенерированном документе xps содержится столько же файлов odttf, сколько элементов glyphs.

Теперь я хочу, чтобы все глифы с одинаковым типом шрифта имели одинаковое значение FontUri. Но как определить, если 2 файла odttf имеют одинаковый тип шрифта?

1 ответ

Решение

Иногда (но не всегда) можно определить имя шрифта , посмотрев на последнюю часть файла odttf. Фактически, я регулярно извлекаю имена шрифтов из файлов odttf (созданных XPS Document Writer) с помощью скрипта на python, просматривая то, что непосредственно предшествует и следует за фразой "Это уникальный идентификатор", который можно найти в последних 100 или так байтов каждого файла odttf, который я видел до сих пор. Конечно, это ужасный взлом - но это работает (по крайней мере, для меня).

Похоже, действительно ли это работает, зависит от того, какая программа сгенерировала PDF-файл и / или какая программа используется для печати PDF-файла в XPS Document Writer и / или какие конкретные шрифты содержит PDF-документ.

Мой опыт в основном ограничен преобразованием PDF-файлов, сгенерированных pdflatex, таким образом: как онлайн-репетитор по математике, мне нужно конвертировать формулы, текст и рисунки из PDF в XAML, чтобы иметь возможность вставлять их в общую доску на основе WPF., Так что этот хак может или не может работать для вас. (Также: этот хак может перестать работать в любое время...)

Вместо того, чтобы пытаться выяснить имя шрифта, вы также можете преобразовать ваши PDF-файлы в XAML, полностью исключив ссылки на шрифты: вы можете обрезать PDF с помощью pdfcrop (от Heiko Oberdiek) перед отправкой его в XPS Document Writer. По моему опыту, это вынуждает комбинацию Adobe Reader и XPS Document Writer (по неизвестным мне причинам) создавать код XAML, который не содержит глифов и, следовательно, не содержит ссылок на шрифты (содержащиеся в обфусцированных файлах odttf). Но, к сожалению, вы получаете гораздо больше кода XAML, потому что все глифы должны быть представлены путями (что включает в себя большое количество повторений).

С уважением, Кристиан

Другие вопросы по тегам