IronOCR 和 Dynamsoft OCR 之间的比较
Microsoft Office 文档影像 (MODI) 曾经是 MS Office 2003 和 2007 中捆绑的首选 OCR 组件,使开发人员能够通过基于 COM 的对象模型直接从扫描图像中提取文本。 多年来,MODI.Document 类为无数文档数字化项目提供了支持,在 Visual Studio 解决方案中将 TIFF 和 BMP 图像文件转换为机器可读文本。
然而,MODI 的问题在于:微软已将其从 Office 2010 及更高版本中移除,导致开发者不得不依赖过时的 Office 版本或独立安装程序来维持其 OCR 功能。对于任何面向跨平台部署、云环境或最新 Windows 版本的现代.NET项目而言,MODI 都带来了严重的阻碍。
本文从代码实现、功能、平台支持和许可等方面,探讨了 OCR模式 C# 与IronOCR(一个专门构建的.NET光学字符识别库)的比较情况。 无论是维护旧代码还是启动新项目,这里的详细信息都将有助于做出正确的选择。
免费试用IronOCR 30 天,并可参考以下代码示例。
对比结果一目了然?
| 翻译类别 | OCR模式 | IronOCR |
|---|---|---|
| 核心架构 | COM 互操作;需要 Microsoft Office 文档影像 DLL 引用 | 纯.NET库; Tesseract 5 引擎针对 C# 进行了优化 |
| 平台支持 | 仅限Windows系统; 需要电脑上安装 Office 2003/2007。 | Windows、Linux、macOS、Azure、Docker、iOS、Android |
| 图像格式 | TIFF、MDI、BMP | TIFF、PNG、JPEG、BMP、GIF、PDF、多页图像 |
| 语言支持 | 通过 miLANG 参数约 22 种语言 | 通过NuGet语言包支持 125 多种语言 |
| OCR准确率 | 大量使用干净、标准字体的文档 | 自动图像校正滤镜的准确率超过 99.8% |
| 输出选项 | 来自布局对象的纯文本 | 纯文本、可搜索的 PDF、结构化数据(页码、行数、单词数、条形码) |
| 安装 | Office 安装程序 + 解决方案资源管理器中的 COM 参考 | NuGet 包: Install-Package IronOcr |
| 主动开发 | Office 2007 之后已停用 | 积极维护,定期更新 |
| 许可 | 需要符合条件的 Microsoft Office 许可证 | 永久许可证来自 $999; 免费试用 30 天 |
| 支持 | 仅限社区论坛 | 通过电子邮件、在线聊天和电话提供直接的工程支持 |
How Does Microsoft Office Document Imaging Perform OCR in C#?
MODI 通过基于 COM 的对象模型执行光学字符识别 (OCR)。 该过程首先创建一个 MODI.Document 对象,加载图像文件路径,然后调用 OCR 方法来分析图像并识别字符。 OCR 处理完成后,可以通过每个页面的图像和布局对象访问文本和布局信息。
要在 Visual Studio 项目中使用 MODI,必须添加对 Microsoft Office 文档图像类型库的引用。 在解决方案资源管理器中,右键单击"引用"文件夹,选择"COM"选项卡,然后选择相应的 MODI 版本(Office 2003 为 11.0,Office 2007 为 12.0)。
// MODI OCR: Extracting text from a scanned TIFF document
private string ExtractTextFromImage(string path)
{
string extractedText = "";
MODI.Document doc = new MODI.Document();
try
{
// Create the document object from the image file path
doc.Create(path);
// Run optical character recognition with English language
doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
// Access the first page image and retrieve recognized text
MODI.Image modiImage = (MODI.Image)doc.Images[0];
extractedText = modiImage.Layout.Text;
}
catch (Exception ex)
{
// Handle OCR exceptions for unsupported or corrupted image files
string message = ex.Message;
Console.WriteLine(message);
}
finally
{
doc.Close(false);
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
}
return extractedText;
}' MODI OCR: Extracting text from a scanned TIFF document
Private Function ExtractTextFromImage(ByVal path As String) As String
Dim extractedText As String = ""
Dim doc As New MODI.Document()
Try
' Create the document object from the image file path
doc.Create(path)
' Run optical character recognition with English language
doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, True, True)
' Access the first page image and retrieve recognized text
Dim modiImage As MODI.Image = CType(doc.Images(0), MODI.Image)
extractedText = modiImage.Layout.Text
Catch ex As Exception
' Handle OCR exceptions for unsupported or corrupted image files
Dim message As String = ex.Message
Console.WriteLine(message)
Finally
doc.Close(False)
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc)
End Try
Return extractedText
End Function此功能演示了标准的 MODI 工作流程:Create 方法加载文件,OCR 方法使用指定的语言执行识别,Layout.Text 提供提取的字符串。 return extractedText 语句将输出传递给调用者。
虽然 MODI 能够为清晰、高分辨率的文档图像提供相当不错的精度,但它也存在明显的局限性。 它仅支持 TIFF、MDI 和 BMP 格式。 它要求运行该应用程序的每台计算机(包括生产服务器)都必须安装 Microsoft Office。 MODI 本身不具备扫描低质量图像、校正图像倾斜或降低数字噪声的功能。此外,由于 MODI 依赖于 COM 互操作,因此无法在.NET Core、 .NET 5+ 或任何跨平台场景中使用,这使其不适用于 Docker 容器或 Azure 应用服务等现代部署目标。
现代.NET库如何处理 OCR 功能?
IronOCR使用纯.NET API取代了 COM 互操作方法,该 API 可通过单个NuGet包进行安装。 IronTesseract 类封装了一个经过高度优化的 Tesseract 5 引擎,OcrInput 类处理图像加载、预处理和多格式支持,所有这些都不需要 Microsoft Office 或目标计算机上的任何外部依赖项。
using IronOcr;
// Create the IronTesseract OCR engine object
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load images in any common format — PNG, JPEG, TIFF, BMP, GIF, or PDF
input.LoadImage("scanned-document.tiff");
// Apply filters to correct low-quality scans automatically
input.Deskew(); // Straighten skewed page images
input.DeNoise(); // Remove digital noise from scanning artifacts
// Read text from the processed document
var result = ocr.Read(input);
// Output plain text
Console.WriteLine(result.Text);
// Save as a searchable PDF for document management system integration
result.SaveAsSearchablePdf("output-searchable.pdf");Imports IronOcr
' Create the IronTesseract OCR engine object
Dim ocr As New IronTesseract()
Using input As New OcrInput()
' Load images in any common format — PNG, JPEG, TIFF, BMP, GIF, or PDF
input.LoadImage("scanned-document.tiff")
' Apply filters to correct low-quality scans automatically
input.Deskew() ' Straighten skewed page images
input.DeNoise() ' Remove digital noise from scanning artifacts
' Read text from the processed document
Dim result = ocr.Read(input)
' Output plain text
Console.WriteLine(result.Text)
' Save as a searchable PDF for document management system integration
result.SaveAsSearchablePdf("output-searchable.pdf")
End UsingIronOCR输出

上面的代码展示了IronOCR如何仅用几行代码就完成 TIFF 扫描文件的 OCR 流程。 OcrInput 对象几乎可以接受任何图像文件或 PDF 文档,而 Deskew() 和 DeNoise() 可以纠正常见的扫描瑕疵,这些瑕疵会导致 MODI 产生较差的结果。 Read 方法返回一个 OcrResult 对象,其中不仅包含纯文本,还包含按页、段落、行和单词组织的结构化数据,每个部分都包含置信度分数和坐标信息。
对于处理发票、表格或多页 TIFF 文件的项目, IronOCR还包含计算机视觉功能,可自动定位文本区域,在同一次扫描中读取条形码和二维码,并支持125 多种语言,这些语言可以作为NuGet包安装。
从图像中提取文本有哪些主要区别?
当你不再使用"完美"的示例文件而开始处理真实世界的文档时,这两种选择之间的真正差距就会显现出来。 我们说的是那些扫描质量很差的文件,上面有咖啡渍、页面倾斜,或者用智能手机拍摄的低分辨率照片。
MODI是为不同的时代而设计的,专门用于清晰、高对比度的办公文档。 如果你用高端扫描仪扫描出清晰的TIFF文件,MODI就能很好地完成任务。但如果你的图像哪怕只有轻微的旋转,或者存在一些数字"噪点",MODI的精度就会急剧下降。 由于它没有任何内置过滤器来解决这些问题,因此在开始 OCR 过程之前,您只能使用 GDI+ 或 System.Drawing 等第二个库自行预处理图像。 管理内存也有些麻烦; 如果您不手动调用 Marshal.ReleaseComObject,则很可能在生产环境中遇到内存泄漏问题。
IronOCR即用,就能帮你轻松搞定这些繁重的工作。 无需编写自定义代码来清理图像,只需调用 input.Deskew() 或 input.DeNoise() 即可。 这些滤镜可以对图像进行预处理,使引擎即使处理"丑陋"的文档也能达到99.8% 的准确率。
**专业提示:**如果您要从 MODI 迁移,不要只是替换代码,还要利用布局数据。 与 MODI 不同,MODI 主要提供一大块文本,而IronOCR则将文本分解成段落和行,并给出置信度评分。 如果你正在构建一个自动化发票处理系统,并且需要标记可能需要人工审核的文档,那么这个功能简直是救星。
值得一提的是, IronOCR可以将多页 TIFF 和 PDF 文件作为一个对象进行处理。 您不必像使用旧的 MODI.Images 集合那样手动遍历图像。 它速度更快、更清洁,而且说实话,也更不容易损坏。
开发人员如何从传统方法迁移?
在现有项目中替换 MODI 非常简单。 核心迁移包括将 COM 引用替换为NuGet包并更新 OCR 方法调用。 以下是 MODI 模式与其现代对应模式的对应关系:
using IronOcr;
// Replace: MODI.Document doc = new MODI.Document();
var ocr = new IronTesseract();
// Replace: doc.Create(filePath); with OcrInput
using var input = new OcrInput();
input.LoadImage("document.tiff"); // Accepts the same TIFF files MODI used
// Replace: doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
ocr.Language = OcrLanguage.English;
// Replace: modiImage.Layout.Text
var result = ocr.Read(input);
string text = result.Text;
Console.WriteLine(text);Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("document.tiff") ' Accepts the same TIFF files MODI used
ocr.Language = OcrLanguage.English
Dim result = ocr.Read(input)
Dim text As String = result.Text
Console.WriteLine(text)
End Using映射几乎是一对一的:MODI.Document.Create 变为 OcrInput.LoadImage,带有语言参数的 OCR 方法变为 ocr.LanguagePlusocr.Read,Layout.Text 变为 result.Text。 没有 COM 引用,没有 Office 依赖,无需手动使用 Marshal.ReleaseComObject 管理内存。
除了直接替换之外,迁移还解锁了 MODI 中根本不存在的功能:跨平台部署到 Linux 和 macOS、云和容器部署、可搜索的 PDF 输出,以及具有自定义字体训练功能的完整 Tesseract 5 引擎。
哪种解决方案最符合现代 OCR 需求?
在微软Office是每台Windows电脑的标配软件的时代,MODI发挥了它的作用。 对于维护已依赖 Office 2003 或 2007 的旧系统的团队来说,它可能仍然可以运行,但这代表着对已停产软件的脆弱依赖,而且没有前进的方向。
对于任何新项目或面临现代化改造的遗留系统, IronOCR都能提供完整、积极维护的解决方案。 它完全消除了对 Office 的依赖,可在所有主流平台上运行,能够处理旧方法难以处理的低质量图像,并提供远超纯文本的结构化 OCR 输出。 凭借广泛的文档,直接工程支持,以及来自 $999 的永久授权,它为大规模生产级文档处理而构建。
准备好在生产环境中部署OCR了吗? 了解IronOCR 的许可选项,找到最适合您团队的方案。
