make-look-scanned: 將數位 PDF 轉換為逼真的掃描文件
概覽
make-look-scanned 是一款專門設計的工具,旨在將乾淨的數位 PDF 轉換為看起來像是經過實體列印與掃描的文件。該工具透過將每一頁轉換為影像(rasterizing)並應用一系列退化效果,從而產生僅含影像的 PDF,並移除原始的可選取文字,以模擬基本掃描器的輸出結果。
根據作者的說法,建立此專案是為了提供一個注重隱私、且可在本地端運行的替代方案,以取代那些需要使用者將敏感檔案上傳到第三方伺服器的線上「讓我的 PDF 看起來像掃描過的」工具。
技術實作與處理流程
該工具利用多階段效果流程來模擬實體掃描的不完美性。使用者可以透過 CLI 旗標或設定預設值來控制以下參數:
- 幾何失真:
--skew旗標允許設定最大旋轉角度,以模擬紙張對齊不準的問題。 - 視覺退化:選項包括用於模擬掃描器顆粒感的
--noise、用於模擬失焦的--blur(高斯 sigma 值),以及用於模擬邊緣暗角的--edge-shadow。 - 色彩與色調:
--grayscale旗標會使文件去飽和,而--paper-tone則會增加暖色調以模擬老舊或特定類型的紙張。 - 壓縮偽影:
--jpeg-quality旗標(1-100)會引入掃描影像 PDF 中常見的 JPEG 壓縮偽影。
決定性與可重現性
預設情況下,輸出結果是具備決定性的。該工具從輸入 PDF 的內容雜湊值(content hash)中衍生出一個種子值(seed),確保相同的輸入檔案始終會產生相同的視覺結果。使用者可以使用 --seed N 旗標來覆蓋此行為,以產生不同但仍可重現的外觀。
部署選項:CLI vs. 瀏覽器
make-look-scanned 提供兩種不同的執行效果流程的方式,以確保處理過程發生在使用者的本地端機器上。
命令列介面 (CLI)
CLI 是使用 Go 語言編寫的,並透過 go-fitz 使用 cgo 連結至 MuPDF。這會產生一個獨立的二進位檔,不需要安裝任何執行環境。可以透過位於 $XDG_CONFIG_HOME/make-look-scanned/ 或 ~/.make-look-scanned/ 的 config.toml 檔案來進行配置,以儲存可重複使用的預設值。
瀏覽器 (WebAssembly)
由於 MuPDF 無法編譯為 WASM,瀏覽器版本使用 PDF.js 進行頁面影像化(rasterization)。一旦頁面轉換為像素,它們就會被傳遞給編譯為 WebAssembly 的相同 Go 效果流程。這使得該工具可以完全在客戶端執行。
值得注意的是,作者提供了一個單一且獨立的 HTML 檔案(dist/make-look-scanned.html),該檔案將 WASM、Go 執行環境膠合程式與 PDF.js 以 base64 格式內嵌,從而使該工具可以在沒有伺服器的情況下離線工作。
社群洞察與替代方案
使用者之間的討論突顯了對該工具的實用性與實作方式的多種觀點:
隱私與可及性:使用者稱讚該工具是開源且免費的,與那些需要付費的 PDF 工具進行對比。
Bedrock 替代方法:部分使用者建議了手動的替代方案,例如在螢幕上顯示 PDF 並用手機拍攝它,以自然地捕捉莫列波紋(moire patterns)與灰塵。
技術替代方案:一位使用者分享了使用 ImageMagick 的類似工作流程:
magick -density 150 input.pdf -colorspace Gray -virtual-pixel White -background White -rotate 0.7 +repage -attenuate 0.45 +noise Gaussian -blur 0x0.4 -brightness-contrast -5x12 -compress jpeg -quality 78 scanned.pdf
- 功能請求:改進建議包括增加輸出個別影像(JPG/PNG)而非僅限於 PDF 的能力,以及增加一個旗標來插入隨機空白頁,以進一步增加模擬的真實感。