当我在PDF查看器中打开PDF时,我会在实际文档的左侧看到一系列书签。这里显示的信息似乎并不构成文档实际内容的一部分:它没有打印,也没有出现在特定页面上。
如何使用Java提取这些书签?
答案 0 :(得分:4)
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
内容与所包含的目录页面的不同(但相似)。
以下是Adobe Reader XI中显示轮廓(“书签”)的方式:
答案 1 :(得分:3)
请下载免费的电子书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();
答案 2 :(得分:2)
要使用Java从PDF文件中检索书签内容,您可以使用PDFlib + PDI 9的pCOS界面.pCOS Cookbook中包含示例代码: http://www.pdflib.com/en/pcos-cookbook/interactive-elements/bookmarks/