跳過到頁腳內容
使用 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 來消除這種開銷,該 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 將 .NET 應用程式轉換為複雜的文件處理解決方案,而無需從頭開始建立 OCR,從而避免了複雜性。 憑藉廣泛的語言支援、卓越的準確性和可用於生產環境的功能,它是開發人員信賴的、用於企業應用程式的完整 .NET OCR SDK。

IronOCR 提供靈活的授權選項,單開發者使用價格為 $liteLicense,並可擴展至企業部署。 免版稅模式意味著在向客戶分發 OCR SDK 應用程式時無需支付額外費用。

準備好建置您的 .NET OCR SDK 了嗎? 立即開始免費試用,開始建立生產應用程式。

!{--010011000100100101000010010100100100000101010010010110010101111101001110010101010101010101010101010101010101010 0100010111110100100101001101010100010000010100110001001100010111110100001001001100010011110010101010

常見問題解答

什麼是 .NET OCR SDK?

IronOCR 的 .NET OCR SDK 是一個函式庫,設計用來將光學字元識別功能整合到 C# 應用程式中,讓開發人員可以從影像、PDF 和掃描文件中擷取文字。

IronOCR for .NET SDK 的主要功能是什麼?

IronOCR 的 .NET SDK 提供簡單的 API、多語言支援、跨平台相容性,以及處理各種檔案格式和低品質掃描的進階功能。

IronOCR 如何處理不同語言?

IronOCR 的 .NET SDK 支援多種語言,可從各種語言的文件中抽取文字並進行識別,而無需額外設定。

IronOCR 可以處理低品質的掃描嗎?

是的,IronOCR 旨在有效處理低品質掃描,採用先進的演算法,即使在具挑戰性的情況下,也能提升文字辨識的準確度。

IronOCR for .NET SDK 是否跨平台?

IronOCR 的 .NET SDK 是跨平台的,這意味著它可以在不同的作業系統上使用,使其適用於各種開發環境。

IronOCR 支援哪些檔案格式?

IronOCR 支援多種檔案格式,包括影像、PDF 和掃描文件,可彈性處理不同媒體的文字辨識任務。

開發人員如何將 IronOCR 整合到他們的專案中?

開發人員可以使用 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》。