iPhone sdk如何从PDF文件中检索目录?

时间:2012-12-04 05:58:24

标签: iphone pdf vfr-reader

我正在使用VFR阅读器来显示我的pdf。我需要在按钮上单击并在桌面视图中显示目录,然后在点击每个页面时应该指向相应的页面。我用Google搜索并获取这些链接

  1. Create a table of contents from a pdf file
  2. http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-adding-a-table-of-contents-to-an-ipad-reader/
  3. 我开始知道,要获得TOC,我们必须使用“CGPDFDocumentGetCatalog(pdf doc)”。但在我的读者中,“CGPDFDocumentGetCatalog(pdf doc)”根本没有被调用。现在我如何从我的pdf文件中提取我的TOC?请帮助我解决这个问题。我在这个问题上挣扎了一个星期。提前谢谢。

1 个答案:

答案 0 :(得分:0)

不幸的是,我认为你提到的两个答案指向不同的实施策略,这些策略都可能有效但不同。

第一个问题是您拥有并希望在应用中显示的PDF文件是什么样的。在PDF文件中没有预定义的TOC对象,只有不同的方法来模拟它。最常见的两种方式是:

A)书签,是一种向结构化树添加小块文本的方法,其中每段文本都指向PDF文件中的特定位置。这些书签可以添加到设计应用程序中或以后(有专门的工具),它们可以实现任何结构。

B)你的PDF文件可能包含一本看起来像书中经典TOC的东西,它基本上只是开头页面上的文字,可选择带有指向书中特定位置的超链接。

您引用的第二个链接显示了如何创建用户界面,您可以在其中显示TOC。剩下的问题是确定要在TOC窗口中显示的项目。在您指向的第二个链接中,提供的解决方案是提供特定于一本特定书籍的硬编码项目。当然,当你想要只显示任何一本书时,这种方法并不是很有用。

所以你留下的问题是如何确定要显示的项目以及它们链接的位置。

如果您考虑上述可能性A):带有书签的PDF文件,答案可能相对简单。你指出的答案1解释了如何查看PDF文件中的不同结构 - 书签就是这样一种结构(在PDF规范的第12.3节中定义:http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf

这意味着您可以使用此处显示的技术遍历PDF文件中的不同对象,并查找每个书签。书签将为您提供要显示的文本以及PDF文件中单击时文本应跳转到的实际位置。

如果您考虑上述可能性B):没有书签而是经典TOC的PDF文件,这将更难解决。这样的目录只是一个或多个页面上的文本,可选地具有超链接。当然,您可以尝试在这些页面上找到所有文本(如果您可以找出TOC开始和结束的页面),那么您还必须找出该项目链接的位置。如果没有涉及超链接,那将是一项艰巨的任务。

所以你的第一个问题应该是你想要解决这个问题的通用性。你知道你想要显示哪些PDF文件吗?您可以自己设计这些文件的TOC(如您的解决方案2)吗?如果没有,您能确定所有PDF文件都包含书签吗?这些问题的答案将在很大程度上决定你的其他战略......