可搜尋PDF中的亂碼;非拉丁字母表的問題
使用IronOCR進行文件OCR處理,將其保存為可搜尋的PDF,螢幕上顯示辨識的文字可能正確,但當您複製或提取時會變成亂碼。 這種情況發生在PDF的字型對您辨識的文字沒有字元時,這在非拉丁字母和複雜的文字中很常見。解決辦法是使用支援您文字的字型保存PDF; 如下範例使用的是古吉拉特文。
辨識後的文字沒有匹配的字元可以映射,所以即使OCR正確地讀取了該頁面,複製出來的文字仍然是亂碼。 僅用拉丁字母的字型無法解決這個問題;您提供的字型必須覆蓋到您實際識別的文字。
先決條件
- 使用IronOCR以及您的文字所需的語言包。 此範例使用
OcrLanguage.GujaratiBest。 - 支援您的目標文字的TrueType字型。 這個例子使用的是Google Fonts上免費提供的AnekGujarati。
- 字型的完整檔案路徑。
解決方案
1. 放置覆蓋您文字的字型
尋找包含您目標文字的字型,放在機器上,並記下其完整路徑。 對於古吉拉特文的例子:
C:\Path\To\AnekGujarati-VariableFont_wdth,wght.ttf
AnekGujarati可變字型的檔名包含逗號,所以請準確地複製它。 路徑必須指向精確的字型檔案。
2. 傳遞字型給SaveAsSearchablePdf
當保存可搜尋PDF時,提供可以支援您文字的字型路徑作為CustomFontFile(第三個)參數。 第4個參數是一個可選的CustomFontName標籤; 如果您省略它,IronOCR將使用字型檔案本身的名稱:
ocrResult.SaveAsSearchablePdf(
strOutputFile,
false,
@"C:\Path\To\AnekGujarati-VariableFont_wdth,wght.ttf",
"AnekGujarati");
ocrResult.SaveAsSearchablePdf(
strOutputFile,
false,
@"C:\Path\To\AnekGujarati-VariableFont_wdth,wght.ttf",
"AnekGujarati");
ocrResult.SaveAsSearchablePdf( _
strOutputFile, _
False, _
"C:\Path\To\AnekGujarati-VariableFont_wdth,wght.ttf", _
"AnekGujarati")
解決亂碼抽取的參數是字型檔案(第三個參數):必須包含您進行OCR讀取的文字字元。 第4個參數僅是嵌入字型的名稱,並不影響字型映射。 對於不同的文件,指向第三個參數到支援該文字的字型。
3. 確認文字提取
開啟生成的PDF並複製辨識的文字,以確認其現在可以正確提取。 如果它仍然顯示為亂碼,則您提供的字型幾乎可以確定缺少該文字的字元; 重新檢查字型是否真正覆蓋到該文字。
筆記
- 不僅限於古吉拉特文: 任何非拉丁或複雜的文字在PDF字型沒有覆蓋時都可能顯示亂碼,包括梵文(印地語、馬拉地語)、阿拉伯語、泰語, 以及中、日、韓文。
- 每個文字一個字型:提供包含您識別文字的字型。 Google的Noto字型家族是一個廣泛的選擇,包括如Noto Sans Gujarati、Noto Sans Devanagari和Noto Sans Arabic等按文字分類的字型。

