如果 PDF 看起來正確,但貼在純文字編輯器中會產生不同的字符,請在更改字體或運行 OCR 之前檢查原因。頁面上繪製的形狀與其代表的字元之間的映射可能是錯誤的。修正這些 PDF 文字錯誤首先要確定流程的哪一部分失敗了。
為什麼文字看起來正確但複製錯誤?
PDF 文字內容可以儲存特定於字體的原始字元程式碼而不是 Unicode 文字。 PDF 讀取器使用字體和編碼資訊來定位和繪製字形。複製還需要將這些程式碼翻譯成有意義的字元。
因此,繪製字母 A 並不能保證提取將返回 A。 ToUnicode 是字體字典中的映射,它將 PDF 原始字元代碼與 Unicode 字元序列關聯起來。 Adobe PDF 參考,第 5.9 節 中描述了顯示和提取文字之間的差異。

字體映射實際上意味著什麼?
這三個概念是相關的,但不能互換:
| 測繪 | 主要角色 |
|---|---|
字型檔內的 cmap 表 | 將字元代碼對應到字形索引;Unicode子表使用Unicode代碼 |
| PDF 編碼;複合字體可以使用 Encoding CMap | 解釋 PDF 原始字元程式碼並協助定位要繪製的字形 |
PDF ToUnicode | 將 PDF 原始字元代碼對應到 Unicode 文字以進行複製和提取 |
第一種,請參見OpenType cmap 規格。這裡討論的修復針對的是第三個;它不會重建字體檔案或替換頁面上的字形。
缺少的 ToUnicode 映射並不總是會導致亂碼文字。 PDF 閱讀器有時可以從標準編碼、已知字形名稱或字元集合中恢復文字。相反,映射表可能存在但仍包含不正確的關聯。
首先檢查是否為映射問題
將一小段內容複製到純文字編輯器中,並將其與原始頁面進行比較:
| 症狀 | 首先要檢查什麼 |
|---|---|
| 頁面看起來正確,但複製的字符始終會變成其他字符 | 字元映射缺失或不正確 |
| 您只能選擇圖像,不能選擇文字 | 缺少文字圖層或文字轉換為輪廓;考慮原始檔案或OCR |
| 可以在掃描頁面上選擇文本,但它與圖像不匹配 | OCR文本圖層的辨識結果 |
| 單一字元是正確的,但列或表順序混亂 | 閱讀順序和佈局提取 |
| 頁面本身包含缺少的字元或框 | 字體資源、字形覆蓋範圍或顯示編碼 |
這些是故障排除線索,而不是僅根據外觀進行診斷。字體嵌入和正確複製也是不同的問題;參見 PDF 字體嵌入和子集。
如何使用原始字形更正複製的文字?
假設特定字體的原始碼 <0001> 繪製了 A,但錯誤地對應到 错 (U+9519)。這是一個說明性映射片段,而不是完整的 CMap 檔案:
Before: <0001> <9519>
After: <0001> <0041>
<0001> 是該字體的 PDF 原始碼,而不是 Unicode 字元 U+0001。將其對應到 U+0041 指定該字形表示 A。 ligature(共享一個字形的多個字母)可能還需要映射到多個 Unicode 字符,例如 fi。
一旦確認映射修復合適,請使用 PDF 文字修復工具:
- 選擇PDF,然後選擇要修正的字體。
- 比較網格中的原始字形,並在每個字形下方輸入正確的文字。
- 匯出修復後的PDF並保留原件以供對比。
**更改適用於使用相同字體和原始程式碼的所有地方。**單獨檢查不同的字體,即使它們的名稱相符。如果 OCR 僅錯誤識別了一個單詞,則全域重新映射字元也可能會損壞已經正確的文字。
如何驗證修復情況?
重新開啟已匯出的文件,然後在目標 PDF 閱讀器中複製並蒐索範例文字。檢查您未編輯的相同程式碼和字體的其他出現情況。比較頁面外觀並檢查標點符號、連字和數字,而不是只測試第一個不正確的字元。
某些 PDF 還使用 ActualText 來提供替換文本,支援軟體可能更喜歡這種方式。如果更改 ToUnicode 無法解決問題,請檢查此覆蓋。目前工具會發出有關 ActualText 的警告,但不會對其進行編輯。請參閱 PDF 關聯說明。
對於OCR錯誤,請重新修正或辨識文字圖層。如果您有原始佈局文件,請考慮對其進行更正並匯出新的 PDF。無法開啟或觸發結構錯誤的檔案需要不同的方法;請參閱 當PDF格式修復合適時。
一旦發現字體字元映射問題,請使用 本地PDF文字修復工具 修正它。文件將在您的瀏覽器中進行處理,而無需上傳。匯出後您仍應驗證複製的文字和頁面外觀。


