【问题标题】:iPhone sdk how to retrieve the Table of Contents from PDF file?iPhone sdk 如何从 PDF 文件中检索目录?
【发布时间】:2012-11-21 17:29:15
【问题描述】:

我正在使用 VFR 阅读器来显示我的 pdf。我需要在单击按钮时提取目录并将其显示在表格视图中,然后在点击每个页面时它应该指向相应的页面。我为此搜索并获得了这些链接

  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/

我知道,要获得 TOC,我们必须使用“CGPDFDocumentGetCatalog(pdf doc)”。但在我的读者中,“CGPDFDocumentGetCatalog(pdf doc)”根本没有被调用。现在如何从我的 pdf 文件中提取我的目录?请帮我解决这个问题。我为此苦苦挣扎了一周。提前致谢。

【问题讨论】:

    标签: iphone pdf vfr-reader


    【解决方案1】:

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

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

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

    B) 您的 PDF 文件可能包含看起来像是书籍中经典目录的内容,基本上只是开始页面上的文本,还可以选择包含指向书中特定位置的超链接。

    您引用的第二个链接显示了如何创建可以在其中显示 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 文件,这将更难解决。这样的目录只是一个或多个页面上的文本,可选地带有超链接。当然,您可以尝试查找这些页面上的所有文本(如果您可以找出目录开始和结束的页面),但您还必须找出该项目链接到的位置。如果不涉及超链接,那将是一项艰巨的任务。

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

    【讨论】:

    • 我所有的 pdf 都只有链接。我应该在我的表格视图中带来所有文档标题。我发现它可以使用“CGPDFDocumentGetCatalog”来检索。但在我的读者中,这种情况曾经被称为。你知道怎么做吗?谢谢。
    • @Saranya - 我认为你混淆了两件事。您所说的方法(CGPDFDocumentGetCatalog)获取目录对象(在PDF规范的7.2.2中定义)。这是 PDF 文件中的核心对象之一,可让您访问许多其他对象,但它本身并没有定义 TOC。您的 PDF 文件中可能包含的内容(但我们必须看一个示例才能确定)是一个“大纲”字典,它也可能用于允许导航。
    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多