使用 IRONOCR 如何使用 IronOCR 创建 .NET OCR SDK Kannapat Udonpant 已发布:九月 29, 2025 下载 IronOCR NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在双子座打开 向 Gemini 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 假设您曾经需要从扫描文档、PDF或图片中提取文本。 在这种情况下,您会知道处理不同的文件格式、多种语言和低质量扫描是多么棘手。 这就是光学字符识别(OCR)发挥作用的地方,将扫描的图像和文档文件转换为可编程处理的可编辑文本。 在本指南中,我们将探讨如何使用IronOCR构建高性能的.NET OCR SDK,展示如何执行OCR、提取结构化数据,以及在多种文档类型中生成可搜索的PDF。您将学习如何以快速、可靠的方式处理扫描的PDF、图像和其他文本文件,并无缝整合到桌面、网络或移动设备上的.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将.NET应用程序转变为成熟的文档处理解决方案,而无需从头构建OCR的复杂性。 凭借广泛的语言支持、卓越的准确性和生产就绪的功能,它是开发人员信赖的完整.NET OCR SDK,用于企业应用程序。 IronOCR提供灵活的许可选项,起价为$liteLicense供单一开发者使用,并有扩展到企业部署的选项。 免版税模式意味着在将您的OCR SDK应用程序分发给客户时无需额外费用。 准备好构建您的.NET OCR SDK了吗? 开始您的免费试用,今天就开始构建生产应用程序。 使用 NuGet 安装 PM > Install-Package IronOcr 在 IronOCR 上查看 NuGet 快速安装。超过 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集成到他们的项目中? 开发人员可以轻松地将IronOCR集成到他们的C#项目中,其直观的API简化了为应用添加OCR功能的过程。 IronOCR有哪些使用案例? IronOCR可以用于文档管理系统、自动数据录入、内容数字化,以及任何需要从图像或PDF中提取文本的应用程序。 Kannapat Udonpant 立即与工程团队聊天 软件工程师 在成为软件工程师之前,Kannapat 在日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了车辆机器人实验室的成员,隶属于生物生产工程系。2022 年,他利用自己的 C# 技能加入 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他可以直接从编写大多数 IronPDF 代码的开发者那里学习。除了同行学习外,Kannapat 还喜欢在 Iron Software 工作的社交方面。不撰写代码或文档时,Kannapat 通常可以在他的 PS5 上玩游戏或重温《最后生还者》。 相关文章 已发布十二月 18, 2025 C# 读取 PDF 表单字段:以编程方式提取表单数据 了解如何使用IronPDF在C#中读取PDF表单字段。从可填写PDF中提取文本、复选框、下拉列表等,提供简单的代码示例。 阅读更多 已发布十二月 18, 2025 C# 从 PDF 中提取图像:完整开发者指南 了解如何在C#中使用IronPDF强大的方法从PDF文档中提取图像。包含.NET开发人员的完整指南和代码示例。 阅读更多 已发布十二月 18, 2025 C# 将 PDF 转换为图像:完整开发者指南 了解如何在C#中使用IronPDF将PDF文档转换为图像。提供JPG、PNG和TIFF转换的逐步指南和代码示例。 阅读更多 C# 中的 OCR CodeProject 教程:使用 IronOCR 从图像中提取文本如何在 C# GitHub 项目中集成...
已发布十二月 18, 2025 C# 读取 PDF 表单字段:以编程方式提取表单数据 了解如何使用IronPDF在C#中读取PDF表单字段。从可填写PDF中提取文本、复选框、下拉列表等,提供简单的代码示例。 阅读更多