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

标签 iphone xcode pdf ios cgpdfdocument

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

注:目前,我正在尝试使用 UIWebView 执行此操作,不幸的是,它似乎无法检测到链接点击。我在文档中读到了一系列名为 CGPDF 的类和方法。该文档讨论了所有关于解析 pdf 文档的内容,以及关于如何检测链接点击和不具体的内容(感谢苹果)。

最佳答案

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

CoreGraphics 对用户交互一无所知,所以我认为 Apple 认为它暗示了那里没有点击的概念,因此 CoreGraphics 无法直接帮助您捕捉点击。

this document 顶部有用于加载 PDF 并将其绘制到上下文的示例代码. CoreGraphics 在 OS X 和 iOS 上是相同的,只是初始坐标系是相反的。在 OS X 上它与 PDF 的方式相同,在 iOS 上则相反,因此如果未经调整,PDF 将沿 y 呈现反转。示例显示代码之后的部分标题为“为 PDF 页面创建转换”,应该对此有所帮助——您只需要应用一个反转 y 的转换。

有一个tutorial here关于如何创建包含一些 CoreGraphics 绘图步骤的自定义 UIView 子类。

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

相关的 CoreGraphics 构造是 CGPDFDictionary。您可以获取最新的 PDF 规范 here ,但其中 99% 与您无关或涵盖了 CoreGraphics 已经实现的内容。您需要在文档中来回跳转以将所有部分拼凑在一起,但您可以在第 488 页上的第 8.4 节“注释”中跳转。

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

总共可能有 1,000 行。

关于iphone - 如何显示包含超链接的 PDF 文档? (在 iOS 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117584/

相关文章:

ios - 新设备的导航栏高度是多少?

xcode - 更改默认 SKScene

java - 在不打开 PDF 的情况下在客户端浏览器打印 PDF

php - doc/docx 到 PDF 转换器

pdf - 如何在 Ionic 中保存 Blob

ios - UIScrollView 比 minimumZoomScale 小

iphone - 支持 iOS 当前使用的多种艺术尺寸的最佳方式是什么?

iphone - 文本在 iPhone 上显示不同的大小

ios - Xcode 14 的 iOS 15 或更早版本中未显示 WidgetKit

objective-c - 我该如何解决 "Xcode could not locate source file"问题