如何显示包含超链接的PDF文档? (在iOS上)

情况:我有一个包含超链接的pdf文档。 我想我的iPhone应用程序显示这个pdf文档,并启用超链接的点击。

注意:目前,我正在尝试用一个UIWebView来做到这一点,不幸的是,它似乎无法检测到链接水龙头。 有一个叫做CGPDF的类和方法的家族,我已经在文档中看过。 文档谈论所有关于parsingpdf文档,什么不是,但没有具体如何检测链接水龙头,什么不(谢谢苹果)。

我不能评论UIWebView,但CGPDF的东西是CoreGraphics的一部分。 所以它主要是为了绘图 – 你将有一个PDF对象和一个上下文来绘制它(几乎可以肯定是通过UIView的一个自定义的子类来接收的),并要求它在一定的尺度和位置上绘制。 如果您是CoreGraphics和/或自定义UIView子类的新手,那么可能需要一天左右的时间才能进入,但最终会变成几百行。

CoreGraphics不知道用户交互的任何内容,所以我认为苹果公司认为它隐含着没有水龙头的概念,因此CoreGraphics不能直接帮助你捕捉水龙头。

有一些示例代码用于加载PDF并将其绘制到本文档顶部的上下文中。 CoreGraphics在OS X和iOS上是一样的,除了初始坐标系是相反的。 在OS X上,与PDF相同,在iOS上则相反,所以如果没有调整,PDF将沿着y翻转。 示例显示代码之后的部分标题为“为PDF页面创build转换”,并且应该对此有所帮助 – 您只需应用反转y的转换即可。

这里有一个关于如何创build一个包含一些CoreGraphics绘图步骤的自定义UIView子类的教程 。

关于捕获水龙头,情况会变得更复杂一些。 由于文件格式的工作方式,您不需要像完整的PDF检查那样做任何事情。 绘制链接的东西,但看起来应该看看每个正常的PDF操作,CoreGraphics可以为您处理。 然后有单独的表格来描述捕获水龙头的边界框矩形和它们应该去的链接。 这些表格被CoreGraphicsparsing成易于阅读的格式,但未经检查。 因此,您可以使用所有工具来查找链接的位置,而不必过多地了解文件格式,但是您仍然需要亲自查看。

相关的CoreGraphics结构是CGPDFDictionary。 你可以在这里获取最新的PDF规范,但是99%的规范与你无关,或者覆盖了CoreGraphics已经实现的东西。 您需要在文档中来回跳转,以便将所有位合并在一起,但是您可以跳至注释的第8.48节的页面488上。

它最终是一个相当复杂的代码组合,我不能发布自己的商业原因,但你会想build立一个页面名称到页码的映射,遍历链接注释(这是指向命名页面),并做点什么来吸水龙头。 就我个人而言,我只是添加了无形的UIButtons作为我的自定义PDF视图的子视图。 很明显,您应用于PDF的任何变换都需要应用于注释坐标。

总共是1000行。