如何在iPhone上访问PDF文档中的超链接?

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

"页面之间的链接"准确指的是什么?您是在谈论从第一页到第四页的链接,还是说你的阅读器中第一页后跟着第二页?顺便说一下,如果您是在谈论页面之间的可点击链接,请记住PDF文档中的超链接只是页面上可点击热点矩形,与它们所似乎超链接的文本没有直接关系。在这方面,PDF文档不像HTML文档。" - Rowan
我指的是支持从一个页面链接到文档中的其他任意页面。我会用它来制作目录,以及在随机位置引用其他页面。所以,是的,我真正想要的是一种类似HTML的方式来浏览PDF文档。我可以处理“下一页/上一页/首页”导航的简单情况,但理想情况下,我也希望支持任意导航。谢谢。 - George Armhold
这是一些示例代码,来自我的问题:https://dev59.com/oG855IYBdhLWcg3w6Y1q - ySgPjx
4个回答

2

请看我在这里的答案。基本上,您需要熟悉PDF链接注释。


1

0
你需要分两步来完成。
第一步:解析你的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做出相应的响应。


0

如果您正在使用Quartz打开和查看PDF文件,那么是的,您将可以访问内部链接。Quartz还允许您向PDF添加新链接。我没有任何iPhone/Mac开发的第一手经验,但如果他们允许您添加超链接却不使用它们,那将非常奇怪。


2
这些链接都指向Mac OS X参考库,而不是iPhone OS。PDFKit在手机上不存在。 - Ben Gottlieb
是的,以上两个链接只是打开了OSX参考库列表。它们并没有提供任何正确的信息。这怎么能被接受呢?-1 - sagarkothari
抱歉,各位朋友,我不再从事iPhone开发了,因此这个问题实际上已经被放弃了。我无法验证这是否是一个可接受的答案,所以我只是将其“取消采纳”。 - George Armhold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接