天天看點

技術 | 使用 pdftk 為 PDF 文檔建立書簽

技術 | 使用 pdftk 為 PDF 文檔建立書簽
充分利用現有的技術,提供書簽以幫助使用者。

在 介紹 pdftk-java中, 我展示了如何在腳本中使用

pdftk-java

來快速修改 PDF 檔案。

但是,

pdftk-java

最有用的場景是處理那種動辄幾百頁的沒有目錄的大 PDF 檔案。這裡所謂的目錄不是指文檔前面供列印的目錄,而是指顯示在 PDF 閱讀器側邊欄裡的目錄,它在 PDF 格式中的正式叫法是“書簽bookmarks”。

技術 | 使用 pdftk 為 PDF 文檔建立書簽

如果沒有書簽,就隻能通過上下滾動或全局搜尋文本來定位想要的章節,這非常麻煩。

PDF 檔案的另一個惱人的小問題是缺乏中繼資料,比如标題和作者。如果你打開過一個标題欄上顯示類似 “Microsoft Word - 04_Classics_Revisited.docx” 的 PDF 檔案,你就能體會那種感覺了。

pdftk-java

讓我能夠建立自己的書簽,我再也不面對這些問題了。

在 Linux 上安裝 pdftk-java

正如

pdftk-java

的名稱所示的,它是用 Java 編寫的。它能夠在所有主流作業系統上運作,隻要你安裝了 Java。

Linux 和 macOS 使用者可以從 AdoptOpenJDK.net安裝 Java(LCTT 譯注:原文為 Linux,應為筆誤)。

Windows 使用者可以安裝 Red Hat's Windows build of OpenJDK。

在 Linux 上安裝 pdftk-java:

  1. 從 Gitlab 倉庫下載下傳 pdftk-all.jar release,儲存至

    ~/.local/bin/

    或其它路徑下.
  2. 用文本編輯器打開

    ~/.bashrc

    ,添加

    alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'

  3. 運作

    source ~/.bashrc

    使新的 Bash 設定生效。

資料轉儲

修改中繼資料的第一步是抽取 PDF 目前的資料檔案。

現在的資料檔案可能并沒包含多少内容,但這也是一個不錯的開端。

$ pdftk mybigfile.pdf \
  data_dump \
  output bookmarks.txt
           

生成的

bookmarks.txt

檔案中包含了輸入 PDF 檔案

mybigfile.pdf

的所有中繼資料和一大堆無用資料。

編輯中繼資料

用文本編輯器(比如 Atom或Gedit)打開

bookmarks.txt

以編輯 PDF 中繼資料。

中繼資料的格式和資料項直覺易懂:

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

的值修改為對目前 PDF 有意義的内容。比如可以将

Creator

字段從

Word

修改為實際的作者或出版社名稱。比起使用導出程式自動生成的标題,使用書籍的實際标題會更好。

你也可以做一些清理工作。在

NumberOfPages

之後的行都不是必需的,可以删除這些行的内容。

添加書簽

PDF 書簽的格式如下:

BookmarkBegin
BookmarkTitle: My first bookmark
BookmarkLevel: 1
BookmarkPageNumber: 2
           
  • BookmarkBegin

    表示這是一個書簽。
  • BookmarkTitle

    書簽在 PDF 閱讀器中顯示的文本。
  • BookmarkLevel

    書簽層級。如果書簽層級為 2,它将出現在上一個書簽的小三角下。如果設定為 3,它會顯示在上一個 2 級書簽的小三角下。這讓你能為章以及其中的節設定書簽。
  • BookmarkPageNumber

    點選書簽時轉到的頁碼。

為你需要的章節建立書簽,然後儲存檔案。

更新書簽資訊

現在已經準備好了中繼資料和書簽,你可以将它們導入到 PDF 檔案中。實際上是将這些資訊導入到一個新的 PDF 檔案中,它的内容與原 PDF 檔案相同:

$ pdftk mybigfile.pdf \
  update_info bookmarks.txt \
  output mynewfile.pdf
           

生成的

mynewfile.pdf

包含了你設定的全部中繼資料和書簽。

展現專業性

PDF 檔案中是否包含定制化的中繼資料和書簽可能并不會影響銷售。

但是,關注中繼資料可以向使用者表明你重視品質保證。增加書簽可以為使用者提供便利,同時亦是充分利用現有技術。

使用

pdftk-java

來簡化這個過程,使用者會感激不盡。

(題圖:MJ/f8869a66-562d-4ee4-9f2d-1949944d6a9c)

via: https://opensource.com/article/22/1/pdf-metadata-pdftk

作者:Seth Kenlon選題:lujun9972譯者:toknow-gh校對:wxy

本文由 LCTT原創編譯,Linux中國榮譽推出