Как «увидеть» отдельные глифы в объекте потока / FontFile2 PDF? - PullRequest
0 голосов
/ 29 марта 2019

Как извлечь сопоставление из символов символов (CID) в инструкции глифа во встроенном шрифте CID PDF-файла?

Некоторый фон

У меня большойколлекция файлов PDF, некоторые из которых содержат ошибочные данные CMAP \ ToUnicode, которые вызывают проблемы при извлечении текста из файлов.

Поскольку отображаемые страницы выглядят нормально, я хотел бы понять объект потока / FontFile2 (встроенный шрифт типа CID на основе OpenType), содержащийся в PDF-файлах.Вероятно, достаточно просто иметь возможность проанализировать поток в сопоставлении CID с глиф-инструкциями, не понимая, как интерпретировать инструкции.

(CID-коды постоянно переходят от одного файла к другому в коллекциидаже если их всего около полдюжины или около того, так что я надеюсь, что даже без понимания того, как интерпретировать инструкции глифа, я смогу однозначно идентифицировать их и исправить отображение \ ToUnicode, сравнивая ошибочные и правильныесопоставления, возможно, даже просто применяя правило простого большинства для определения сопоставления «инструкции глифа» -> Unicode, и используя его для исправления сопоставлений отдельных файлов. Если вы обнаружите какие-либо проблемы с этим подходом, дайте мне знать!)

Что я уже пробовал

Этот вопрос похож по духу, но мой вопрос имеет другую направленность: я просто хочу иметь возможность сопоставить CID с некоторыми глобальноуникальная подпись (например, хэш-значение инструкций, описывающих этот глипh).

Я предполагаю, что ответ скрыт где-то в спецификации шрифта CID , но я надеялся не читать его ...

Конкретный пример

Один из файлов представляет собой PDF;Вот некоторые из соответствующих объектов:

31 0 obj 
<<
/CIDSystemInfo 32 0 R
/CIDToGIDMap /Identity
/Subtype /CIDFontType2
/Type /Font
/W 33 0 R
/FontDescriptor 34 0 R
/DW 1000
/BaseFont /ABCDEE+David,Bold
>>
endobj 

34 0 obj 
<<
/Descent -265
/FontWeight 700
/StemV 52
/FontName /ABCDEE+David,Bold
/Ascent 735
/ItalicAngle 0
/AvgWidth 521
/FontBBox [-195 -265 1009 735]
/Type /FontDescriptor
/CapHeight 735
/Flags 32
/FontFile2 35 0 R
/MaxWidth 1205
/XHeight 250
>>
endobj 


35 0 obj 
<<
/Length1 53608
/Length 53608>>
[Omitted Stream]

Если возможно, я бы хотел извлечь из [Omitted Stream] достаточно информации, чтобы иметь возможность определить, какой набор инструкций будет вызывать каждый код CID.

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

В Acrobat DC Pro имеется инструмент под названием Preflight, который является достаточно мощным для множества разных вещей, с опцией «Просмотр внутренней структуры всех шрифтов». Это на самом деле позволяет быстро и визуально изучить встроенный поток шрифтов. Это полезно использовать вместе с написанием кода для разбора встроенной программы шрифтов, она не сможет рассказать вам все, что вам нужно знать, чтобы написать синтаксический анализатор, но, безусловно, полезно «увидеть» глифы или прочесать шрифт как учебное упражнение.

screenshot.

Если вы этого еще не сделали, было бы неплохо проверить, есть ли что-то не так со шрифтами, по сравнению с недостатком используемого вами инструмента извлечения текста. Например. попытаться использовать альтернативное программное обеспечение PDF для извлечения текста.

0 голосов
/ 29 марта 2019

FontFile2 указан как

FontFile2 stream (Необязательно; PDF 1.1) Поток, содержащий программу шрифтов TrueType (см. 9.9, «Встроенные программы шрифтов»).

(ISO 32000-1, Таблица 122 - Записи, общие для всех дескрипторов шрифтов)

FontFile2 - (PDF 1.1) Программа шрифтов TrueType, как описано в Справочном руководстве TrueType .Эта запись может появиться в дескрипторе шрифта для словаря шрифтов TrueType или (PDF 1.3) для словаря CIDFontType2CIDFont .

(ISO 32000-1,Таблица 126 - Организация встроенных шрифтов для различных типов шрифтов)

Таким образом, для «просмотра» отдельных глифов в объекте потока / FontFile2 PDF просто анализирует шрифтфайл из потока FontFile2 с использованием библиотеки шрифтов, поддерживающей шрифты TrueType для среды программирования и среды выполнения.Такая библиотека шрифтов должна обеспечивать средства «видеть» отдельные глифы .

Осторожно: В контексте PDF не все функции файла шрифта необходимы.Это заставляет многих создателей PDF обрезать файлы шрифтов до фактически необходимой информации.Поэтому используемая вами библиотека шрифтов должна допускать незначительную недостающую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...