【问题标题】:How to extract bookmarks from a PDF?如何从 PDF 中提取书签?
【发布时间】:2015-04-15 12:27:49
【问题描述】:

当我在 PDF 查看器中打开 PDF 时,我会在实际文档的左侧看到一系列书签。那里显示的信息似乎并不构成文档实际内容的一部分:它没有打印出来,它没有出现在特定页面上。

如何使用 Java 提取这些书签?

【问题讨论】:

  • 当您谈论 PdfBox 时,为什么这个问题会被标记为 iText 问题。请在视图左侧的文档查看器中完成句子我已查看pdf。您指的是书签面板吗?您指的是带有标记 PDF 标记的面板吗?元数据通常不会显示在 PDF 查看器的左侧。选择文件 > 文档属性时会显示元数据。
  • 嗨@BrunoLowagie。非常遗憾。是的,我确实在书签面板中看到了一些信息。我尝试使用 PdfBox 和 Itext,但我无法获得这些信息。此外,书签中的信息也不存在于 Pdf 文本中的任何地方
  • PDFBox 的查看器不显示元数据。您可以使用 PDFDebugger 命令行工具查看它(如果这是您的问题)。 pdfbox.apache.org/1.8/commandline.html#pdfDebugger你的问题真的不清楚,关于你是在问“如何”还是关于错误/不需要的行为。你真的应该解决这个问题来解释你想做什么/你做了什么/发生了什么。
  • 书签中的信息不必出现在文本中。这些是分开的事情。 PDFBox 确实有读取书签的方法:svn.apache.org/repos/asf/pdfbox/trunk/examples/src/main/java/…
  • 非常感谢@Tilman Hausherr 我能够完成任务。

标签: java pdf pdf-parsing


【解决方案1】:

OP 问题要求使用 Java 解决方案。

但是,对于必须处理 PDF 的人来说,这可能是一个更普遍感兴趣的话题。所以我的回答提供了一个命令行解决方案:mutool

mutool 是与 MuPDF viewer 软件捆绑在一起的命令行实用程序,由为我们提供 Ghostscript 的同一家公司编写。

其最新版本包括 show 子命令,可用于打印outlines(在 PDF 技术术语中,OP 和Adobe UI 称为“书签”),以及 PDF 中其他感兴趣的特定项目:

$ mutool show PDF32000_2008.pdf outlines

  Document management — Portable document format — Part 1: PDF 1.7  1
  Contents Page 3
  Foreword  6
  Introduction  7
  1 Scope   9
  2 Conformance 9
    2.1 General 9
    2.2 Conforming readers  9
    2.3 Conforming writers  9
    2.4 Conforming products 10
  3 Normative references    10
  4 Terms and definitions   14
  5 Notation    18
  6 Version Designations    18
  7 Syntax  19
    7.1 General 19
    7.2 Lexical Conventions 19
        7.2.1 General   19
        7.2.2 Character Set 20
        7.2.3 Comments  21
  [....]

(输出已缩短。)原始 PDF 文档(官方 PDF-1.7 规范)包含此页面作为 ToC:

您可以清楚地看到,/Outlines 的内容与包含的目录页面有何不同(但相似)。

这是大纲(“书签”)在 Adob​​e Reader XI 中的显示方式:

【讨论】:

    【解决方案2】:

    请下载免费电子书The Best iText Questions on StackOverflow。在那本书中,你会找到许多问题的答案,包括问题Reading PDF Bookmarks in VB.NET using iTextSharp

    提取书签最酷的方法是创建一个 XML 文件,该文件以良好的分层方式显示书签:

    PdfReader reader = new PdfReader(src);
    List<HashMap<String, Object>> list = SimpleBookmark.getBookmark(reader);
    SimpleBookmark.exportToXML(list,
        new FileOutputStream(dest), "ISO8859-1", true); 
    reader.close();
    

    【讨论】:

    • 0 反对票接受我能够使用 PDFBOx 和 iText 获取书签。谁能告诉我如何在 PdfLib 中得到这个?
    • 你为什么要否决我的回答?您明确要求使用 iText(或 PdfBox 或 PdfLib)提取书签。我最初对你的问题投了反对票,因为它不清楚。然后你澄清了你的问题,之后我编辑了你的问题。随后,我撤回了我的反对票,因为在我编辑后问题的状态更好。
    【解决方案3】:

    要使用 Java 从 PDF 文件中检索书签内容,您可以使用 PDFlib+PDI 9 的 pCOS 接口。pCOS Cookbook 中包含示例代码: http://www.pdflib.com/en/pcos-cookbook/interactive-elements/bookmarks/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 2020-09-25
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      相关资源
      最近更新 更多