开源软件

使用 pdftk-java 来编辑 PDF 吧!

在阅读技术资料或者其他书籍的时候,会需要处理大量 PDF 的文件。虽然 PDF 不是一个可以被编辑的格式,但很多时候我们还是需要在最后打印或发送之前对其进行一些格式或内容上的调整。这时就可以用到 pdftk-java 工具了。

Linux 上安装 pdftk-java

顾名思义,pdftk-java 是用 Java 编写的,所以只要安装了 Java,就可以运行 pdftk-java。

安装 pdftk-java:

  • 下载 PDFTK-all.jar

  • 打开 ~/.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

对这篇文章感觉如何?

太棒了
0
不错
1
爱死了
0
不太好
0
感觉很糟
0

You may also like

Leave a reply

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

More in:开源软件

开源软件

嵌入式 Linux 的瑞士军刀:BusyBox

上期文章中,笔者向各位介绍了 musl,一个 Glibc 的替代方案,它的主要优势体现在更加整洁的代码、更小的二进制体积和更优秀的静态链接支持。而本期文章的主角:BusyBox 则是 GNU Core […]
开源项目

Pwnagotchi 开箱教程

Pwnagotchi 是一个由 Bettercap 驱动的 A2C 的 “AI”,它能够从周围的 WiFi 环境中学习,以最大限度地利用它捕获的可破解 WPA 密钥材料,该材料将作为可被 hashcat 破解的 PCAP 文件收集在磁盘上。 简单来说,Pwnagotchi ...
开源软件

光速上手C++20协程

今天来学习下怎么使用基于C++20设计开发的协程框架async_simple(https://github.com/alibaba/async_simple)。async_simple是阿里巴巴开源的轻量级C++异步框架。提供了基于C++20无栈协程(Lazy),有栈协程(Uthread)以及Future/Promise等异步组件。连续两年经历天猫双十一磨砺,承担了亿级别流量洪峰,具备高性能和高稳定性。