如何访问 PDF 文档 (iPhone) 中的超链接?

Posted

技术标签:

【中文标题】如何访问 PDF 文档 (iPhone) 中的超链接?【英文标题】:How to access hyperlinks in PDF documents (iPhone)? 【发布时间】:2010-11-17 21:09:07 【问题描述】:

是否可以使用CGPDFDocument 或其他方式访问 PDF 文档中的“内部”链接?我正在构建一个简单的阅读器应用程序,并希望以 PDF 形式提供我的内容,但如果我不支持文档中页面之间的链接,这可能无法正常工作。

This question类似,但没有解决如何支持超链接的问题。

【问题讨论】:

页面之间的链接到底是什么意思?您是在谈论第 1 页上的链接,该链接转到第 4 页,还是您在谈论阅读器中的第 1 页紧随其后的第 2 页?顺便说一句,如果您谈论的是页面之间的可点击链接,请记住,PDF 文档中的超链接只是页面上可点击的热点矩形,与它们显示为超链接的文本没有直接关系。从这个意义上说,PDF 文档与 html 文档不同。 我的意思是支持从一个页面到文档中其他任意页面的链接。我会将它用于目录,以及在随机位置引用其他页面。所以是的,我真正在寻找的是一种类似 HTML 的方式来导航 PDF 文档。没有这个我可以处理“下一个/上一个/主页”导航的简单情况,但理想情况下我也想支持任意导航。谢谢。 这是一些示例代码,来自我自己的问题:***.com/questions/4080373/… 【参考方案1】:

查看我的回答here。基本上,您需要熟悉 PDF 链接注释。

【讨论】:

【参考方案2】:

查看此示例代码...pdf 超链接适用于此

https://github.com/vfr/Reader

【讨论】:

【参考方案3】:

如果您使用的是Quartz to open and view a PDF,那么是的,您似乎可以访问内部链接。 Quartz 还可以让您add new links 转为 PDF。我没有任何 iPhone/Mac 开发的第一手经验,但是他们让你添加超链接却不使用它们会很奇怪。

【讨论】:

这些链接都指向 Mac OS X 参考库,而不是 iPhone OS。手机上不存在 PDFKit。 是的,以上两个链接都只是打开 osx 参考库列表。它没有提供任何适当的信息。它是如何被接受的? -1 对不起伙计们,我不再做 iPhone 开发了,所以这实际上是一个被放弃的问题。我无法验证这是否是一个可接受的答案,所以我只是“不接受”它。【参考方案4】:

您需要分两步进行。

首先:解析您的 pdf 以找到标记的内容运算符

这是一个解析代码的例子:

-(void)parseContent() 
    CGPDFOperatorTableRef myTable;
    myTable = CGPDFOperatorTableCreate();
    CGPDFOperatorTableSetCallback(myTable, "BMC", &myOperator_BMC);
    CGPDFContentStreamRef myContentStream = CGPDFContentStreamCreateWithPage(page);
    CGPDFScannerRef myScanner = CGPDFScannerCreate(myContentStream, myTable, autoZoomAreas);
    CGPDFScannerScan(myScanner);
    CGPDFScannerRelease(myScanner);
    CGPDFContentStreamRelease(myContentStream); 


void myOperator_BMC(CGPDFScannerRef s, void *info)

    const char *name;
    CGPDFScannerPopName(s, &name);

(您需要完成并调整此代码以符合您的要求)

第二:响应 toucheEnded 消息以处理对这些区域的点击并使 UI 做出相应响应。

【讨论】:

以上是关于如何访问 PDF 文档 (iPhone) 中的超链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PDF编辑器的超链接工具?

如何使用PDF编辑器的超链接工具?

为啥文档中的超链接会导致找不到页面

如何使用 python 更改 pdf 中的超链接?

单击目标位于同一 PDF 文档上的超链接后 Google Chrome 的后退按钮

如何在 iPhone SDK 中检测 PDF 文档的方向