如何在iOS上的PDF中检索"大纲"目标的页码或页面引用?

sha*_*all 6 pdf iphone objective-c ios

我一直在阅读adobe pdf规范,以及用于pdf渲染和解析的apple的quartz 2d文档.我还下载了Voyeur并用它检查了一个本地pdf以查看它的内部数据.此时我可以获取文档目录,然后从那里获取轮廓字典.我可以看到嵌套在轮廓词典词典中的是名为"/ Dest"的节点,其值如下:

G1.1025588等

我想知道是否有一种方法让我使用这些值来获取对页面的引用,使用一些方法来渲染我已经看过github项目,如Reader,以及Apple记录的示例.

PDF处理绝对是一个挑战,所以任何帮助将不胜感激.

omz*_*omz 4

/Dest大纲项字典中的条目可以是名称字符串数组

  • 最简单的情况是如果它是一个数组;那么第一项是大纲条目指向的页面对象(字典)。要获取页码,您必须遍历文档中的所有页面,并查看哪一页等于 ( ==) 您拥有的字典(CGPDFPageRefs 实际上是CGPDFDictionaryRefs)。您还可以遍历页面树,这有点困难,但可能会更快(没有您想象的那么多,我不会在这里过早优化)。数组中的其他项目是页面上的位置等,请在 PDF 规范中搜索“显式目标”以了解更多信息。

  • 如果条目是名称字符串,则它是命名目的地。您必须将名称从文档目录的/Dests条目映射到目标,该条目是包含名称树的字典。名称树本质上是一个树形图,它允许快速访问命名值,而不需要一次读取所有数据(与普通字典一样)。不幸的是,Quartz 中没有对名称树的直接支持,因此您必须做更多的工作来递归地解析此结构(请参阅 PDF 规范中的“名称树”

请注意,大纲项不一定有/Dest条目,它还可以通过/A(操作)条目指定其目的地,这有点复杂。然而,在大多数情况下,该操作将是“GoTo”操作,本质上是目的地的包装。

名称到目的地的映射也可以存储为普通字典。在这种情况下,它位于/Dests文档目录中 /Names 字典的条目中。不过我很少看到这个,并且它在 PDF 1.2 之后被弃用(当前是 1.7)。

您肯定需要 PDF 规范:http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf