情况:我有一个包含超链接的 pdf 文档。我希望我的 iPhone 应用程序显示此 pdf 文档,并启用点击超链接。
注意:目前,我正在尝试使用 UIWebView 执行此操作,不幸的是,它似乎无法检测到链接点击。我在文档中读到了一系列名为 CGPDF 的类和方法。该文档讨论了所有关于解析 pdf 文档的内容,以及没有但没有具体说明如何检测链接点击以及什么不是(感谢苹果)。
情况:我有一个包含超链接的 pdf 文档。我希望我的 iPhone 应用程序显示此 pdf 文档,并启用点击超链接。
注意:目前,我正在尝试使用 UIWebView 执行此操作,不幸的是,它似乎无法检测到链接点击。我在文档中读到了一系列名为 CGPDF 的类和方法。该文档讨论了所有关于解析 pdf 文档的内容,以及没有但没有具体说明如何检测链接点击以及什么不是(感谢苹果)。
我无法评论 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 页上的第 8.4 节“注释”中跳转。
它最终是一个相当复杂的代码组合,出于商业原因我不能发布我自己的,但你会想要建立一个页面名称到页码的映射,遍历链接注释(这是指向命名的链接页面)并做一些事情来捕捉水龙头。就我个人而言,我只是添加了不可见的 UIButtons 作为我的自定义 PDF 视图的子视图。显然,您应用于 PDF 的任何转换也需要应用于注释坐标。
总共可能有 1,000 行。