在介绍 pdftk-java](https://opensource.com/article/21/12/edit-pdf-linux-pdftk)的[中,我解释了如何使用pdftk-java命令对 PDF 文件进行快速的、通常是脚本化的修改。

然而,pdftk-java最有用的一件事是,当我下载了一个大的 PDF 文件,有时包含数百页的参考文本,并发现 PDF 创建者没有包含目录时。我的意思不是书头的印刷目录;我的意思是您在 PDF 阅读器旁边的目录,PDF 格式正式将其称为“书签”。

PDF 旁边的侧边栏目录的屏幕截图

图片来源:

(塞思·肯隆,CC BY-SA 4.0)

如果没有书签,查找您需要参考的章节是很麻烦的,并且涉及到大量滚动或令人沮丧的搜索您认为您记得在一般区域中看到的单词。

许多 PDF 文件的另一个小烦恼是缺少元数据,例如 PDF 属性中的正确标题和作者。如果您曾经打开 PDF 并在窗口标题栏中看到诸如“Microsoft Word - 04_Classics_Revisited.docx”之类的通用内容,那么您就会知道这个问题。

我不必再处理这个问题,因为我有pdftk-java,它可以让我创建自己的书签。

在Linux上安装pdftk-java

更多 Linux 资源

  • Linux 命令备忘单

  • 高级 Linux 命令备忘单

  • 免费在线课程:RHEL 技术概述

  • Linux 网络备忘单

  • SELinux 备忘单

  • Linux 常用命令备忘单

  • 什么是 Linux 容器?

  • 我们最新的 Linux 文章

顾名思义,pdftk-java 是用 Java 编写的,因此只要您安装了 Java,它就可以在所有主要操作系统上运行。

Linux 和 macOS 用户可以从AdoptOpenJDK.net安装 Linux。

Windows 用户可以安装Red Hat 的 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 \

数据_转储\

输出书签.txt

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

编辑元数据

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

格式大多是直观的,其中包含的数据可以预见地被忽略:

信息开始

InfoKey:创造者

信息价值:字

信息开始

InfoKey:直截了当

信息值:D:20151221203353Z00'00'

信息开始

InfoKey:创建日期

信息值:D:20151221203353Z00'00'

信息开始

InfoKey:制作人

InfoValue:Mac OS X 10.10.4 Quartz PDFContext

信息开始

InfoKey:标题

InfoValue:Microsoft Word - 04_UA_Classics_Revisited.docx

大卫 0: F049 Taya'a Aab 4061 Ddad 16 B 455 Sahd 0 F

大卫 1: F049 Taya'aab Aab 4061 Dadad 16 B 455 Sa'ad 0 F

页数:42

PageMediaBegin

PageMediaNumber: 1

PageMediaRotation: 0

PageMediaRect:0 0 612 792

PageMediaDimensions: 612 792

[...]

您可以编辑 InfoValue 字段以包含对您正在修复的 PDF 有意义的数据。例如,您可以将其设置为实际作者的姓名或发布 PDF 文件的出版社,而不是将 Creator 键设置为值 Word。与其给文档提供生成它的应用程序的默认导出字符串,不如给它书的实际标题。

您还可以进行一些清理工作。NumberOfPages行以下的所有内容也是不必要的,因此删除这些行。

添加书签

PDF 书签遵循以下格式:

书签开始

BookmarkTitle:我的第一个书签

书签级别:1

书签页数:2

  • BookmarkBegin表示您正在创建一个新书签。

  • BookmarkTitle包含在 PDF 查看器中可见的文本。

  • BookmarkLevel设置此书签的继承级别。如果将 BookmarkLevel 设置为 2,它将出现在前一个书签的显示三角形内。如果您将 BookmarkLevel 设置为 3,只要前一个书签设置为 2,它就会出现在前一个书签的显示三角形内。此设置使您能够添加书签,例如,章节标题和章节标题在那一章内。

  • BookmarkPageNumber确定用户单击书签时转到哪个 PDF 页面。

为书中您认为重要的每个部分创建书签,然后保存文件。

更新书签信息

现在您已经设置了元数据和书签,您可以将它们应用到您的 PDF — 实际上,您可以将它们应用到包含与旧 PDF 相同内容的新 PDF:

$ pdftk mybigfile.pdf \

更新_info 书签.txt \

输出 mynewfile.pdf

这会生成一个名为mynewfile.pdf的文件,其中包含所有元数据和书签。

专业出版

具有通用元数据但没有书签的 PDF 与具有个性化元数据值和有用书签的 PDF 之间的区别可能不会促成或破坏销售。

但是,关注元数据等小细节表明您重视质量保证,向用户提供书签是有帮助的,并且可以利用可用的技术。

使用pdftk-java让这个过程变得简单,你的用户会感谢你的。

Logo

更多推荐