在pdftk-java 介绍中,我解释了如何使用 pdftk-java
命令对 PDF 文件进行快速、通常是脚本化的修改。
然而,pdftk-java
最有用的用途之一是当我下载了一个大型 PDF 文件时,有时包含数百页的参考文本,并且发现 PDF 创建者没有包含目录。我指的不是书的前页中印刷的目录;我指的是您在 PDF 阅读器侧边看到的目录,PDF 格式官方称之为“书签”。

(Seth Kenlon,CC BY-SA 4.0)
如果没有书签,找到您需要参考的章节会很麻烦,需要大量滚动或令人沮丧地搜索您认为在大概区域看到的单词。
许多 PDF 文件的另一个小烦恼是缺少元数据,例如 PDF 属性中缺少正确的标题和作者。如果您曾经打开一个 PDF 文件,并在窗口标题栏中看到像“Microsoft Word - 04_Classics_Revisited.docx”这样的通用名称,您就会知道这个问题。
我不再需要处理这个问题了,因为我有 pdftk-java
,它可以让我创建自己的书签。
在 Linux 上安装 pdftk-java
顾名思义,pdftk-java 是用 Java 编写的,因此只要您安装了 Java,它就可以在所有主要的操作系统上运行。
Linux 和 macOS 用户可以从 AdoptOpenJDK.net 安装 Linux。
Windows 用户可以安装 红帽的 Windows 版 OpenJDK。
在 Linux 上安装 pdftk-java
- 从其 Gitlab 仓库下载 pdftk-all.jar 发布版本,并将其保存到
~/.local/bin/
或 路径中的其他位置。 - 在您喜欢的文本编辑器中打开
~/.bashrc
,并将此行添加到其中:alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'
- 加载您的新 Bash 设置:
source ~/.bashrc
数据转储
更正 PDF 元数据的第一步是提取 PDF 当前包含的数据文件。
数据文件中可能没有太多内容(这就是问题所在!),但它为您提供了一个良好的起点。
$ pdftk mybigfile.pdf \
data_dump \
output bookmarks.txt
这将生成一个名为 bookmarks.txt
的文件,它包含分配给输入文件(在本例中为 mybigfile.pdf
)的所有元数据,以及大量无用信息。
编辑元数据
要编辑 PDF 的元数据,请在您喜欢的文本编辑器中打开您的 bookmarks.txt
文件,例如 Atom 或 Gedit。
格式在很大程度上是直观的,并且其中包含的数据是可预测的被忽略的
InfoBegin
InfoKey: Creator
InfoValue: Word
InfoBegin
InfoKey: ModDate
InfoValue: D:20151221203353Z00'00'
InfoBegin
InfoKey: CreationDate
InfoValue: D:20151221203353Z00'00'
InfoBegin
InfoKey: Producer
InfoValue: Mac OS X 10.10.4 Quartz PDFContext
InfoBegin
InfoKey: Title
InfoValue: Microsoft Word - 04_UA_Classics_Revisited.docx
PdfID0: f049e63eaf3b4061ddad16b455ca780f
PdfID1: f049e63eaf3b4061ddad16b455ca780f
NumberOfPages: 42
PageMediaBegin
PageMediaNumber: 1
PageMediaRotation: 0
PageMediaRect: 0 0 612 792
PageMediaDimensions: 612 792
[...]
您可以编辑 InfoValue 字段以包含对您正在修复的 PDF 有意义的数据。例如,您可以将 Creator 键设置为实际作者姓名或发布 PDF 文件的出版社,而不是将其设置为 Word 值。与其给文档提供生成它的应用程序的默认导出字符串,不如给它提供书的实际标题。
还有一些清理工作可以做。NumberOfPages
行下面的所有内容也是不必要的,因此请删除这些行。
添加书签
PDF 书签遵循此格式
BookmarkBegin
BookmarkTitle: My first bookmark
BookmarkLevel: 1
BookmarkPageNumber: 2
BookmarkBegin
指示您正在创建一个新的书签。BookmarkTitle
包含在 PDF 查看器中可见的文本。BookmarkLevel
设置此书签的继承级别。如果您将 BookmarkLevel 设置为 2,它将显示在前一个书签的展开三角形内。如果您将 BookmarkLevel 设置为 3,它将显示在前一个书签的展开三角形内,前提是前一个书签设置为 2。此设置使您能够为章节标题以及该章节内的节标题添加书签,例如。BookmarkPageNumber
确定用户单击书签时跳转到的 PDF 页面。
为您认为重要的书的每个部分创建书签,然后保存文件。
更新书签信息
现在您已经设置了元数据和书签,您可以将它们应用到您的 PDF—实际上,您将它们应用到一个新的 PDF,该 PDF 包含与旧 PDF 相同的内容
$ pdftk mybigfile.pdf \
update_info bookmarks.txt \
output mynewfile.pdf
这将生成一个名为 mynewfile.pdf
的文件,其中包含您的所有元数据和书签。
专业出版
具有通用元数据且没有书签的 PDF 与具有个性化元数据值和有用书签的 PDF 之间的区别可能不会影响销售。
但是,关注元数据等小细节表明您重视质量保证,并且为用户提供书签是有帮助的,并且利用了可用的技术。
使用 pdftk-java
使此过程变得容易,您的用户会感谢您的。
评论已关闭。