跳過到頁腳內容
使用 IRONOCR

如何使用 IronOCR 建立 .NET OCR SDK

假设您曾经需要从扫描的文档、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

輸出

如何使用IronOCR创建.NET OCR SDK:图2 - 示例控制台输出

构建核心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创建.NET OCR SDK:图3 - OCR输入图像与输出文本

通过内置功能提高准确性

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 SDK:图4 - 发票OCR输出

結論

IronOCR在不需要从头构建OCR的复杂性的情况下,将.NET应用程序转变为复杂的文档处理解决方案。 凭借广泛的语言支持、卓越的准确性和生产就绪的特性,它是开发人员信赖的用于企业应用程序的完整.NET OCR SDK。

IronOCR提供灵活的许可选项,从单一开发者使用的$liteLicense开始,并有选择规模到企业部署的选择。 免版税模式意味着在向客户分发您的OCR SDK应用程序时无额外费用。

准备好构建您的.NET OCR SDK了吗? 开始您的免费试用,今天就开始构建生产应用程序。

NuGet 用 NuGet 安裝

PM >  Install-Package IronOcr

NuGet 查看 https://www.nuget.org/packages/IronOcr 以快速安裝。超過 1000 萬次下載,它正在用 C# 改變 PDF 開發。 您還可以下載 DLLWindows 安裝程序

常見問題解答

.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 中提取文本的應用。

Kannaopat Udonpant
軟體工程師
在成為软件工程師之前,Kannapat 從日本北海道大學完成了環境資源博士學位。在追逐學位期间,Kannapat 還成為了生產工程系一部份——汽車机器人实验室的成員。2022 年,他利用他的 C# 技能加入 Iron Software 的工程團隊, 專注於 IronPDF。Kannapat 珍惜他的工作,因为他直接向编写大部分 IronPDF 使用的代码的开发者学习。除了同行学习,Kannapat 还喜欢在 Iron Software 工作的社交十环。当他不编写代码或文档时,Kannapat 通常在他的 PS5 上打游戏或重看《The Last of Us》。