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

m0r*_*mer 1 pdf iphone xcode cgpdfdocument ios

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

注:目前,我试图用一个UIWebView,不幸的是,似乎无法检测链路水龙头做到这一点.我在文档中已经读到了一系列称为CGPDF的类和方法.该文档谈到所有关于解析PDF文档,什么不可以,但不是具体的关于如何检测链路的水龙头并没有什么(感谢苹果).

Tom*_*mmy 5

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

CoreGraphics对用户交互一无所知,所以我认为Apple认为隐含在那里没有点击的概念,因此CoreGraphics无法直接帮助你捕捉点击.

有用于加载PDF并将其绘制到本文档顶部的上下文的示例代码.CoreGraphics在OS X和iOS上是相同的,除了初始坐标系是相反的方式.在OS X上,它与PDF相同,在iOS上则是相反的方式,因此如果不进行调整,PDF将沿y反转.示例显示代码后面的部分标题为"为PDF页面创建转换"并且应该有帮助 - 您只需要应用反转y的转换.

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

关于捕捉水龙头,事情变得有点复杂.由于文件格式的工作方式,您无需执行完整的PDF检查等任何操作.链接的东西被绘制成看起来它们应该按照CoreGraphics可以为您处理的普通PDF操作来查看.然后有单独的表格来描述用于捕捉水龙头的边界框矩形以及它们应该去的链接.这些表格被CoreGraphics解析为易于阅读的格式,但没有经过检查.因此,您可以使用所有工具找出链接的位置,而无需过多地了解文件格式,但您仍需要自己完成这些工作.

相关的CoreGraphics构造是CGPDFDictionary.您可以在此处获取最新的PDF规范,但其中99%与您无关或涵盖CoreGraphics已实施的内容.您需要在文档中来回跳转以将所有位拼凑在一起,但您可以在第488页的注释中跳过第488页.

它最终是一个相当复杂的代码组合,我不能出于商业原因发布我自己的,但你想要建立页面名称到页码的映射,遍历链接注释(这是指向命名的链接)页面)并做一些事情来抓住水龙头.就个人而言,我刚刚添加了不可见的UIButtons作为我的自定义PDF视图的子视图.显然,您应用于PDF的任何变换也需要应用于注释坐标.

总的来说可能是1000行.