CGPDF<...> - где находятся сеттеры?

Есть ли способ создать объекты PDF (например, PDF-словарь с параметрами, которые нужны пользовательскому производителю PDF / потребителю / средству просмотра) с помощью CGPDF<...> или я должен написать свой собственный анализатор и создать новые трейлеры, внешние ссылки и т. д. для добавления новых объектов в PDF? Насколько я понимаю, CG переводит все вызовы рисования своего графического контекста в правильные аналоги PDF при создании PDF - но у меня есть пользовательские данные / объекты (например, для аннотаций, потоков и т. Д.), Которые должны храниться в PDF, но это, очевидно, не может быть автоматически создан CG.

Я могу найти только все эти добытчики

Получение данных из словаря

CGPDFDictionaryGetArray
CGPDFDictionaryGetBoolean
CGPDFDictionaryGetCount
CGPDFDictionaryGetDictionary
CGPDFDictionaryGetInteger
CGPDFDictionaryGetName
CGPDFDictionaryGetNumber
CGPDFDictionaryGetObject
CGPDFDictionaryGetStream
CGPDFDictionaryGetString

Любая помощь будет оценена?

И, между прочим, кто-нибудь знает ссылки, по которым я могу узнать, чего можно добиться в реальном мире с помощью этой функции и ее обратного вызова.

CGPDFDictionaryApplyFunction
CGPDFDictionaryApplierFunction

Может быть, пример приложения, чтобы увидеть его в действии?

Спасибо заранее

2 ответа

Решение

Нет сеттеров. API CGPDF доступен только для чтения.
Функция CGPDFDictionaryApplyFunction просто позволяет перечислять записи в объекте словаря. Каркас PDFKitten использует эту функцию в нескольких местах, если вы хотите увидеть реальное использование.

Мы нашли это нелегким путем, когда добавили поддержку аннотаций в коммерческом PSPDFKit SDK для iOS и Android.

Ознакомьтесь со спецификацией PDF, стр. 23ff, чтобы получить список стандартных фильтров, которые вы должны поддерживать, рядом с простым лексером / парсером.

Мы создали исходную версию в Objective-C, используя доступ к необработанным файлам, а затем используя наш собственный небольшой анализатор. После анализа всех объектов вы можете добавить новый трейлер с объектами, которые вы хотите изменить. Без поддержки всех вышеупомянутых методов сжатия это не будет работать для всех документов. Потребовалось несколько лет, чтобы достичь состояния, в котором можно сказать, что оно работает с 99,9% всех документов. Есть спецификация PDF, а затем есть реальность с файлами, которые не должны работать ни в одном из вменяемых средств визуализации, однако Adobe Acrobat с радостью отображает документ. PDF в этом больше похож на HTML, где даже когда вещи ужасны и сломаны, браузеры все равно что-то показывают.

В итоге мы заново реализовали все в C++ для достижения высокой производительности анализа и провели тысячи тестов только для этого компонента. Вы также можете взглянуть на другие коммерческие продукты, такие как muPDF, которые могут вам помочь - я просто хочу уберечь вас от того, чтобы идти по пути повторной реализации всего с нуля, так как для того, чтобы код стал приемлемым, понадобится несколько лет уровень совместимости и производительности.

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