開源軟體

使用 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等非同步組件。連續兩年經歷天貓雙十一磨礪,承擔了億級別流量洪峰,具備高性能和高穩定性。