正確移除 PDF 註解,意思是在不重寫底層頁面內容串流的情況下,刪除每一頁的 Annots 陣列——也就是列出連結、註解、快顯註記、戳記、標註、附件以及表單欄位小工具的字典項目——然後重新開啟儲存後的檔案,確認互動層已消失,而所有繪製的文字、影像和形狀仍留在原本的位置。

PDF 註解是與特定頁面關聯的互動物件,並非繪製到內容串流中的普通標記。常見的例子包括可點擊的連結、文字註解、高亮或標註註解、快顯註記、戳記、附件註解,以及表單欄位小工具。這個區分很重要,因為移除互動層可能會留下可見的殘留痕跡:被移除連結的藍色底線文字、被清除高亮的矩形外框,或被移除戳記的形狀。反過來說,如果高亮在被你拿到檔案之前就已扁平化為頁面圖稿,就不再由 Annots 項目控制,因此在作業後仍會保持可見。理解這個界線,是獲得正確結果的第一個檢查點。

移除 PDF 註解工具套用一條範圍明確、可稽核的規則:計算每一頁 Annots 陣列中的項目數,從每個帶有該項目的頁面字典中刪除這個鍵,序列化產生新的 PDF,並在開始下載前回報受影響的項目數和頁數。處理完全在瀏覽器內部於本地進行,原始檔案絕不會被覆寫,而新檔名會在副檔名前加上 "-annotations-removed"。

how do i make sure i remove pdf annotations correctly
如何確認我正確地移除了 PDF 註解

什麼算是頁面註解

在驗證任何結果之前,你必須先確切知道工具在檢查什麼。在 PDF 規格中,頁面註解是任何透過該頁面的 Annots 陣列綁定到特定頁面的互動物件。PDF 協會的註解總覽將這些分成幾個類別,但大多數讀者實際會遇到的,可歸納成一份簡短的工作清單。

連結、文字註解、快顯註記、戳記、附件、表單欄位小工具,以及常見的標註集合——高亮、底線、刪除線、波浪線——全部都符合資格。它們共享兩個定義性特徵:它們存在於頁面字典的 Annots 陣列中,而不是頁面內容串流裡;而且它們能在檢視器中回應點擊、懸停或右鍵動作。如果某個物件同時符合這兩個特徵,工具就會計算它,並在收到請求時移除它。

註解類型典型外觀本工具是否會移除?
連結 / URI藍色底線文字或隱形熱點是——會刪除互動區域;底線文字會以繪製方式保留下來
文字註解 / 便利貼圖釘圖示或文字方塊是——會刪除註解物件
高亮、底線、刪除線文字上的彩色標記仍是註解時會移除;扁平化的繪製內容則不會動到
戳記放在頁面上的影像或文字區塊是——會刪除互動式戳記
附件迴紋針圖示是——會刪除附件註解
表單欄位小工具可編輯的文字方塊、核取方塊或簽章欄位是——會刪除互動式小工具

任何未通過上述兩個特徵之一的物件,都不在本工具的處理範圍內。僅以影像形式繪製到內容串流中的浮水印、以與註解相同字型和顏色繪製的文字圖層,以及預先扁平化的表單值,都不屬於任何 Annots 陣列,工具會完全不處理它們。

工具使用的稽核規則

正確的移除取決於一個精確且可重複的作業。工具不會對頁面進行點陣化、不會扁平化表單、不會執行 OCR,也不會重繪任何可見內容。它會依序執行四個動作,而每次輸出都會經過同一條流程鏈。

  1. 驗證輸入:單一非空白的 PDF,大小不超過 25 MiB,具備可讀的交互參照資料,且未設有密碼保護。
  2. 檢查每個頁面字典,解析其 Annots 陣列中的項目,並統計總數以及至少有個數項目的頁面數。
  3. 若統計結果為零,則拒絕輸出替代檔案——未變更的 PDF 會被如實回報,且不會提供下載。
  4. 從每個帶有該項目的頁面字典中刪除 Annots 鍵,然後將結果序列化為新的本地 PDF。

由於每一步都可被稽核,「正確」在這裡有狹隘的定義:儲存後的檔案在每個頁面上的 Annots 項目都必須為零,同時頁數、頁面順序、頁面框、旋轉設定以及內容串流資料都必須與輸入一致。如果儲存後的檔案中有任何一項不變量(-invariant)遭到破壞,該作業就不算正確,你應該換用不同的來源檔案重試,而不是把輸出當成有效結果。

還有一項值得記錄的限制:密碼保護無法被略過,而加密的 PDF 會產生明確的錯誤訊息。同樣地,交互參照資料損壞的檔案、空白的選取範圍,以及大小超過 25 MiB 的檔案,在動到任何頁面之前就會被拒絕。

如何移除註解並驗證結果

驗證流程分為兩個階段——執行工具,然後根據一開始的預期檢查儲存後的檔案。這兩個階段結合起來,才能讓結果值得信賴,因為螢幕上的報告只是內部統計,並非檢視器將如何解讀輸出的保證。

  1. 挑選你想清理的 PDF。檔案必須非空白、大小不超過 25 MiB,且未設有密碼保護。
  2. 等待工具完成讀取。介面會回報註解總數以及受影響的頁數。零代表檔案中沒有任何頁面帶有 Annots 項目,且不會產生下載檔案。
  3. 選擇移除頁面註解,儲存新的 PDF,並注意檔名結尾會是 "-annotations-removed"。原始檔案維持不變。
  4. 在你平常使用的檢視器中開啟下載的檔案。在每個已移除的連結、註解或表單小工具原本的位置精確地點擊一下。正確的結果是:該區域不再改變游標形狀、不再開啟快顯視窗,點擊後也不會再進行導覽。
  5. 捲動每一個受影響的頁面,確認可見內容並未改變:內文、頁碼、影像、向量形狀、以圖稿形式繪製的簽章,以及扁平化的表單值,都應仍維持原樣。
  6. 如果看起來有任何異狀——註解圖示仍然出現、連結仍然可以導覽、表單欄位突然消失——請先開啟位於 修正 PDF 註解移除後看起來有誤的結果 的疑難排解指南,再將該作業視為成功。

第五項是不可省略的。正確的註解移除在內容串流中是無聲的:除非你與頁面互動,否則頁面看起來應該一樣。如果某個可見元素消失了,你所看到的是某個以某種不顯眼方式繫結到 Annots 陣列的內容串流元素,這時你應該檢查檔案本身,而不是相信那份報告。

正確移除後仍會保留的可見內容

文件中有若干產物理應會在輸出中保留下來,事先辨識它們會讓「看起來哪裡不一樣」變成「這是預期中的殘留」。這些都不是失敗的跡象,工具的設計本就刻意保留它們。

藍色、帶底線的連結文字通常會保留可見狀態。連結的互動區域已消失,但那段可見的文字是內容串流中繪製出來的字形,因此不會被動到。如果你是因為底線顏色才注意到這個連結,最乾淨的做法是在重新匯出 PDF 之前,先在你的文書處理軟體中把它的顏色改掉,而不是再跑一次註解移除來追它。

扁平化的高亮會保留可見狀態。經過「扁平化註解」步驟匯出的高亮,現在已是頁面圖稿的一部分,通常是繪製在文字下方的半透明矩形。工具無法將它與串流中任何其他矩形區分開來,因此不會嘗試移除它。同樣的邏輯也適用於任何先前已「燒入」頁面的表單值,包括貼上的簽章、蓋上的日期,以及核可標記。

文件詮釋資料、嵌入的檔案、JavaScript 動作、隱藏圖層、替代影像,以及可還原的舊版本,同樣都不會被動到。這些都不存在於頁面的 Annots 陣列中,因此刪除該鍵並不會對它們做任何聲明。

最後,檔案大小不一定會縮減。刪除註解物件會減少字典項目,但交叉參照表和間接參照常會讓序列化後的輸出大小與原始檔案相近。輸出變大或維持不變,並不代表作業失敗。

本工具不保證的事項

註解移除與遮蔽(redaction)之間的界線,是最常被誤用的期待來源。這是一個在瀏覽器內部執行的本地作業流程,只會從頁面字典中刪除一個特定的鍵。它不是一個資料清理產品,而它所遵循的規則,也未對該鍵周圍的位元組做任何聲明。

作業流程適合使用本工具嗎?
為了分享更乾淨而移除頁面層級的連結與註解是
在列印前停用可點擊區域是
從草稿中清除審閱註解是
從最終表單中移除表單欄位的互動性是,但前提是可捨棄表單結構;若必須保留表單結構,請改用 扁平化 PDF
永久隱藏機密文字,避免從外洩檔案中曝光否——請使用專門的遮蔽作業流程
清除詮釋資料、指令碼、嵌入檔案或隱藏圖層否
修復損壞的 PDF 或還原損毀的交叉參照表否
產生符合歸檔標準、經過驗證的檔案否

如果你真正需要的其實是右欄中的任何一項,請在這裡停下,挑選符合該工作的工具。混搭期待會導致文件看起來比實際更乾淨,而一個被移除的註解物件,並不等於一塊被刪除的內容位元組。

你可以稽核的唯一一項正向聲明是結構性的:開啟儲存後的檔案,逐頁瀏覽,確認每個頁面字典上的 Annots 陣列都是空的。將這個結構性檢查與上方驗證流程中的互動式點擊測試結合起來,該作業就算是依工具所承諾遵循的規則正確執行。當這兩項檢查結果一致時,儲存後的副本就是該使用的版本——請將原始檔案與它並存保留,以作為稽核軌跡。

如果你正在權衡各種選項,移除 PDF 密碼以便列印對此有詳細說明。