使用 pdftk 为 PDF 创建书签

为您的用户提供书签是有帮助的,并且利用了可用的技术。
26 位读者喜欢这篇文章。
Business woman on laptop sitting in front of window

图片来源:Mapbox Uncharted ERG, CC-BY 3.0 US

pdftk-java 介绍中,我解释了如何使用 pdftk-java 命令对 PDF 文件进行快速、通常是脚本化的修改。

然而,pdftk-java 最有用的用途之一是当我下载了一个大型 PDF 文件时,有时包含数百页的参考文本,并且发现 PDF 创建者没有包含目录。我指的不是书的前页中印刷的目录;我指的是您在 PDF 阅读器侧边看到的目录,PDF 格式官方称之为“书签”。

Screenshot of a sidebar table of contents next to a 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

  1. 从其 Gitlab 仓库下载 pdftk-all.jar 发布版本,并将其保存到 ~/.local/bin/路径中的其他位置
  2. 在您喜欢的文本编辑器中打开 ~/.bashrc,并将此行添加到其中:alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'
  3. 加载您的新 Bash 设置:source ~/.bashrc

数据转储

更正 PDF 元数据的第一步是提取 PDF 当前包含的数据文件。

数据文件中可能没有太多内容(这就是问题所在!),但它为您提供了一个良好的起点。

$ pdftk mybigfile.pdf \
data_dump \
output bookmarks.txt

这将生成一个名为 bookmarks.txt 的文件,它包含分配给输入文件(在本例中为 mybigfile.pdf)的所有元数据,以及大量无用信息。

编辑元数据

要编辑 PDF 的元数据,请在您喜欢的文本编辑器中打开您的 bookmarks.txt 文件,例如 AtomGedit

格式在很大程度上是直观的,并且其中包含的数据是可预测的被忽略的

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 使此过程变得容易,您的用户会感谢您的。

接下来阅读什么
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时进行。

评论已关闭。

Creative Commons 许可本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.