使用 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