使用 pdftk-java 命令编辑 PDF 的 4 种方法
在技术白皮书、手稿和 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
以下是结果示例:

图片来源:
(塞思·肯隆,CC BY-SA 4.0)
PDF修改变得简单
当您通过 shell 脚本处理大量 PDF 文件或 PDF 文件时,像pdftk-java这样的工具非常宝贵,因为它使您不必手动执行所有操作。当我从Docbook的输出构建 PDF 时,它是一个 Makefile,它为任意数量的任务调用pdftk-java,所以我没有机会忘记步骤或错误输入命令,也没有必要花费我的时间在上面。您可能在自己的工作流程中使用pdftk-java有很多其他原因,pdftk-java可以做很多其他事情,包括像shuffle、rotate、dump_data、update_info和attach_files这样的操作。如果你发现自己经常处理 PDF 文件,试试pdftk-java。
更多推荐




所有评论(0)