可搜索PDF中非拉丁文字的乱码问题

This article was translated from English: Does it need improvement?
Translated
View the article in English

使用IronOCR识别文档,将其保存为可搜索的PDF时,识别的文本在屏幕上看起来正确,但在复制或提取时可能会变为乱码。 这发生在PDF的字体中没有您识别脚本的字形时,通常发生在非拉丁和复杂脚本上。解决方法是使用支持您的脚本的字体保存PDF; 下面的例子使用了古吉拉特文。

识别的文本没有匹配的字符映射,所以即使OCR正确读取了页面,复制的文本仍然是乱码。 仅限拉丁文字的字体无法解决此问题:您提供的字体必须覆盖您实际识别的脚本。

前提条件

  • 对应您脚本的IronOCR语言包。 此示例使用OcrLanguage.GujaratiBest
  • 支持您目标脚本的TrueType字体。 此示例使用AnekGujarati,可从Google Fonts免费下载。
  • 该字体的完整文件路径。

请注意需IronOCR版本2026.3.3或更高。

解决方案

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")
$vbLabelText   $csharpLabel

解决乱码提取的参数是第3个参数:字体文件,必须包含您OCR的脚本字形。 第4个参数仅仅是嵌入字体的名称,不影响脚本映射。 针对不同的文档,将第3个参数指向支持该脚本的字体。

3. 确认文本提取

打开生成的PDF并复制识别的文本以验证现在可以正确提取。 如果仍然显示乱码,几乎可以肯定提供的字体缺少您脚本的字形; 重新检查字体是否确实覆盖了它。

注意事项

  • 不限于古吉拉特文:任何非拉丁或复杂的脚本在PDF字体不覆盖时都可能显示乱码的复制文本,包括天城文(印地语、马拉地语)、阿拉伯语、泰语以及中文、日文或韩文文本。
  • 每种脚本一个字体:提供包含您识别脚本的字体。 来自Google的Noto字体家族是一个广泛的选项,拥有每种脚本的字体,如Noto Sans Gujarati、Noto Sans Devanagari和Noto Sans Arabic。
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 6,175,195 | 版本: 2026.7 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronOcr
运行示例 观看您的图像变成可搜索文本。