2015-07-19 32 views
2

有没有办法用CGPDF < ...>来创建PDF对象(例如带有自定义PDF生产者/消费者/查看者所需参数的PDF字典)...还是必须编写我自己的解析器并创建新的预告片,外部参照等,以便将新对象添加到PDF中?据我了解,CG在创建PDF时将其图形上下文的所有绘图调用转换为正确的PDF对应文件 - 但我拥有应存储在PDF中的自定义数据/对象(例如用于注释,线程等),但显然CG不能自动创建。CGPDF <...> - 安装人员在哪里?

我只能找到这些干将

从字典

CGPDFDictionaryGetArray
CGPDFDictionaryGetBoolean
CGPDFDictionaryGetCount
CGPDFDictionaryGetDictionary
CGPDFDictionaryGetInteger
CGPDFDictionaryGetName
CGPDFDictionaryGetNumber获取数据10 CGPDFDictionaryGetObject
CGPDFDictionaryGetStream
CGPDFDictionaryGetString

任何帮助,将不胜感激?

顺便说一句 - 有没有人知道一些链接,我可以找出在现实世界中用这个函数和它的回调可以实现什么。

CGPDFDictionaryApplyFunction
CGPDFDictionaryApplierFunction

也许示例应用程序来看到它在行动?

Thx预先

回答

2

有没有setters。 CGPDF API是只读的。
CGPDFDictionaryApplyFunction只是让您枚举字典对象中的条目。如果您想查看真实世界的用法,PDFKitten框架在一些地方使用此功能。

+0

感谢您的小猫链接。所以你认为除了我可以用CGPDF API检索的信息之外,我还必须进行私人解析? – mramosch

+0

是的,你将不得不做你的私人解析和写作,或使用专用的第三方PDF库。 –

+0

** // @ Mihai:**那么 - 开心编码;-) – mramosch

1

我们发现,当我们在iOS和Android的商业PSPDFKit SDK中添加批注支持的时候,我们感到困难。

查看PDF Specification,第23页以获取您需要支持的标准过滤器列表,旁边是简单的词法分析器/解析器。

我们在Objective-C中构建了初始版本,使用原始文件访问,然后使用我们自己的小解析器。分析完所有对象后,可以为要更改的对象附加一个新的预告片。如果不支持所有上述压缩方法,这将不适用于所有文档。花了几年的时间才达到可以说99.9%的文件在那里工作的状态。这里有PDF规范,然后就是现实中存在的文件不应该在任何理智的渲染器中工作,但Adobe Acrobat会愉快地呈现文档。其中的PDF更像HTML,即使在事情可怕并且破碎的情况下,浏览器仍然显示一些东西。

我们最终重新实现了C++中的所有内容,以实现出色的解析性能,并为此组件单独进行了数千次测试。您也可以查看其他商业产品,例如muPDF,它可以帮助您 - 我只是想让您从头开始重新实施所有事情,因为只需几年时间就可以使代码可以接受兼容性和性能水平。