PDF 註解是儲存在每個頁面 Annots 陣列中的互動物件,而不是你在螢幕上看到的繪製標記,所以在移除註解後看起來錯誤的結果,幾乎總是代表你想移除的可見元素其實已經被扁平化到頁面內容串流中,而不是以互動覆蓋層的形式存在。移除 Annots 鍵會刪除附加在頁面上的可點擊區域、註解彈出視窗、表單小工具或標記物件,但它刻意保留任何已經繪製到頁面本身的文字、線條、形狀或影像。正確的修正是先辨識哪些可見元素屬於哪一類,然後以正確的預期重新執行該操作、將殘留的圖案視為文件的一部分來處理,或是改用其他能直接處理繪製內容的工具。本文將逐步說明結果看起來錯誤的結構性原因、工具實際套用的狹隘規則、一步步的復原路徑,以及完全不該使用註解移除功能的各種情境。

為什麼移除 PDF 註解後結果看起來錯誤
大多數讀者是因為在下載的 PDF 中看到一些意外的內容才來到這裡。三個結構性事實可以解釋幾乎所有可見的意外結果。首先,註解儲存在每個頁面字典中一個稱為 Annots 的獨立字典鍵中,而你在螢幕上看到的標記則來自不同的串流——頁面內容串流——它將文字、形狀和影像繪製成一般圖形。其次,當先前的編輯者將註解扁平化時,原本的外觀會被轉換成一般的頁面內容,而該註解物件通常會被移除或設為不可見。第三,移除 Annots 陣列只會刪除互動覆蓋層,不會動到下方的繪製內容,所以任何已經被扁平化的內容都會保留下來。這代表看起來錯誤的結果很少是 bug,而是對一個可見內容並非完全由註解驅動的 PDF 套用狹隘結構操作後的預期結果。
這個區分很重要,因為 PDF 會在許多編輯器、檢視器和匯出流程之間流通。在桌面編輯器中加入並以標記形式儲存的螢游標記仍然是註解;同一個螢游標記經過「列印為 PDF」流程後會變成頁面圖案的一部分,再也無法透過編輯註解陣列來移除。輸入的表單值可能落在任一邊:在表單為互動狀態時,它是欄位外觀;當文件被密封、簽署或匯出時,它可能會被扁平化到頁面中。同樣的邏輯也適用於簽章、戳記、便利貼和檔案附件,這就是為什麼移除後的結果經常讓預期註解與繪製標記會有相同行為的人感到意外。
移除註解後常見的可見結果
下表將最常見的「看起來錯誤」投訴,與工具實際產生的可見結果以及背後的結構性原因配對起來。在決定下一步該怎麼做之前,先用它來篩選下載的檔案,因為每個情境的正確處理方式都不同。
| 你預期會消失的內容 | 移除註解後保留下來的內容 | 為什麼會保留下來 |
|---|---|---|
| 藍色加底線的連結文字 | 文字與底線保留;可點擊區域消失 | 連結註解被刪除,但繪製的文字與底線屬於頁面內容串流的一部分 |
| 句子上方的黃色螢游標記 | 螢游標記矩形保留;任何註解彈出視窗會被移除 | 螢游標記在移除前已被扁平化到內容串流中,通常是先前的匯出作業所致 |
| 頁面上的簽章影像 | 簽章繪圖保留 | 簽章已被扁平化或以戳記外觀形式渲染到頁面圖案中 |
| 表單欄位中輸入的值 | 輸入的文字保留;可編輯欄位會被移除 | 表單小工具註解被移除,但可見的值已繪製到頁面內容中 |
| 帶有註解的彈出視窗 | 彈出視窗消失;任何下方的底線或螢游標記保留 | 該註解是文字註解;下方的標記是獨立被扁平化的 |
| 可點擊的按鈕或核取方塊 | 按鈕圖案保留;互動小工具會被移除 | 視覺按鈕是內容串流的一部分;只有互動小工具才是註解 |
工具實際會移除的內容(以及會保留的內容)
移除 PDF 註解遵循一條可稽核的單一規則:它會從本機 PDF 每個頁面字典中刪除 Annots 鍵,然後重新序列化文件以供下載。頁數、頁面順序、頁面方塊、旋轉設定和內容串流都保持不變。工具會計算註解項目數量,並在提供下載前回報有多少頁面至少包含一個項目;若計數為零,它會拒絕產生一個無用的替換檔案。PDF 的載入、檢查、修改和下載建立全部在瀏覽器中完成,因此文件永遠不會被上傳。
由於此操作範圍狹窄,唯一保證會改變的就是互動覆蓋層。下載檔案的名稱會加上 -annotations-removed 這個後綴,確保原始檔案永遠不會被覆寫;選擇不同的檔案會清除所有先前的檢查狀態。實作是建構在開源的 pdf-lib PDFDocument API 上,它在不需要伺服器往返的情況下處理本機載入、修改和儲存循環。關於註解模型本身的背景資訊,PDF Association 的註解總覽說明了連結、文字和小工具物件如何與其所在的頁面字典關聯,在下載檔案未如預期運作時,這是很有用的參考脈絡。
如何一步步修正看起來錯誤的結果
一旦工具套用的規則清楚了,復原就是一小組診斷動作。最快的路徑是先確認哪些東西保留下來、將每個殘留的標記分類為「仍然互動」或「已經繪製」,然後決定要保留它、先將原始檔扁平化、或是改用其他能直接處理繪製內容的工具。將這個操作視為針對 Annots 鍵的單一用途清理,而不是通用的內容清除工具,那麼移除後的行為就會變得可預測。
- 在你實際會使用的檢視器中開啟下載的 PDF,並列出所有看起來仍然錯誤的可見元素。
- 針對每個項目,判斷它仍然由註解控制(互動),還是已經繪製到頁面中(靜態)。一個不再導航的可點擊區域是註解被移除的跡象;看起來像一般圖案的可選取文字或彩色形狀,則代表該元素現在已成為頁面內容的一部分。
- 如果該項目仍然是漏掉的註解,請在原始檔上重新執行該工具,並檢查回報的註解計數以確認該項目在移除前確實存在於文件中。
- 如果該項目已經繪製到頁面中,請決定要將其作為文件的一部分保留、裁切頁面以移除圖案,或是改用其他能針對繪製內容(例如影像或形狀)進行處理的工具。
- 如果殘留的圖案是扁平的表單值或簽章,而你希望刻意保留它,請先在原始文件上執行 PDF 扁平化,讓可見狀態變成刻意而非偶然,然後在扁平化後的副本上重新執行註解移除。
- 在目標檢視器中再次開啟最終下載的檔案,確認可見外觀與互動行為都符合你的目標後,再分享這個 PDF。
註解與繪製內容的快速比較
這兩類的行為差異極大,因此值得並列說明。註解物件是儲存在頁面 Annots 陣列中的互動項目;繪製標記則是繪製到頁面內容串流中的普通圖形。工具只會觸及第一類,所以第二類的任何東西無論看起來多麼像註解、螢游標記或填入的欄位,都會在操作後保留下來。在篩選下載的檔案時,可以參考這份對照表。
| 屬性 | 註解(Annots 陣列) | 繪製頁面內容(內容串流) |
|---|---|---|
| 儲存位置 | 頁面字典的 Annots 鍵 | 頁面內容串流,以圖形運算子表示 |
| 範例 | 連結區域、文字註解、彈出視窗、戳記、檔案附件、表單小工具 | 加底線的文字、扁平的螢游標記、繪製的簽章、繪製的欄位值、裝飾性形狀 |
| 互動行為 | 可點擊、可編輯、帶有彈出視窗 | 靜態;表現如一般圖案 |
| 是否受工具影響 | 是——會從每個頁面字典中刪除該項目 | 否——內容串流會原封不動地保留 |
| 移除後的效果 | 互動覆蓋層消失;物件參照一併消失 | 視覺或結構上都不會改變 |
| 為何在移除後仍然可能出現 | 極少;僅在檢視器快取物件時 | 常見;這就是典型的「看起來錯誤」結果 |
什麼時候註解移除不是正確的工具
移除頁面註解陣列是一個範圍狹窄的結構性操作。它不是資訊安全遮蔽或淨化產品,也無法證明機密文字、元資料、嵌入檔案、指令碼、隱藏圖層或可還原的來源資訊已從檔案的每個位元組中清除。如果目的是在公開分享文件之前永久隱藏姓名、帳號、地址或其他敏感字串,你需要一個專門打造的遮蔽工作流程,從底層串流中移除內容並驗證最終檔案。將註解移除用於此目的會是類別錯誤,而且可能會洩露你原本試圖隱藏的資訊。
這個工具也不是表單扁平化工具。它會移除每個表單欄位的互動小工具,但文件目錄中的 AcroForm 定義仍可能包含與表單相關的結構,而且任何已經繪製到頁面上的值仍會保持可見。若要讓填入的值成為永久的頁面內容,同時保持外觀整潔,請先在原始文件上執行 PDF 扁平化,然後再回到註解移除(如果你仍想剝除互動覆蓋層)。對於需要讓表單結構本身保持有效以供後續編輯的工作流程,應該使用專用的表單編輯器,而不是上述任一工具。
最後,這個工具不是修復產品、元資料清理器、惡意程式掃描器或歸檔符合性檢查器。如果輸入檔案已加密、有密碼保護、為空、大於 25 MiB,或交叉參照資料已損毀,工具會顯示明確的錯誤,而不是嘗試繞過保護。密碼保護不會被繞過;選擇不同的檔案會清除先前的狀態,同時任何先前的物件 URL 都會被撤銷,以防止過時的非同步作業取代新的選擇。
Verify the Downloaded PDF Before You Share It
Different PDF viewers render the same underlying structure differently, especially when interactive elements have been removed. Always open the downloaded file in the viewer or workflow that will consume it — a browser, a print driver, an e-reader, or a regulated submission portal — and check each previously affected page for both appearance and behavior. Confirm that text is selectable, that no orphan popup remains, that links no longer navigate, and that anything you expected to stay visible is still visible. For an in-depth walkthrough of this verification routine, see the guide on how to check the result after removing PDF annotations.
For an audit-friendly record of what changed, keep the original PDF alongside the renamed -annotations-removed file so anyone reviewing the operation can compare structures later. If a viewer still shows an interactive artifact that you expected to be gone, the file may be cached — reopen from disk before drawing conclusions, and re-run the tool on a freshly opened original if any uncertainty remains about what the document contained before the operation.
If you're weighing options, Paper Sizes on Android: Look Up Sizes and Pixels covers this in detail.