1

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

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

4

3 回答 3

6

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

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

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

它的最新版本包括show可用于打印的子命令outlines(在 PDF 技术术语中,OP 和 Adob​​e 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 中的显示方式:

在此处输入图像描述

于 2015-04-15T15:03:58.517 回答
3

请在 StackOverflow 上下载免费的电子书The Best iText Questions。在那本书中,您将找到许多问题的答案,包括使用 iTextSharp 在 VB.NET 中阅读 PDF 书签的问题

提取书签最酷的方法是创建一个 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();
于 2015-04-15T12:56:42.470 回答
2

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

于 2015-04-17T10:31:02.197 回答