使用 IRONOCR 如何使用 IronOCR 建立 .NET OCR SDK Kannapat Udonpant 發表日期:9月 29, 2025 Download IronOCR NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 假设您曾经需要从扫描的文档、PDF或图像中提取文本。 在这种情况下,您会知道处理不同的文件格式、多种语言和低质量的扫描有多棘手。 这就是 OCR(光学字符识别)的用武之地,将扫描的图像和文档文件转换为可编辑的文本,并以编程方式进行处理。 在本指南中,我们将探索如何使用IronOCR构建高性能的.NET OCR SDK,向您展示如何执行OCR、提取结构化数据,并为各种文档类型生成可搜索的PDF。您将学习如何处理扫描的PDF、图像和其他文本文件,以快速、可靠并无缝集成到桌面、Web或移动设备上的.NET应用程序中。 IronOCR为何是理想的.NET OCR SDK? 从头开始构建一个OCR库需要数月的开发、图像预处理和广泛的测试。 IronOCR通过提供一个全面的.NET OCR SDK,支持各种格式,并无缝集成到.NET应用程序中,从而消除了这些开销。 该SDK在提供文本识别的重任的同时,还提供了通常仅在企业级解决方案中找到的功能: 在各种文档格式和扫描图像中具有高性能 支持125+种语言和手写文本识别 自适应二值化、字体信息和区域OCR的边界框支持 能够处理扫描的PDF、图像格式和文本块 即时创建可搜索的文档,并带有隐藏的文本层 与原始Tesseract实现不同,IronOCR立即在Windows、Linux、macOS和云平台上运行,支持OCR API、AI辅助识别,并无缝集成,无需额外配置。 開始使用 IronOCR 通过NuGet包管理器安装只需数秒。 运行: Install-Package IronOcr 有关详细的安装说明,请参阅IronOCR文档。 安装完成后,从扫描的文档中提取文本就变得简单明了: using IronOcr; public class OcrService { private readonly IronTesseract _ocr; public OcrService() { _ocr = new IronTesseract(); } public string ExtractText(string imagePath) { using var input = new OcrInput(); input.LoadImage(imagePath); var result = _ocr.Read(input); return result.Text; } } using IronOcr; public class OcrService { private readonly IronTesseract _ocr; public OcrService() { _ocr = new IronTesseract(); } public string ExtractText(string imagePath) { using var input = new OcrInput(); input.LoadImage(imagePath); var result = _ocr.Read(input); return result.Text; } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 此代码创建一个可重用的OCR服务,可以自动处理多种图像格式,包括JPEG、PNG、TIFF和BMP,以及PDF文档和其他文档格式。 为了测试它,我们将通过我们的主类运行它,并使用此示例图像: class Program { static void Main(string[] args) { var ocrService = new OcrService(); string imagePath = "test.png"; // Replace with your image path string extractedText = ocrService.ExtractText(imagePath); Console.WriteLine(extractedText); } } class Program { static void Main(string[] args) { var ocrService = new OcrService(); string imagePath = "test.png"; // Replace with your image path string extractedText = ocrService.ExtractText(imagePath); Console.WriteLine(extractedText); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 輸出 构建核心OCR功能 现实应用程序需要的不仅仅是基本的文本提取。 IronOCR提供全面的文档处理功能: // Async document processing with barcodes public async Task<ProcessedDocument> ProcessDocumentAsync(string filePath) { using var input = new OcrInput(); LoadFile(input, filePath); input.DeNoise(); input.Deskew(); var result = await _ocr.ReadAsync(input); return new ProcessedDocument { Text = result.Text, Confidence = result.Confidence, Barcodes = result.Barcodes.Select(b => b.Value).ToList() }; } // Helper to load image or PDF private void LoadFile(OcrInput input, string filePath) { if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase)) input.LoadPdf(filePath); else input.LoadImage(filePath); } // Model for processed documents with barcodes public class ProcessedDocument { public string Text { get; set; } public double Confidence { get; set; } public List<string> Barcodes { get; set; } } // Async document processing with barcodes public async Task<ProcessedDocument> ProcessDocumentAsync(string filePath) { using var input = new OcrInput(); LoadFile(input, filePath); input.DeNoise(); input.Deskew(); var result = await _ocr.ReadAsync(input); return new ProcessedDocument { Text = result.Text, Confidence = result.Confidence, Barcodes = result.Barcodes.Select(b => b.Value).ToList() }; } // Helper to load image or PDF private void LoadFile(OcrInput input, string filePath) { if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase)) input.LoadPdf(filePath); else input.LoadImage(filePath); } // Model for processed documents with barcodes public class ProcessedDocument { public string Text { get; set; } public double Confidence { get; set; } public List<string> Barcodes { get; set; } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 此实现处理多个文档,应用图像预处理,并从同一文档中提取条形码和文本。 异步模式确保.NET应用程序的高性能。 輸出 通过内置功能提高准确性 IronOCR的预处理能力显著提高了现实文档的识别准确性: // OCR optimized for low-quality images public string ProcessLowQualityDocument(string filePath) { using var input = new OcrInput(); LoadFile(input, filePath); // Preprocessing for low-quality documents input.DeNoise(); input.Deskew(); input.Scale(150); input.Binarize(); input.EnhanceResolution(300); var result = _ocr.Read(input); return result.Text; } // OCR optimized for low-quality images public string ProcessLowQualityDocument(string filePath) { using var input = new OcrInput(); LoadFile(input, filePath); // Preprocessing for low-quality documents input.DeNoise(); input.Deskew(); input.Scale(150); input.Binarize(); input.EnhanceResolution(300); var result = _ocr.Read(input); return result.Text; } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 每个滤镜都针对文档质量的特定问题。 DeNoise()移除扫描中的伪影,Deskew()校正倾斜页面,EnhanceResolution()锐化模糊文本。 这些过滤器共同工作,即使在质量较差的来源中也能实现准确的文本提取。 根据Stack Overflow上的讨论,适当的预处理可以将OCR准确率提高多达40%。 高级数据提取SDK功能 IronOCR超越了基本的文本提取,提供现代.NET OCR SDK应用程序所需的功能: // Create a searchable PDF from an image or PDF public void CreateSearchablePdf(string inputPath, string outputPath) { using var input = new OcrInput(); LoadFile(input, inputPath); _ocr.Read(input).SaveAsSearchablePdf(outputPath); } // Extract structured data (phone numbers, emails, amounts) from text public List<string> ExtractStructuredData(string filePath) { using var input = new OcrInput(); LoadFile(input, filePath); var result = _ocr.Read(input); var text = result.Text; var phoneNumbers = Regex.Matches(text, @"\+?\d[\d\s\-]{7,}\d") .Select(m => m.Value).ToList(); var emails = Regex.Matches(text, @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}") .Select(m => m.Value).ToList(); var amounts = Regex.Matches(text, @"\$\d+(?:\.\d{2})?") .Select(m => m.Value).ToList(); return phoneNumbers.Concat(emails).Concat(amounts).ToList(); } // Create a searchable PDF from an image or PDF public void CreateSearchablePdf(string inputPath, string outputPath) { using var input = new OcrInput(); LoadFile(input, inputPath); _ocr.Read(input).SaveAsSearchablePdf(outputPath); } // Extract structured data (phone numbers, emails, amounts) from text public List<string> ExtractStructuredData(string filePath) { using var input = new OcrInput(); LoadFile(input, filePath); var result = _ocr.Read(input); var text = result.Text; var phoneNumbers = Regex.Matches(text, @"\+?\d[\d\s\-]{7,}\d") .Select(m => m.Value).ToList(); var emails = Regex.Matches(text, @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}") .Select(m => m.Value).ToList(); var amounts = Regex.Matches(text, @"\$\d+(?:\.\d{2})?") .Select(m => m.Value).ToList(); return phoneNumbers.Concat(emails).Concat(amounts).ToList(); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 我们编写的代码展示了两个关键的OCR操作。 CreateSearchablePdf将输入的扫描PDF或图像转换为可搜索的文档,提供可编辑的文本,便于多种文档格式的文本识别。 ExtractStructuredData处理相同的扫描文档,以从多种文档类型中提取数据,例如电话号码、电子邮件和金额,从而使.NET应用程序能够高效处理扫描图像、文本文件和PDF文档。 已具备生产就绪的实现 凭借内置的生产功能,自信地部署IronOCR: public class ProductionOcrService { private readonly IronTesseract _ocr; private readonly ILogger _logger; public ProductionOcrService(ILogger logger) { _logger = logger; _ocr = new IronTesseract(); // Production configuration _ocr.Configuration.RenderSearchablePdfsAndHocr = true; _ocr.Configuration.ReadBarCodes = true; } public async Task<string> ProcessBatchAsync(string[] documents) { var results = new List<string>(); // Parallel processing for performance await Parallel.ForEachAsync(documents, async (doc, ct) => { try { var text = await ExtractTextAsync(doc); results.Add(text); _logger.LogInformation($"Processed: {doc}"); } catch (Exception ex) { _logger.LogError(ex, $"Failed: {doc}"); } }); return string.Join("\n", results); } } public class ProductionOcrService { private readonly IronTesseract _ocr; private readonly ILogger _logger; public ProductionOcrService(ILogger logger) { _logger = logger; _ocr = new IronTesseract(); // Production configuration _ocr.Configuration.RenderSearchablePdfsAndHocr = true; _ocr.Configuration.ReadBarCodes = true; } public async Task<string> ProcessBatchAsync(string[] documents) { var results = new List<string>(); // Parallel processing for performance await Parallel.ForEachAsync(documents, async (doc, ct) => { try { var text = await ExtractTextAsync(doc); results.Add(text); _logger.LogInformation($"Processed: {doc}"); } catch (Exception ex) { _logger.LogError(ex, $"Failed: {doc}"); } }); return string.Join("\n", results); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 该模式展示了用于批处理操作的并行处理、用于监控的结构化日志记录以及优雅的错误处理,防止单个文档故障阻止整个批次。 现实应用:发票处理 这是组织如何使用IronOCR作为他们的.NET OCR SDK以自动化发票处理的方式: // Extract structured invoice data public Invoice ExtractInvoiceData(string invoicePath) { using var input = new OcrInput(); LoadFile(input, invoicePath); // Preprocessing for documents input.DeNoise(); input.Deskew(); var result = _ocr.Read(input); var text = result.Text; return new Invoice { InvoiceNumber = ExtractInvoiceNumber(text), Date = ExtractDate(text), TotalAmount = ExtractAmount(text), RawText = text }; } // --- Helper methods for invoice parsing --- private string ExtractInvoiceNumber(string text) { // Example: Invoice #: 12345 var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)"); return match.Success ? match.Groups[1].Value : null; } private DateOnly? ExtractDate(string text) { // Numeric dates var numericMatch = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b"); if (numericMatch.Success && DateTime.TryParse(numericMatch.Groups[1].Value, out var numericDate)) return DateOnly.FromDateTime(numericDate); // Written-out dates var writtenMatch = Regex.Match(text, @"\b(January|February|March|April|May|June|July|August|September|October|November|December)\s+(\d{1,2}),?\s+(\d{4})\b", RegexOptions.IgnoreCase); if (writtenMatch.Success && DateTime.TryParse(writtenMatch.Value, out var writtenDate)) return DateOnly.FromDateTime(writtenDate); return null; } private decimal? ExtractAmount(string text) { var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)"); if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount)) return amount; return null; } // Extract structured invoice data public Invoice ExtractInvoiceData(string invoicePath) { using var input = new OcrInput(); LoadFile(input, invoicePath); // Preprocessing for documents input.DeNoise(); input.Deskew(); var result = _ocr.Read(input); var text = result.Text; return new Invoice { InvoiceNumber = ExtractInvoiceNumber(text), Date = ExtractDate(text), TotalAmount = ExtractAmount(text), RawText = text }; } // --- Helper methods for invoice parsing --- private string ExtractInvoiceNumber(string text) { // Example: Invoice #: 12345 var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)"); return match.Success ? match.Groups[1].Value : null; } private DateOnly? ExtractDate(string text) { // Numeric dates var numericMatch = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b"); if (numericMatch.Success && DateTime.TryParse(numericMatch.Groups[1].Value, out var numericDate)) return DateOnly.FromDateTime(numericDate); // Written-out dates var writtenMatch = Regex.Match(text, @"\b(January|February|March|April|May|June|July|August|September|October|November|December)\s+(\d{1,2}),?\s+(\d{4})\b", RegexOptions.IgnoreCase); if (writtenMatch.Success && DateTime.TryParse(writtenMatch.Value, out var writtenDate)) return DateOnly.FromDateTime(writtenDate); return null; } private decimal? ExtractAmount(string text) { var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)"); if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount)) return amount; return null; } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 这种方法每天处理数千张发票,提取关键字段以自动输入到会计系统中。 輸出 結論 IronOCR在不需要从头构建OCR的复杂性的情况下,将.NET应用程序转变为复杂的文档处理解决方案。 凭借广泛的语言支持、卓越的准确性和生产就绪的特性,它是开发人员信赖的用于企业应用程序的完整.NET OCR SDK。 IronOCR提供灵活的许可选项,从单一开发者使用的$liteLicense开始,并有选择规模到企业部署的选择。 免版税模式意味着在向客户分发您的OCR SDK应用程序时无额外费用。 准备好构建您的.NET OCR SDK了吗? 开始您的免费试用,今天就开始构建生产应用程序。 用 NuGet 安裝 PM > Install-Package IronOcr 在 NuGet 查看 https://www.nuget.org/packages/IronOcr 以快速安裝。超過 1000 萬次下載,它正在用 C# 改變 PDF 開發。 您還可以下載 DLL 或 Windows 安裝程序。 常見問題解答 .NET OCR SDK 是什麼? IronOCR 的 .NET OCR SDK 是一個用於將光學字符識別功能集成到 C# 應用中的庫,允許開發者從圖像、PDF 和掃描的文檔中提取文本。 IronOCR 的 .NET SDK 的主要功能有哪些? IronOCR 的 .NET SDK 提供簡單的 API,支持多種語言,跨平台兼容,並具備處理各種文件格式和低質量掃描的高級功能。 IronOCR 如何處理不同語言? IronOCR 的 .NET SDK 支持多種語言,可以從不同語言的文檔中提取和識別文本,無需額外配置。 IronOCR 能處理低質量掃描嗎? 是的,IronOCR 設計用於有效處理低質量掃描,利用先進算法在挑戰性場景中增強文本識別的準確性。 IronOCR 的 .NET SDK 是跨平台的嗎? IronOCR 的 .NET SDK 是跨平台的,這意味著它可以在不同的操作系統上使用,使其適用於各種開發環境。 IronOCR 支持哪些文件格式? IronOCR 支持多種文件格式,包括圖像、PDF 和掃描文檔,為不同媒體的文本識別任務提供靈活性。 開發者如何將 IronOCR 集成到項目中? 開發者可以通過其簡單的 API 輕鬆地將 IronOCR 整合到他們的 C# 項目中,從而簡化為應用添加 OCR 功能的過程。 IronOCR 的一些使用案例有哪些? IronOCR 可以用於文檔管理系統、自動數據錄入、內容數字化,以及任何需要從圖像或 PDF 中提取文本的應用。 Kannapat Udonpant 立即與工程團隊聊天 軟體工程師 在成為软件工程師之前,Kannapat 從日本北海道大學完成了環境資源博士學位。在追逐學位期间,Kannapat 還成為了生產工程系一部份——汽車机器人实验室的成員。2022 年,他利用他的 C# 技能加入 Iron Software 的工程團隊, 專注於 IronPDF。Kannapat 珍惜他的工作,因为他直接向编写大部分 IronPDF 使用的代码的开发者学习。除了同行学习,Kannapat 还喜欢在 Iron Software 工作的社交十环。当他不编写代码或文档时,Kannapat 通常在他的 PS5 上打游戏或重看《The Last of Us》。 相關文章 發表日期 9月 29, 2025 如何在 C# GitHub 專案中整合 OCR OCR C# GitHub 教學:使用 IronOCR 在您的 GitHub 專案中實現文本識別。包括程式碼範例和版本控制技巧。 閱讀更多 更新日期 9月 4, 2025 如何將文檔處理記憶體減少 98%:IronOCR 的工程突破 IronOCR 2025.9 通過流式架構將 TIFF 處理記憶體減少 98%,消除崩潰並提高企業工作流程的速度。 閱讀更多 更新日期 8月 5, 2025 使用 IronOCR 釋放可搜索 PDF 的力量:網絡研討會回顧 在這場以開發者為焦點的會議中,Iron Software 的 Chipego Kalinda 和 Darren Steddy 演示如何使用 IronOCR 將掃描的 PDF 轉換為可檢索、合規的文件。觀看 PDF/UA 無障礙功能、全文檢索和針對性數據提取的實時示例——只需幾行 C# 代碼。 閱讀更多 如何在 C# GitHub 專案中整合 OCR
發表日期 9月 29, 2025 如何在 C# GitHub 專案中整合 OCR OCR C# GitHub 教學:使用 IronOCR 在您的 GitHub 專案中實現文本識別。包括程式碼範例和版本控制技巧。 閱讀更多
更新日期 9月 4, 2025 如何將文檔處理記憶體減少 98%:IronOCR 的工程突破 IronOCR 2025.9 通過流式架構將 TIFF 處理記憶體減少 98%,消除崩潰並提高企業工作流程的速度。 閱讀更多
更新日期 8月 5, 2025 使用 IronOCR 釋放可搜索 PDF 的力量:網絡研討會回顧 在這場以開發者為焦點的會議中,Iron Software 的 Chipego Kalinda 和 Darren Steddy 演示如何使用 IronOCR 將掃描的 PDF 轉換為可檢索、合規的文件。觀看 PDF/UA 無障礙功能、全文檢索和針對性數據提取的實時示例——只需幾行 C# 代碼。 閱讀更多