PDF 會將每張置入的相片或掃描檔各自存成一個影像物件,並由頁面繪製指令以名稱加以引用。若要讓影像在視覺上消失,你可以選擇移除該引用(這通常會破壞頁面),或是將底層的影像串流替換成無害的內容,同時保留引用不動。從 PDF 移除影像工具採用的是第二種做法:它會找出所有符合資格的內嵌影像物件,將其串流替換為 1×1 白色 JPEG,並保持頁面幾何、文字圖層、連結與向量內容不變。由於引用仍指向一個有效的影像物件,輸出結果在任何 PDF 檢視器中都能正常開啟。需要注意的是,此工具對於「符合資格」的定義非常嚴格:如果你的 PDF 中哪怕只有一張影像使用了遮罩、索引色盤、CMYK、JPXDecode、JBIG2 或 LZW 壓縮,整個工作就會被拒絕,而不是默默留下該影像。

「從 PDF 刪除影像」實際上會改變檔案中的什麼內容
PDF 頁面基本上就是一串繪製指令,搭配一個資源字典,用來命名這些指令所參考的影像物件。如果你從資源字典中刪除一個名稱,卻保留繪製指令不動,許多檢視器會拒絕開啟檔案,或將頁面渲染為損毀。「從 PDF 移除影像」工具所採用的較安全做法,是保留資源字典中的名稱與頁面上的繪製指令,但將實際的影像串流(也就是描述像素的位元組)替換成一個微小的白色 JPEG。頁面仍然會畫出東西(一個被拉伸到原影像框的單一白色像素),而文件也能正常開啟。原影像的承載資料不再用於可見頁面,這正是大多數讀者在詢問如何從 PDF 檔案刪除影像時真正想要的結果。
實作方式遵循 Adobe PDF Reference 中所描述的影像 XObject 模型,在本機儲存檔案之前,會先將每個串流以 pdf-lib 中的 PDFRawStream 重新寫入。最終結果就是一份任何讀取器都能開啟的普通 PDF,可見頁面中符合資格的影像已經消失,文件的其他結構則維持原樣。
工具會移除哪些內嵌影像
資格規則刻意設定得很嚴格,以確保結果永遠能安全開啟。一張影像只有在以下條件全部同時成立時才算合格:
- 影像以 DCTDecode 串流儲存,這是相機、手機與大多數掃描器所使用的標準 JPEG 編碼。
- 色彩空間為 DeviceRGB 或 DeviceGray,不可含有索引色盤、CMYK 或 ICCBased 描述檔。
- 該串流沒有 DecodeParms、沒有明確遮罩、沒有軟遮罩,也沒有替代影像。
- 它是作為間接影像 XObject 被引用,而不是直接放在頁面內容串流中的行內影像。
如果 PDF 中的每張影像都滿足這四項條件,工具就會產生輸出結果。頁數、文字圖層、書籤,以及所有外部或內部連結都會維持原狀,因為工具只會重新寫入影像串流本身。下表摘要說明各種常見影像類型的處理方式:
| 影像類型 | 工具是否會移除? | 原因 |
|---|---|---|
| 一般的 DeviceRGB JPEG 相片 | 是 | 符合全部四項資格規則 |
| DeviceGray JPEG 掃描檔 | 是 | 符合全部四項資格規則 |
| 印刷流程產生的 CMYK JPEG | 否 | 色彩空間不是 DeviceRGB 或 DeviceGray |
| 使用索引色盤的標誌 | 否 | 使用了索引色彩空間 |
| 有遮罩或軟遮罩的影像 | 否 | 含有 DecodeParms 或遮罩引用 |
| JPXDecode(JPEG 2000)影像 | 否 | 濾鏡不是 DCTDecode |
| JBIG2 影像(常源自傳真) | 否 | 濾鏡不是 DCTDecode |
| 內容串流中的行內影像 | 否 | 不是間接 XObject |
如何使用此工具從 PDF 檔案刪除影像
以下是實際的工作流程,可在不上傳任何檔案的情況下產生一份清理過的本機副本:
- 在瀏覽器中開啟「從 PDF 移除影像」頁面,並確認你想編輯的檔案已儲存在你的裝置上,且大小不超過 25 MB。
- 使用檔案選擇器挑選一份本機 PDF。檔案會在你的瀏覽器中讀取;不會上傳到任何伺服器。
- 點選「移除符合資格的影像」。工具會列舉文件中的每個間接影像物件,並執行上述嚴格的相容性檢查。
- 等待畫面上的確認訊息。如果每張影像都通過檢查,工具會產生 1×1 白色 JPEG 作為替代,重新寫入每個影像串流,並透過 pdf-lib 與 PDF.js 檢視器函式庫重新開啟文件,以驗證頁數與影像物件數量。
- 在瀏覽器的 PDF 檢視器中開啟預�,逐頁進行目視檢查。確認你想移除的相片、掃描檔、標誌或背景都已變成白色,並確認文字圖層與連結仍如預期運作。
- 點選下載按鈕以儲存新的 PDF。請務必在目視檢查通過後再下載,因為工具只有在本身的結構驗證成功後才會顯示下載按鈕。
為何工具偶爾會拒絕一份看起來完全正常的 PDF
最常見的拒絕原因是文件中有單一一張影像使用了支援清單外的功能。以透明 PNG 匯出再重新存成 PDF 的標誌,通常會帶有軟遮罩;CMYK 印刷 PDF 一定至少含有一張 CMYK 影像;以 PDF/A 儲存的掃描歸檔經常使用 JPEG 2000;源自傳真的文件則常將內容存為 JBIG2。這些在真實世界的文件中都不罕見,但都落在支援範圍之外。拒絕結果會透過清楚的畫面訊息告知,而不是以靜默的部分下載方式呈現,因為部分檔案比完全沒有檔案更糟:下載按鈕會讓人以為結果是乾淨的,但實際上仍有複雜影像被繪製在頁面上。當發生拒絕時,你可以選擇的務實做法包括:在桌面工具中簡化來源 PDF 後再試一次、使用 PDF 轉 JPG 工具將受影響的頁面渲染成影像,再從這些影像重建文件,或是接受這個版本無法安全地移除你關心的那張特定影像。
在依賴輸出結果之前先進行檢查
工具在提供下載之前會執行兩項結構檢查:確認輸出 PDF 的頁數與輸入相同,並確認預期數量的影像物件仍然以有效的 1×1 白色 JPEG 形式存在。這些防護機制能擷取最常見的損壞情況,但仍無法取代實際閱讀結果。在你將新檔案用於任何重要用途之前,請在你慣用的 PDF 讀取器中將其開啟,並完成以下所有步驟:
- 逐頁捲動瀏覽,而不只是看第一頁。你在意的影像可能藏在文件深處,而全有全無的規則只能確認每張影像都已被處理,並不能確認每張影像正是你想移除的那一張。
- �試選取文字。文字選取功能應該仍可正常運作,因為工具並不會將整個頁面點陣化,也不會動到文字繪製指令。
- 點選你所依賴的任何連結。內部 GoTo 連結與外部 URL 註解都會被保留,因為頁面資源並未被刪除,只有底層的影像串流被重新寫入。
- 比較檔案大小。含有許多大型相片的文件在這些串流被替換後,大小會明顯縮小,這是確認清理確實有發生的快速健全性檢查。
如果結果看起來有問題,請勿覆寫原始檔案。在你完成審�之前,請將來源 PDF 與清理後的副本並存保留。
此工具不適用的情況
白色替代影像並不等同於真正的遮蔽 redact。此工具的目的是在可以接受佔位影像的情境下清理文件,而非用來對抗鑑識層級的讀者。在敏感的工作流程中,殘留的文件詮釋資料、儲存在檔案其他位置的原始影像歷程記錄,以及疊加在白色方塊上的任何頁面內容,仍可能洩漏細節。輸出結果並未通過遮蔽認證,工具不會移除數位簽章,也無法繞過密碼。針對法律、安全或隱私等級的移除作業,請使用專門的遮蔽工作流程,並保留完整的稽核軌跡。
若是相反的需求,也就是匯出影像而非移除影像,從 PDF 擷取影像工具會在本機產生一份內嵌 JPEG 的歸檔,當你想針對每張影像決定保留或刪除時,這是天然的搭配工具。兩者讀取的是同一種輸入,但產生的是相反的輸出,因此你可以依目標決定執行順序。
綜合整理
針對一份典型的掃描報告、手冊或投影片組,當其中混合了文字與少數大型相片時,以上工作流程可在一次操作中產生一份有用的清理副本,不需要上傳、不需要帳號、也不會加上浮水印。對於混合了簡單 JPEG 與標誌、遮罩或 CMYK 印刷資產的文件,嚴格的資格檢查會拒絕這個工作,這其實是正確的行為:它在讓你下載任何東西之前就先告訴你,部分清理可能會誤導使用者。無論哪種情況,來源 PDF 都保留在你的裝置上,要對每張影像採取什麼動作的選擇權也交給你,最終結果就是一份在任何讀取器中都能開啟的普通 PDF。
延伸閱讀:如何在 Safari 中於 iPhone 上刪除 PDF 頁面。
延伸閱讀:如何在本機從 PDF 文件擷取影像。