在瀏覽器中從 PDF 移除圖片,指的是把每一個符合條件的內嵌 JPG 圖片物件,替換成一張 1×1 的白色 JPEG,同時保持每一條頁面繪製指令與資源參照都完整不動,這樣文件的其餘部分——文字、連結、頁面幾何結構,以及非圖片的向量內容——就能維持原樣不受影響。
內嵌在 PDF 中的圖片,並不是一層可以直接用裁切工具抓起來丟掉的平面圖層。每一張照片或掃描件都是一個稱為圖片 XObject 的間接物件,透過頁面資源字典中的名稱定址,並由內容串流中的一段簡短指令繪製到頁面上。如果刪除該物件卻沒有修正參照,檔案就會損壞;頁面會拒絕算繪,或是檢視器會回報找不到資源。以瀏覽器為基礎的從 PDF 移除圖片工具,透過保持每一個參照有效、只替換圖片資料本身,來繞開這個風險,因此產出的檔案在每一頁看起來仍然像正常的 PDF。整個流程的任何一個階段都不涉及上傳,這讓原始文件在使用者第一次下載修改後的副本之前,都留在使用者的電腦裡。

「移除圖片」在 PDF 中實際上是什麼意思
「移除圖片」這個說法其實相當籠統。實務上,一份典型的 PDF 可以包含好幾種視覺內容,它們存放在檔案中不同的位置:
- 內嵌點陣圖片——JPG、PNG 及其他壓縮相片資料,以間接圖片 XObject 的形式儲存,並依名稱繪製到頁面上。這正是這個工具鎖定的目標。
- 向量圖形——用 PDF 路徑運算子繪製的形狀、線條、標誌與圖表。它們完全不是圖片,也無法被只處理圖片的工具移除。
- 以字符算繪的文字——由字型指令繪製、可選取的文字,而非由圖片指令繪製。移除圖片絕不會影響這一層。
- 頁面背景與註解——全頁的色彩鋪底、便利貼與表單元件存放在各自獨立的字典中,並不屬於圖片串流的一部分。
當一份 PDF 是透過掃描頁面組成時,掃描器通常會為每一頁內嵌一張大型 JPEG。而當一份 PDF 是從 Word、InDesign 或簡報工具匯出時,它可能會把較小的 JPEG 與向量插圖混在一起。這個工具能俐落地處理第一種情況,只有在每一張內嵌圖片剛好符合其支援的編碼方式時,才能處理第二種情況。
為什麼這個工具要保留每一個資源參照
最直覺的做法,是把每一個圖片物件從資源字典中整個剔除,然後祈禱一切順利。但這種期待是錯的。大多數頁面內容串流都含有像是 /Im1 Do 這樣依名稱呼叫圖片的指令。如果對應的項目已經從頁面的資源中移除,這條指令就會指向空無一物,PDF 檢視器會顯示頁面損壞的錯誤,而不是乾淨的白色矩形。
這裡的實作採用了 PDF 規範中針對圖片字典描述的較安全做法。它保留原始的間接物件參照,並把它的圖片串流替換成一個有效的 1×1 白色 JPEG。頁面繪製指令與它的資源參照維持有效,而原本符合條件的圖片內容則不再用於呈現該可見頁面。原本有圖片的地方現在看起來是空白的,而文件的其餘部分仍然是一份正常、可開啟的檔案。這項技術建立在pdf-lib 的 PDFRawStream 處理之上,讓工具能重新指定既有間接物件的串流位元組,而不改變它在資源表中的身分。
如何逐步從 PDF 中移除圖片
整個工作都在你的瀏覽器中執行。你的檔案永遠不會上傳到伺服器,在你選擇下載新的 PDF 之前,任何東西都不會離開你的裝置。
- 開啟工具,從你的電腦選取一份 PDF。檔案必須小於 25 MB,且不得加密。選取你想要處理的文件。
- 執行全有或全無的相容性檢查。點擊觸發移除動作的按鈕。工具會逐一走訪每一個內嵌圖片物件,檢查其濾鏡、色彩空間與解碼參數。只要有一張圖片不符合規則,就會拒絕整個工作。
- 等待結構驗證完成。在寫入替換內容之後,工具會在瀏覽器中儲存新的 PDF,用 pdf-lib 開啟它,再用網站其他轉換工具所使用的同一套PDF.js 算繪管線重新開啟它。它會檢查頁數是否未變,以及替換後的圖片物件是否仍然存在。
- 下載前先檢視新的 PDF。開啟預覽並逐頁檢視。留意有沒有你原本預期已經消失、卻仍然顯示的圖片,以及有沒有遺失任何文字或向量內容。
- 只有在預覽結果沒問題時才下載修改後的 PDF。如果有任何地方不對,關閉預覽並用原始檔案重新開始。這個工具永遠不會覆寫來源檔案。
關於本地端處理流程更詳細的說明,可以參考搭配指南如何在本地端從 PDF 檔案刪除圖片,該指南從桌面應用程式的角度涵蓋了相同的工作流程,並更詳細地說明了驗證迴圈。
工具何時會拒絕你的檔案
這項相容性檢查刻意設計得很嚴格。只有當每一個內嵌圖片物件都是未加遮罩、使用 DeviceRGB 或 DeviceGray 的 8 位元 DCTDecode JPEG,且沒有 DecodeParms 時,這份 PDF 才會被接受。用白話來說,這代表:
- 接受:以純 RGB 或灰階 JPEG 儲存的照片與掃描件。
- 拒絕:包含任何 CMYK JPEG、任何使用索引調色盤的圖片、任何使用 JPXDecode、JBIG2Decode 或 LZWDecode 的圖片、任何帶有軟遮罩的圖片,或任何使用 DecodeParms 重新對應色彩通道的圖片的檔案。
- 同樣會被拒絕:已加密的 PDF、受密碼保護的 PDF、已簽署的 PDF、格式錯誤的檔案,以及任何剖析器無法順利開啟的檔案。
設下全有或全無這條規則,是為了避免無聲的部分結果。如果沒有這條規則,下載按鈕可能會宣稱所有圖片都已移除,但實際上頁面中仍原封不動地留著一張複雜的圖片。拒絕整個檔案才是誠實的做法。如果你的 PDF 被拒絕,你的選項包括:從原本的製作工具匯出一份更簡單的副本,透過像PDF 轉 JPG這樣的工具只把符合條件的頁面點陣化,或是選擇另一個針對不受支援圖片類型設計的工作流程。
什麼會保留、什麼會改變
並列來看,能幫助你理解在一份典型且被接受的 PDF 中,這個工具會動到什麼、又會保留什麼。
| 文件元素 | 移除成功時會發生什麼 |
|---|---|
| 符合條件的內嵌 JPG 圖片物件 | 替換為 1×1 白色 JPEG;資源參照維持有效 |
| 以字型指令繪製的文字 | 不受影響,仍可選取 |
| 內部與外部連結註解 | 在來源 PDF 支援的情況下不受影響 |
| 向量路徑、線條與形狀 | 不受影響 |
| 頁面大小、邊界與頁面幾何結構 | 不受影響 |
| 文件中繼資料(標題、作者、日期) | 從來源 PDF 沿用 |
| 任何使用不支援編碼方式的圖片 | 整個工作被拒絕;不會儲存任何輸出檔案 |
頁面本身永遠不會被點陣化以壓平掉圖片。這正是文件其餘部分能維持文字與連結完整的原因,也是白色像素結果在日常清理工作中仍然有用的主要原因。
什麼時候白色像素不夠用
白色替換是一種視覺層面的處理,而不是鑑識層面的處理。當你只是單純想清理一份草稿、從報告中移除裝飾性照片,或在重新分發之前把頁首橫幅塗白時,這是正確的選擇。但在以下情況中,這就不是正確的選擇:
- 你需要法律層級的遮蔽——原始圖片資料仍有可能存在於文件中繼資料、漸進更新歷程,或隱藏圖層中。
- 你需要移除 CMYK 印刷用圖稿,或任何使用非 DCTDecode 濾鏡的圖片。
- 你需要移除以向量運算子繪製、而非以圖片物件呈現的內容。
- 你需要塗白一個部分被繪製在圖片上方的其他頁面內容所覆蓋的區域。
遇到這些情況時,請保持來源文件不動,改用專門設計的遮蔽工具,並用能揭露隱藏內容的檢視器驗證結果。至於其他情況——只是想快速地、以瀏覽器為基礎清理一份 PDF,且用白色矩形取代原始圖片是可以接受的做法——「從 PDF 移除圖片」能處理這種常見、簡單的情況,而且不會把你的檔案上傳到任何地方。
相關閱讀:忘記 PDF 密碼時如何移除它。