可搜索PDF中非拉丁文字的乱码问题
使用IronOCR识别文档,将其保存为可搜索的PDF时,识别的文本在屏幕上看起来正确,但在复制或提取时可能会变为乱码。 这发生在PDF的字体中没有您识别脚本的字形时,通常发生在非拉丁和复杂脚本上。解决方法是使用支持您的脚本的字体保存PDF; 下面的例子使用了古吉拉特文。
识别的文本没有匹配的字符映射,所以即使OCR正确读取了页面,复制的文本仍然是乱码。 仅限拉丁文字的字体无法解决此问题:您提供的字体必须覆盖您实际识别的脚本。
前提条件
- 对应您脚本的IronOCR语言包。 此示例使用
OcrLanguage.GujaratiBest。 - 支持您目标脚本的TrueType字体。 此示例使用AnekGujarati,可从Google Fonts免费下载。
- 该字体的完整文件路径。
解决方案
1. 放置一个覆盖您脚本的字体
找到一个包含您目标脚本字形的字体,放置在计算机上,并记录其完整路径。 对于古吉拉特文的例子:
C:\Path\To\AnekGujarati-VariableFont_wdth,wght.ttf
AnekGujarati变量字体的文件名中包含逗号,所以要准确复制。 路径必须指向确切的字体文件。
2. 将字体传递给SaveAsSearchablePdf
在保存可搜索PDF时,将您的脚本支持字体的路径作为CustomFontFile(第3个)参数提供。 第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")
解决乱码提取的参数是第3个参数:字体文件,必须包含您OCR的脚本字形。 第4个参数仅仅是嵌入字体的名称,不影响脚本映射。 针对不同的文档,将第3个参数指向支持该脚本的字体。
3. 确认文本提取
打开生成的PDF并复制识别的文本以验证现在可以正确提取。 如果仍然显示乱码,几乎可以肯定提供的字体缺少您脚本的字形; 重新检查字体是否确实覆盖了它。
注意事项
- 不限于古吉拉特文:任何非拉丁或复杂的脚本在PDF字体不覆盖时都可能显示乱码的复制文本,包括天城文(印地语、马拉地语)、阿拉伯语、泰语以及中文、日文或韩文文本。
- 每种脚本一个字体:提供包含您识别脚本的字体。 来自Google的Noto字体家族是一个广泛的选项,拥有每种脚本的字体,如Noto Sans Gujarati、Noto Sans Devanagari和Noto Sans Arabic。

