在 Linux 將 PDF 彩色轉成黑白
目錄
(最近更新:2019-03-10,修正指令的錯誤)
免責聲明:以下僅供參考,本文作者不為使用者執行以下內容之後果負擔任何責任。
最近因為下載過著作權保護的愛爾蘭語相關著作古籍,這些書籍是黑白印刷的,但是因為紙張泛黃,和黑白相比,並太不適宜閱讀,轉成灰階對比度較低,更難閱讀。若是列印供紙本閱讀的話,當然希望能夠用黑白列印就好了。所以就有如標體所述,將這種彩色 PDF 轉成黑白的需求。
因為如果用 convert
指令直接轉換的話,似乎效果不太好,而這些 pdf 檔案都是圖片檔組合而成,我後來參考網路上的教學,歸納可以為三個步驟,比較適合這種類型的 PDF:
- 將 PDF 抽取圖片。
- 將每幅圖片變成黑白。
- 將這些黑白圖片組回去變成 PDF。
現在不易找齊我那時候參考哪些來源了(同類型的 Q&A 與可能參考來源列於「相關資料與可能參考來源」段),以下只是參考教學。
為方便解說,input.pdf 指定為欲處理的 PDF 檔,output 為輸出結果。
- 將 PDF 抽取圖片(rx 和 ry 各指定 x 維和 y 維的解析度,單位為 dpi)。將產生一系列圖片依頁碼為流水號如:temp-001.png、temp-002.png、temp-003.png……
- 將這些圖片批次用 convert 轉成黑白圖片。
for file in $(ls temp*.png) ;
:顯示檔名符合 temp*.png 格式(就是我們剛才抽取出的流水號圖檔)的檔名列表,存在file
這個迴圈用的臨時變數(file=temp-001.png, temp-002.png,...
),進行迴圈批次操作。do convert $file -threshold 67% result-$file.png;
:迴圈內要重複執行的部份。將檔案名稱為$file
的彩色圖檔用convert
指令轉換成黑白兩色圖片,名稱為result-$file
(比如:temp-001.png 轉換成 output-temp-001.png)。-threshold
區分黑白和彩色的閾值參數(範圍為0-100%,參考「相關資料與可能參考來源」第1點連結 Der Hochstapler 的回答),這裡設定為67%。done;
:結束迴圈。- 將這些生成的圖片結合成新的 PDF:
pdftoppm input.pdf temp -png -rx 450 -ry 450
for file in $(ls temp*.png) ; \ do convert $file -threshold 67% result-$file.png; \ done ;
這裡解說一下:
convert result-temp-*.png output.pdf