在技术白皮书、手稿和 RPG 书籍之间,我每天都要处理大量 PDF。 PDF 格式很受欢迎,因为它包含经过处理的 PostScript 代码。 PostScript 是现代印刷商的母语,因此出版商经常以 PDF 的形式发布图书的数字版本,因为他们已经投入了时间和精力来制作用于印刷的文件。但是 PDF 并不是一种可编辑的格式,虽然可以进行一些逆向处理,但它应该是数字数据在发送到打印机之前的最后一站。即便如此,有时您需要对 PDF 进行调整,我最喜欢的工具之一是pdftk-java命令。

更多 Linux 资源

  • Linux 命令备忘单

  • 高级 Linux 命令备忘单

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

  • Linux 网络备忘单

  • SELinux 备忘单

  • Linux 常用命令备忘单

  • 什么是 Linux 容器?

  • 我们最新的 Linux 文章

在Linux上安装pdftk-java

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

Linux 和 macOS 用户可以从AdoptOpenJDK.net安装 Java。 Windows 用户可以安装Red Hat 的 Windows 版本的 OpenJDK。

安装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

命令语法

有效的pdftk-java命令的结构遵循一个模式,但模式中的内容有很大的灵活性。语法有点不寻常,因为它不使用传统风格的终端选项,但是通过练习,它并不太难记住。

  • pdftk:调用命令的别名

  • 输入文件:要修改的PDF

  • 动作:你想对输入文件做什么

  • 输出:您要保存修改后的 PDF 文件的位置

这是最复杂的动作部分,所以我将从简单的任务开始。

将两个PDF文件合二为一

与书籍的其余部分相比,在单独的应用程序(如 Inkscape 或 GIMP)中创建书籍的封面并不少见,这通常在 Scribus 等布局应用程序或 LibreOffice 等办公套件中完成。您可以在布局应用程序中将两者结合起来。像 Scribus 这样优秀的桌面出版商可以轻松引用图像,以便当封面更改时,它会自动更新布局。但是,也可以使用pdftk-java将封面添加到 PDF:

$ pdftk 封面.pdf 正文.pdf \

猫 \

输出书.pdf

在此示例中,操作是cat,如 concatenate 和 Linuxcat 命令一样,它将一个或多个 PDF 文件连接到单个数据流中,并将数据流定向到output参数指定的任何文件中。

从 PDF 中删除页面

您无法从 PDF 中完全删除页面,但您可以创建一个仅包含您想要保留的页面的新 PDF。

$ pdftk 书.pdf \

猫 1 3-结束\

输出更短的书.pdf

在此示例中,我的书文件的第 1 页以及从第 3 页到末尾的所有页面都保存到一个新文件中。因此,我删除的页面是第 2 页。

将PDF拆分成单独的文件

将 PDF 文件拆分为许多不同的文件也使用cat操作,它在原理上类似于删除页面。您可以通过将所需页面发送到新文件来拆分 PDF:

$ pdftk 书.pdf \

猫 1-15\

输出 part-1.pdf

$ pdftk 书.pdf \

猫 16-42\

输出part-2.pdf

如果您需要将 PDF 拆分为单页文件,有一个特殊的操作,称为burst:

$ pdftk book.pdf 爆发

$ ls

book.pdf pg_0001.pdf pg_0002.pdf

pg_0003.pdf pg_0004.pdf pg_0005.pdf

[...]

填写表格

很少有人会争辩说 PDF 格式多年来并没有变得臃肿,而且您有时在 PDF 文件中发现的一个功能是可填写的表格。您可以在美国税务文件、RPG 字符表、在线学校工作簿和其他旨在交互的 PDF 文件中看到这一点。虽然大多数现代 PDF 查看器,例如 GNOME 的 Evince 和 KDE 的 Okular,都可以填写 PDF 表单,但您也可以在pdftk-java的帮助下填写 PDF 表单。

首先,您必须使用generate_fdf操作提取表单数据。这会提取表单元素的 ID 并将它们放入文本文件中。

$ pdftk character-sheet.pdf \

生成_fdf \

输出 chsheet-form.txt

您的目标文件(在本例中为chsheet-form.txt)包含 PDF 中包含的表单数据,但仅包含文本部分。您可以在任何标准文本编辑器中对其进行编辑,例如Atom或Gedit。

在对制作 PDF 的组织的工作流程进行时而令人钦佩但时而尴尬的一瞥时,您会发现一些表单被清楚地标记,而另一些则具有默认名称,例如“Checkbox_001”和“Textfield-021”,因此您可能有将您的文本文件与 PDF 交叉引用,但如果您正在编写脚本来自动填写表格,这可能是值得的。每个标签都标记为/T项目,在下一行中,为文本输入提供了空格(标记为/V)。这是一个片段,其中包含其标签的上下文和一些填充的数据:

/T(字符名称 2)

/V(亚巴顿)

<<

/T (SlotsTotal 24)

/V ()

<<

/T(头发)

/V(棕色)

<<

/T (上午)

/V (15)

<<

/T(背景)

/V ()

<<

/T (DEXmod )

/V ()

输入表单数据后,您可以使用fill_form操作将文本输入与 PDF 结构结合起来:

$ pdftk character-sheet.pdf \

填写_form chsheet-form.txt \

输出完成.pdf

以下是结果示例:

pdftk-java 填写的表格

图片来源:

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

PDF修改变得简单

当您通过 shell 脚本处理大量 PDF 文件或 PDF 文件时,像pdftk-java这样的工具非常宝贵,因为它使您不必手动执行所有操作。当我从Docbook的输出构建 PDF 时,它是一个 Makefile,它为任意数量的任务调用pdftk-java,所以我没有机会忘记步骤或错误输入命令,也没有必要花费我的时间在上面。您可能在自己的工作流程中使用pdftk-java有很多其他原因,pdftk-java可以做很多其他事情,包括像shufflerotatedump_dataupdate_infoattach_files这样的操作。如果你发现自己经常处理 PDF 文件,试试pdftk-java

Logo

更多推荐