如何使用 IronOCR 创建 .NET OCR SDK
假设您曾经需要从扫描文档、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此代码创建一个可重用的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输出

构建核心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这个实现处理多个文档,应用图像预处理,并从同一文档中提取条形码和文本。 异步模式确保了.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每个过滤器目标均具体针对文档质量的问题。 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我们在这里编写的代码展示了两个关键的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此模式展示了批处理操作的并行处理、结构化日志记录以便监控,以及防止单个文档故障停止整个批处理的优雅错误处理。
实际应用:发票处理
以下是组织如何使用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这种方法每天处理成千上万的发票,提取关键字段以便自动输入到会计系统中。
输出

结论
IronOCR将.NET应用程序转变为成熟的文档处理解决方案,而无需从头构建OCR的复杂性。 凭借广泛的语言支持、卓越的准确性和生产就绪的功能,它是开发人员信赖的完整.NET OCR SDK,用于企业应用程序。
IronOCR提供灵活的许可选项,起价为$liteLicense供单一开发者使用,并有扩展到企业部署的选项。 免版税模式意味着在将您的OCR SDK应用程序分发给客户时无需额外费用。
准备好构建您的.NET OCR SDK了吗? 开始您的免费试用,今天就开始构建生产应用程序。
常见问题解答
.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中提取文本的应用程序。






