2

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

我只能找到所有这些吸气剂

从字典中获取数据

CGPDFDictionaryGetArray
CGPDFDictionaryGetBoolean
CGPDFDictionaryGetCount
CGPDFDictionaryGetDictionary
CGPDFDictionaryGetInteger
CGPDFDictionaryGetName
CGPDFDictionaryGetNumber
CGPDFDictionaryGetObject
CGPDFDictionaryGetStream
CGPDFDictionaryGetString

任何帮助,将不胜感激 ?

顺便说一句 - 有没有人知道一些链接,我可以在其中找到使用此函数及其回调在现实世界中可以实现的目标。

CGPDFDictionaryApplyFunction
CGPDFDictionaryApplierFunction

也许一个示例应用程序可以看到它的实际效果?

提前谢谢

4

2 回答 2

3

没有二传手。CGPDF API 是只读的。
CGPDFDictionaryApplyFunction 只是让您枚举字典对象中的条目。如果您想查看实际使用情况,PDFKitten 框架会在一些地方使用此功能。

于 2015-07-19T06:24:13.673 回答
2

当我们在适用于 iOS 和 Android 的商业 PSPDFKit SDK 中添加注释支持时,我们发现了这一点。

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

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

我们最终用 C++ 重新实现了所有东西,以实现出色的解析性能,并且仅针对这个组件就进行了数千次测试。您还可以查看其他可能对您有所帮助的商业产品,例如 muPDF - 我只是想避免您走上从头开始重新实现所有内容的道路,因为只需几年时间即可使代码达到可接受的水平兼容性和性能水平。

于 2016-04-16T19:35:27.943 回答