2010-11-07 50 views
1

现状:我有一个包含超链接的pdf文档。我希望我的iPhone应用程序显示此pdf文档,并启用单击超链接。如何显示包含超链接的PDF文档? (在iOS上)

注意:目前,我试图用一个UIWebView,它不幸似乎无法检测链接水龙头这样做。有一个叫做CGPDF的类的家族,我在文档中已经读过。该文件谈到了所有关于解析pdf文档,什么但没有具体如何检测链接水龙头和什么不(谢谢苹果)。

回答

5

我无法评论UIWebView,但CGPDF的东西是CoreGraphics的一部分。所以它主要用于绘图 - 你将有一个PDF对象和一个上下文来绘制它(几乎可以肯定通过UIView的一个自定义子类来接收),并要求它以一定的比例和位置绘制。如果您是CoreGraphics和/或自定义UIView子类的新手,那么可能需要一天左右的时间才能进入,但最终会变成几百行。 CoreGraphics并不知道任何关于用户交互的内容,所以我认为苹果公司认为它隐含着没有抽象的概念,因此CoreGraphics也没有办法直接帮助你捕捉水龙头。

有一个示例代码,用于加载PDF并将其绘制到顶部的上下文this document。 CoreGraphics在OS X和iOS上是一样的,除了初始坐标系是相反的。在OS X上,与PDF相同,在iOS上则相反,所以如果未经调整,PDF将沿着y翻转。示例显示代码之后的部分标题为'为PDF页面创建转换',并且应该有所帮助 - 您只需应用反转y的转换。

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

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

相关的CoreGraphics结构是CGPDFDictionary。您可以获取最新的PDF规范here,但其中99%与您无关或涵盖CoreGraphics已实施的内容。您需要在文档中来回跳转以将所有位合并到一起,但是您可以在注释上的第8.4节跳至第488页。

它最终成为代码位合理复杂的组合而且由于商业原因,我无法发布自己的内容,但是您需要建立页面名称到页码的映射,遍历链接注释(这些链接是指向已命名页面的链接),并执行某些操作以捕获点击。就我个人而言,我只是添加了无形的UIButtons作为我的自定义PDF视图的子视图。很明显,您应用于PDF的任何变换都需要应用于注释坐标。

总共可能是1,000行。

相关问题