使用 pdftk 為 PDF 文檔創(chuàng)建書簽
充分利用現(xiàn)有的技術(shù),提供書簽以幫助用戶。
在 介紹 pdftk-java 中, 我展示了如何在腳本中使用 pdftk-java
來快速修改 PDF 文件。
但是,pdftk-java
最有用的場景是處理那種動(dòng)輒幾百頁的沒有目錄的大 PDF 文件。這里所謂的目錄不是指文檔前面供打印的目錄,而是指顯示在 PDF 閱讀器側(cè)邊欄里的目錄,它在 PDF 格式中的正式叫法是“書簽bookmarks”。
Screenshot of a sidebar table of contents next to a PDF
Screenshot of a sidebar table of contents next to a PDF
如果沒有書簽,就只能通過上下滾動(dòng)或全局搜索文本來定位想要的章節(jié),這非常麻煩。
PDF 文件的另一個(gè)惱人的小問題是缺乏元數(shù)據(jù),比如標(biāo)題和作者。如果你打開過一個(gè)標(biāo)題欄上顯示類似 “Microsoft Word - 04_Classics_Revisited.docx” 的 PDF 文件,你就能體會(huì)那種感覺了。
pdftk-java
讓我能夠創(chuàng)建自己的書簽,我再也不面對這些問題了。
在 Linux 上安裝 pdftk-java
正如 pdftk-java
的名稱所示的,它是用 Java 編寫的。它能夠在所有主流操作系統(tǒng)上運(yùn)行,只要你安裝了 Java。
Linux 和 macOS 用戶可以從 AdoptOpenJDK.net 安裝 Java(LCTT 譯注:原文為 Linux,應(yīng)為筆誤)。
Windows 用戶可以安裝 Red Hat's Windows build of OpenJDK。
在 Linux 上安裝 pdftk-java:
- 從 Gitlab 倉庫下載 pdftk-all.jar release,保存至
~/.local/bin/
或 其它路徑 下. - 用文本編輯器打開
~/.bashrc
,添加alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'
- 運(yùn)行
source ~/.bashrc
使新的 Bash 設(shè)置生效。
數(shù)據(jù)轉(zhuǎn)儲(chǔ)
修改元數(shù)據(jù)的第一步是抽取 PDF 當(dāng)前的數(shù)據(jù)文件。
現(xiàn)在的數(shù)據(jù)文件可能并沒包含多少內(nèi)容,但這也是一個(gè)不錯(cuò)的開端。
$ pdftk mybigfile.pdf \
data_dump \
output bookmarks.txt
生成的 bookmarks.txt
文件中包含了輸入 PDF 文件 mybigfile.pdf
的所有元數(shù)據(jù)和一大堆無用數(shù)據(jù)。
編輯元數(shù)據(jù)
用文本編輯器(比如 Atom 或 Gedit)打開 bookmarks.txt
以編輯 PDF 元數(shù)據(jù)。
元數(shù)據(jù)的格式和數(shù)據(jù)項(xiàng)直觀易懂:
InfoBegin
InfoKey: Creator
InfoValue: Word
InfoBegin
InfoKey: ModDate
InfoValue: D:20151221203353Z00'00'
InfoBegin
InfoKey: CreationDate
InfoValue: D:20151221203353Z00'00'
InfoBegin
InfoKey: Producer
InfoValue: Mac OS X 10.10.4 Quartz PDFContext
InfoBegin
InfoKey: Title
InfoValue: Microsoft Word - 04_UA_Classics_Revisited.docx
PdfID0: f049e63eaf3b4061ddad16b455ca780f
PdfID1: f049e63eaf3b4061ddad16b455ca780f
NumberOfPages: 42
PageMediaBegin
PageMediaNumber: 1
PageMediaRotation: 0
PageMediaRect: 0 0 612 792
PageMediaDimensions: 612 792
[...]
你可以將 InfoValue
的值修改為對當(dāng)前 PDF 有意義的內(nèi)容。比如可以將 Creator
字段從 Word
修改為實(shí)際的作者或出版社名稱。比起使用導(dǎo)出程序自動(dòng)生成的標(biāo)題,使用書籍的實(shí)際標(biāo)題會(huì)更好。
你也可以做一些清理工作。在 NumberOfPages
之后的行都不是必需的,可以刪除這些行的內(nèi)容。
添加書簽
PDF 書簽的格式如下:
BookmarkBegin
BookmarkTitle: My first bookmark
BookmarkLevel: 1
BookmarkPageNumber: 2
BookmarkBegin
表示這是一個(gè)書簽。BookmarkTitle
書簽在 PDF 閱讀器中顯示的文本。BookmarkLevel
書簽層級。如果書簽層級為 2,它將出現(xiàn)在上一個(gè)書簽的小三角下。如果設(shè)置為 3,它會(huì)顯示在上一個(gè) 2 級書簽的小三角下。這讓你能為章以及其中的節(jié)設(shè)置書簽。BookmarkPageNumber
點(diǎn)擊書簽時(shí)轉(zhuǎn)到的頁碼。
為你需要的章節(jié)創(chuàng)建書簽,然后保存文件。
更新書簽信息
現(xiàn)在已經(jīng)準(zhǔn)備好了元數(shù)據(jù)和書簽,你可以將它們導(dǎo)入到 PDF 文件中。實(shí)際上是將這些信息導(dǎo)入到一個(gè)新的 PDF 文件中,它的內(nèi)容與原 PDF 文件相同:
$ pdftk mybigfile.pdf \
update_info bookmarks.txt \
output mynewfile.pdf
生成的 mynewfile.pdf
包含了你設(shè)置的全部元數(shù)據(jù)和書簽。
體現(xiàn)專業(yè)性
PDF 文件中是否包含定制化的元數(shù)據(jù)和書簽可能并不會(huì)影響銷售。
但是,關(guān)注元數(shù)據(jù)可以向用戶表明你重視質(zhì)量保證。增加書簽可以為用戶提供便利,同時(shí)亦是充分利用現(xiàn)有技術(shù)。
使用 pdftk-java
來簡化這個(gè)過程,用戶會(huì)感激不盡。