Как извлечь сопоставление из символов символов (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.