Разбор потока CMap с CGPDFScanner - PullRequest
2 голосов
/ 28 января 2011

Кто-нибудь использовал CGPDFScanner для анализа записи потока ToUnicode CMap словаря шрифтов?Я сталкиваюсь с некоторыми проблемами.

Я получаю ссылку CGPDFStream из словаря и пытаюсь создать CGPDFScanner из нее.Проблема состоит в том, что CGPDFScanner принимает CGPDFContentStream в качестве аргумента, а не CGPDFStream.

Когда я анализирую CGPDFPage для текстового оператора, я могу легко получить CGPDFContentStream с CGPDFContentStreamCreateWithPystreamStreamStringStringStreamStringStringSt,может использовать эту функцию, чтобы получить доступ к содержимому формы, шаблона, шрифта Type3 или любого потока PDF "- это немного не так в справочнике CGPDFContentStream , и я не могу найти образец кода.

В любом случае, я передаю поток CMap в качестве аргумента stream , ресурс CGPDFDictionary, полученный из потока с параметром CGPDFStreamGetDictionary в качестве параметра streamResources , и поток содержимого страницы в качестве родитель .Словарь ресурсов можно легко получить из самого потока, так зачем вообще спрашивать его?Кроме того, передача NULL в качестве параметров, но первый, кажется, не имеет никакого эффекта.

Результат всегда один и тот же: когда я пытаюсь сканировать поток контента с помощью сканера, настроенного с несколькими обратными вызовамиЯ получаю следующие сообщения

`begincodespacerange' isn't an operator.
`beginbfrange' isn't an operator.
...
`endbfrange' isn't an operator.

для каждого оператора, настроенного в таблице обратного вызова.Это для каждого встречающегося CMap.

Итак, я не уверен, что поток контента настроен неверно, недопустимые операторы или CGPDFScanner нельзя использовать для анализа CMap, даже если онобычный объект потока pdf, и мне приходится прибегать к написанию собственного сканера для анализа данных потока.

1 Ответ

3 голосов
/ 28 января 2011

CGPDFScanner может анализировать только потоки содержимого PDF, потоки, содержащие содержимое для отображения.Содержимое страницы, формы XObjects, шаблоны, шрифты Type3 используют один и тот же формат потока.ToUnicode CMap - это совершенно другой поток, он использует синтаксис, отличный от потоков контента.Вам нужно написать свой собственный сканер для разбора CMap.Формат ToUnicode CMap задокументирован в спецификации Adobe PDF, раздел 5.9.2 PDF-ссылки 1.7, Технические примечания Adobe № 5014 и № 5411.

...