不幸的是,我认为您提到的两个答案指向不同的实施策略,它们都可能有效但不同。
第一个问题是您拥有并希望在应用中显示的 PDF 文件是什么样的。PDF 文件中没有预定义的 TOC 对象,只有不同的方法可以模拟它。最常见的两种方式是:
A) 书签,这是一种将小段文本添加到结构化树中的方法,其中每段文本都指向 PDF 文件中的特定位置。这些书签可以在设计应用程序中或以后添加(有特定的工具可以这样做),它们可以实现任何结构。
B) 您的 PDF 文件可能包含看起来像是书籍中经典目录的内容,基本上只是开始页面上的文本,还可以选择带有指向书中特定位置的超链接。
您引用的第二个链接显示了如何创建可以在其中显示 TOC 的用户界面。剩下的问题是确定要在 TOC 窗口中显示的项目。在您指向的第二个链接中,提出的解决方案是提供特定于一本特定书籍的硬编码项目。当然,当您只想显示任何书籍时,这种方法并不是很有用。
因此,您剩下的问题是如何确定要显示的项目以及它们链接到的位置。
如果您考虑我上面的可能性 A):带有书签的 PDF 文件,答案可能相对简单。您指向的答案 1 解释了如何查看 PDF 文件中的不同结构 - 书签就是这样的结构(在 PDF 规范的第 12.3 节中定义:http: //www.adobe.com/content/dam/Adobe/ zh/devnet/acrobat/pdfs/PDF32000_2008.pdf)
这意味着您可以使用此处显示的技术来遍历 PDF 文件中的不同对象,并找到每个书签。书签将为您提供要显示的文本以及单击时文本应跳转到的 PDF 文件中的实际位置。
如果您考虑我上面的可能性 B):没有书签但经典 TOC 的 PDF 文件,这将更难解决。这样的目录只是一个或多个页面上的简单文本,可选地带有超链接。当然,您可以尝试查找这些页面上的所有文本(如果您可以找出目录开始和结束的页面),但您还必须找出该项目链接到的位置。如果不涉及超链接,那将是一项艰巨的任务。
所以你的第一个问题应该是你想解决这个问题的通用性。您知道要显示哪些 PDF 文件吗?您可以自己为这些文件设计一个 TOC(如您的解决方案 2 中所示)吗?如果没有,您能确定所有 PDF 文件都包含书签吗?这些问题的答案将在很大程度上决定你的其余策略......