使用 pdftk-java 来编辑 PDF 吧!
在阅读技术资料或者其他书籍的时候,会需要处理大量 PDF 的文件。虽然 PDF 不是一个可以被编辑的格式,但很多时候我们还是需要在最后打印或发送之前对其进行一些格式或内容上的调整。这时就可以用到 pdftk-java 工具了。
在 Linux 上安装 pdftk-java
顾名思义,pdftk-java 是用 Java 编写的,所以只要安装了 Java,就可以运行 pdftk-java。
安装 pdftk-java:
-
打开 ~/.bashrc 并在其中添加
alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'
-
加载新的 Bash 配置
$ source ~/.bashrc
pdftk-java 命令的语法
pdftk-java 命令由四个部分构成,只需要稍加练习就能灵活使用。
- pdftk:调用程序
- input file:要修改的 PDF 位置
- action:对输入文件的操作指令
- output: 输出 PDF 位置
合并两个 PDF
比如你要给自己的文件加个封面,就会用到合并操作。在下面的演示中,是将 cover.pdf 和 body.pdf 按顺序合并,输出成 book.pdf 这一个文件。
$ pdftk cover.pdf body.pdf \
cat \
output book.pdf
在这里,是用 cat 作为操作指令,就像 Linux 中的 cat 命令一样,可以将一个或多个 PDF 文件连接到一个数据流中,并输出到 output 参数中指定的文件里。
删除页面
直接从 PDF 中删除页面是不可以的,但是可以创建一个新的不包括要删除页面的新 PDF。
$ pdftk book.pdf \
cat 1 3 -end \
output shorter-book.pdf
在这个示例代码中,将 book.pdf 中第一页和从第三页直到最后的页面都保存在新文件中,来实现删掉第二页的目的。
将 PDF 拆成单独的文件
要将一个完整的 PDF 文件拆开,也可以使用同样的 cat 操作,原理和删除页面相似:只需要把想要的页面单独输出就可以了。
$ pdftk book.pdf \
cat 1-15 \
output part-1.pdf
$ pdftk book.pdf \
cat 16-42 \
output part-2.pdf
如果你需要把 PDF 拆开成单页,可以使用一个新的指令:burst。
$ pdftk book.pdf burst
$ ls
book.pdf pg_0001.pdf pg_0002.pdf
pg_0003.pdf pg_0004.pdf pg_0005.pdf
[...]
填写表格
虽然大多数情况下 PDF 文件都不支持更改内容,但是也有一个例外:填写 PDF 表单。虽然大部分现代 PDF 查看器都可以做到,但用 pdftk-java 也可以实现这个操作。
首先,需要使用 generate_fdf 操作来从表单中提取数据。这个操作会把表单元素的 ID 提取出来并放入一个文本文件中。
$ pdftk character-sheet.pdf \
generate_fdf \
output chsheet-form.txt
在目标文件中将会包含 PDF 中包含的文本格式版本的表单数据,可以在任何标准文本编辑器中对其进行编辑。
输入好数据之后,可以用 fill_form 操作将其填充回去:
$ pdftk character-sheet.pdf \
fill_form chsheet-form.txt \
output completed.pdf
以下是结果示例:
用 pdftk-java 来让 PDF 操作更方便
用 shell 脚本处理大量 PDF 文件的时候,使用 pdftk-java 可以让你不用手动完成所有工作。只要写一个调用 pdftk-java 进行任务的 Makefile,就可以批量处理大量文件。当然,不止可以切割页面,还有更多的操作可以用,比如 shuffle、rotate、dump_data、update_info 和 attach_files。更多的指令可以在其 gitlab 中查到。
参考资料:
4 ways you can edit a PDF with the pdftk-java command
译者:Dark