如何使用 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這段程式碼創建了一個可重複使用的 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 了嗎? 立即開始免費試用,開始建立生產應用程式。
!{--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 中抽取文字的應用程式。







