IronOCR 和 Dynamsoft OCR 之間的比較
Microsoft Office Document Imaging (MODI) 曾是 MS Office 2003 和 2007 的一個熱門 OCR 元件,使開發者能夠通過基於COM的物件模型直接從掃描影像中提取文字。 多年來,MODI.Document 類驅動了無數文件數位化專案,將 TIFF 和 BMP 圖片文件轉換為 Visual Studio 解決方案中的機器可讀文字。
然而,MODI 的故事有一個重大問題:Microsoft 已經在 Office 2010 及後續版本中將其移除,使開發者依賴於過時的 Office 安裝或獨立安裝程式才能維持其 OCR 功能。對於任何現代 .NET 專案進行跨平台部署、雲端環境或最新 Windows 版本,MODI 帶來了嚴重的摩擦。
本文探討了MODI OCRC# 與專門為 .NET 構建的光學字元識別程式庫IronOCR 在程式碼實現、功能、平臺支持和許可方面的比較。 無論是維護舊有程式碼還是開始新專案,這裡的詳細資訊將幫助您做出正確的選擇。
免費試用IronOCR 30天,以便參與下方程式碼範例。
快速瀏覽比較結果如何分解?
| 類別 | MODI OCR | IronOCR |
|---|---|---|
| 核心架構 | COM 互操作;需要 Microsoft Office Document Imaging DLL 參考 | 純 .NET 程式庫; 針對 C# 優化的 Tesseract 5 引擎 |
| 平台支持 | 僅支持 Windows; 需要在電腦上安裝 Office 2003/2007 | Windows、Linux、macOS、Azure、Docker、iOS、Android |
| 圖片格式 | TIFF、MDI、BMP | TIFF、PNG、JPEG、BMP、GIF、PDF、多頁圖片 |
| 語言支持 | ~22 種語言通過 miLANG 參數 | 通過 NuGet 語言包支持 125 多種語言 |
| OCR 準確性 | 在乾淨的標準字體文件上效果良好 | 99.8%+ 且自動影像校正濾镜 |
| 輸出選項 | 來自 Layout 物件的純文字 | 純文字、可搜尋 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 Document Imaging 型別庫的參考。 在解決方案資源管理器中,右鍵點擊引用文件夾,選擇 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 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 依賴 COM 互操作,它不能在 .NET Core、.NET 5+ 或任何跨平台場景中使用,這使得它不適合現代部署目標,如 Docker 容器或 Azure App Services。
現代 .NET 程式庫如何處理 OCR 功能?
IronOCR 用 純 .NET API 取代了 COM 互操作方法,通過單一的 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");
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 Using
IronOCR輸出

上述程式碼顯示了IronOCR通過完整 OCR 管道處理 TIFF 掃描,只需幾行程式碼。 OcrInput 物件可接受幾乎所有圖片文件或 PDF 文件,而 Deskew() 和 DeNoise() 校正常見掃描僞影,這些可能導致 MODI 產生不良結果。 Read 方法返回一個 OcrResult 物件,其中包含不限於純文字,還包含按頁、段落、行和單詞組織的結構化資料,每個都有信心分數和坐標資訊。
對於處理發票、表單或多頁 TIFF 文件的專案,IronOCR 也包括 電腦視覺功能,能自動定位文字區域,同時讀取條碼和 QR 碼,並支持 125 多種語言,可以作為 NuGet 套件安裝。
從圖片提取文字時的主要區別是什麼?
一旦您停止使用"完美"樣本文件並開始處理現實世界中的文件,這兩個選擇的真正差距就顯現出來。 我們談論的是那些亂七八糟的掃描,有咖啡污漬、傾斜的頁面,或者來自智慧手機的低解析度照片。
MODI 為不同的時代而構建,專注於乾淨、高反差的辦公文件。 如果您有一個來自高端掃描儀的清晰 TIFF 文件,它的表現不錯。但如果您的影像稍有旋轉或有一些數字"噪音",MODI 的準確性就會大幅下降。 由於它沒有內建的過濾器來修復這些問題,您需要在進行 OCR 前使用 GDI+ 或 System.Drawing 等其他程式庫來預處理影像。 管理記憶體也有點麻煩; 如果您不手動調用 Marshal.ReleaseComObject,可能會在生產中遇到記憶體洩漏。
IronOCR 幫您輕鬆完成這些任務。 與其撰寫自定義程式碼來清理圖片,不如直接調用 input.Deskew() 或 input.DeNoise()。 這些濾鏡讓引擎即使在"醜陋"的文件中也能達到99.8%的準確度。
專業提示:如果您從 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);
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.Language 加上 ocr.Read,而 Layout.Text 則轉為 result.Text。 沒有 COM 參考,沒有 Office 依賴,無需手動管理記憶體的 Marshal.ReleaseComObject。
除直接替換外,遷移還解鎖了 MODI 中根本不存在的功能:跨平台部署到 Linux 和 macOS,雲和容器部署,可搜尋的 PDF 輸出,和完全的 Tesseract 5 引擎以及 自定義字體訓練 功能。
哪個解決方案最適合現代 OCR 需求?
MODI 在 Microsoft Office 是每台 Windows 電腦的標準裝置時代發揮了其作用。 對於仍然依賴於 Office 2003 或 2007 的舊系統的團隊來說,它可能仍然有效,但這是對已經停止更新的軟體的脆弱依賴,沒有任何出路。
對於任何新專案,或任何面臨現代化的舊系統,IronOCR 提供了一個完整、正在積極維護的解決方案。 它完全消除了 Office 的依賴,運行於所有主要平台,能處理舊方法難以應付的低質量影像,並能提供超越純文字的結構化 OCR 輸出。 擁有豐富的文件、直接的工程支持,以及從 $999 提供的永久授權,專為生產級別的文件處理而打造。
準備好在生產中部署 OCR 嗎? 探索IronOCR授權選項,為您的團隊找到合適的方案。
常見問題
什麼是Microsoft Office文件影像(MODI)?
Microsoft Office Document Imaging(MODI)是包含在MS Office 2003和2007中的OCR元件。它允許開發者使用基於COM的物件模型從圖片中提取文字。
為什麼我應該考慮使用IronOCR而不是MODI?
IronOCR提供了一個現代、完整支持的OCR程式庫,具有增強的功能、更高的準確性,並與.NET應用程式有更好的整合,與舊版MODI元件相比。
IronOCR能處理TIFF和BMP圖片文件嗎?
是的,IronOCR可以處理並從各種圖片格式中提取文字,包括TIFF和BMP,提供不同文件數位化需求的靈活性。
從MODI移轉到IronOCR的好處是什麼?
移轉到IronOCR提供了更先進的OCR能力、定期更新和積極支持,確保您的OCR項目具有前景保障。
IronOCR與Visual Studio相容嗎?
是的,IronOCR與Visual Studio完全相容,允許在.NET專案中無縫整合。
IronOCR的精確度與MODI相比如何?
IronOCR設計為在文字辨識中提供更高的精確度,特別是在現代圖片格式和複雜文件方面,相較於舊版MODI技術。
IronOCR為開發者提供了什麼樣的支持?
IronOCR提供全面的文件、程式碼範例和專業支持,以協助開發者將OCR功能整合到他們的應用程式中。
IronOCR有提供程式碼範例嗎?
是的,IronOCR提供各種程式碼範例,幫助開發者迅速在他們的.NET應用程式中實施OCR。
IronOCR能用於即時文字提取嗎?
IronOCR能夠進行即時文字提取,使其適用於需要立即處理掃描圖片或文件的應用程式。
IronOCR是否支持多語言文字辨識?
是的,IronOCR支持多語言文字辨識,允許以高精確度處理各種語言的文件。

