跳過到頁腳內容
使用 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;
    }
}
Imports IronOcr

Public Class OcrService
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract()
    End Sub

    Public Function ExtractText(imagePath As String) As String
        Using input As New OcrInput()
            input.LoadImage(imagePath)
            Dim result = _ocr.Read(input)
            Return result.Text
        End Using
    End Function
End Class
$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);
    }
}
Option Strict On



Module Program
    Sub Main(args As String())
        Dim ocrService = New OcrService()
        Dim imagePath As String = "test.png" ' Replace with your image path
        Dim extractedText As String = ocrService.ExtractText(imagePath)
        Console.WriteLine(extractedText)
    End Sub
End Module
$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; }
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Threading.Tasks

' Async document processing with barcodes
Public Class DocumentProcessor
    Public Async Function ProcessDocumentAsync(filePath As String) As Task(Of ProcessedDocument)
        Using input As New OcrInput()
            LoadFile(input, filePath)
            input.DeNoise()
            input.Deskew()
            Dim result = Await _ocr.ReadAsync(input)
            Return New ProcessedDocument With {
                .Text = result.Text,
                .Confidence = result.Confidence,
                .Barcodes = result.Barcodes.Select(Function(b) b.Value).ToList()
            }
        End Using
    End Function

    ' Helper to load image or PDF
    Private Sub LoadFile(input As OcrInput, filePath As String)
        If filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) Then
            input.LoadPdf(filePath)
        Else
            input.LoadImage(filePath)
        End If
    End Sub
End Class

' Model for processed documents with barcodes
Public Class ProcessedDocument
    Public Property Text As String
    Public Property Confidence As Double
    Public Property Barcodes As List(Of String)
End Class
$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;
    }
Imports System

Public Class OcrProcessor
    ' OCR optimized for low-quality images
    Public Function ProcessLowQualityDocument(filePath As String) As String
        Using input As New OcrInput()
            LoadFile(input, filePath)
            ' Preprocessing for low-quality documents
            input.DeNoise()
            input.Deskew()
            input.Scale(150)
            input.Binarize()
            input.EnhanceResolution(300)
            Dim result = _ocr.Read(input)
            Return result.Text
        End Using
    End Function
End Class
$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();
  }
Imports System.Text.RegularExpressions

Public Class PdfProcessor
    ' Create a searchable PDF from an image or PDF
    Public Sub CreateSearchablePdf(inputPath As String, outputPath As String)
        Using input As New OcrInput()
            LoadFile(input, inputPath)
            _ocr.Read(input).SaveAsSearchablePdf(outputPath)
        End Using
    End Sub

    ' Extract structured data (phone numbers, emails, amounts) from text
    Public Function ExtractStructuredData(filePath As String) As List(Of String)
        Using input As New OcrInput()
            LoadFile(input, filePath)
            Dim result = _ocr.Read(input)
            Dim text = result.Text
            Dim phoneNumbers = Regex.Matches(text, "\+?\d[\d\s\-]{7,}\d") _
                               .Cast(Of Match)() _
                               .Select(Function(m) m.Value).ToList()
            Dim emails = Regex.Matches(text, "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}") _
                          .Cast(Of Match)() _
                          .Select(Function(m) m.Value).ToList()
            Dim amounts = Regex.Matches(text, "\$\d+(?:\.\d{2})?") _
                           .Cast(Of Match)() _
                           .Select(Function(m) m.Value).ToList()
            Return phoneNumbers.Concat(emails).Concat(amounts).ToList()
        End Using
    End Function
End Class
$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);
    }
}
Imports System.Collections.Generic
Imports System.Threading.Tasks

Public Class ProductionOcrService
    Private ReadOnly _ocr As IronTesseract
    Private ReadOnly _logger As ILogger

    Public Sub New(logger As ILogger)
        _logger = logger
        _ocr = New IronTesseract()
        ' Production configuration
        _ocr.Configuration.RenderSearchablePdfsAndHocr = True
        _ocr.Configuration.ReadBarCodes = True
    End Sub

    Public Async Function ProcessBatchAsync(documents As String()) As Task(Of String)
        Dim results As New List(Of String)()
        ' Parallel processing for performance
        Await Task.WhenAll(documents.Select(Function(doc) ProcessDocumentAsync(doc, results)))
        Return String.Join(vbLf, results)
    End Function

    Private Async Function ProcessDocumentAsync(doc As String, results As List(Of String)) As Task
        Try
            Dim text As String = Await ExtractTextAsync(doc)
            results.Add(text)
            _logger.LogInformation($"Processed: {doc}")
        Catch ex As Exception
            _logger.LogError(ex, $"Failed: {doc}")
        End Try
    End Function

    Private Async Function ExtractTextAsync(doc As String) As Task(Of String)
        ' Placeholder for the actual text extraction logic
        Return Await Task.FromResult(String.Empty)
    End Function
End Class
$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;
    }
Imports System.Text.RegularExpressions

Public Class InvoiceExtractor

    ' Extract structured invoice data
    Public Function ExtractInvoiceData(invoicePath As String) As Invoice
        Using input As New OcrInput()
            LoadFile(input, invoicePath)
            ' Preprocessing for documents
            input.DeNoise()
            input.Deskew()
            Dim result = _ocr.Read(input)
            Dim text = result.Text
            Return New Invoice With {
                .InvoiceNumber = ExtractInvoiceNumber(text),
                .Date = ExtractDate(text),
                .TotalAmount = ExtractAmount(text),
                .RawText = text
            }
        End Using
    End Function

    ' --- Helper methods for invoice parsing ---
    Private Function ExtractInvoiceNumber(text As String) As String
        ' Example: Invoice #: 12345
        Dim match = Regex.Match(text, "Invoice\s*#?:?\s*(\S+)")
        Return If(match.Success, match.Groups(1).Value, Nothing)
    End Function

    Private Function ExtractDate(text As String) As Date?
        ' Numeric dates
        Dim numericMatch = Regex.Match(text, "\b(\d{1,2}/\d{1,2}/\d{2,4})\b")
        If numericMatch.Success AndAlso DateTime.TryParse(numericMatch.Groups(1).Value, numericDate) Then
            Return DateOnly.FromDateTime(numericDate)
        End If
        ' Written-out dates
        Dim 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 AndAlso DateTime.TryParse(writtenMatch.Value, writtenDate) Then
            Return DateOnly.FromDateTime(writtenDate)
        End If
        Return Nothing
    End Function

    Private Function ExtractAmount(text As String) As Decimal?
        Dim match = Regex.Match(text, "\$\s*(\d+(?:\.\d{2})?)")
        If match.Success AndAlso Decimal.TryParse(match.Groups(1).Value, amount) Then
            Return amount
        End If
        Return Nothing
    End Function

End Class

Public Class Invoice
    Public Property InvoiceNumber As String
    Public Property Date As Date?
    Public Property TotalAmount As Decimal?
    Public Property RawText As String
End Class

Public Class OcrInput
    Public Sub DeNoise()
        ' Implementation here
    End Sub

    Public Sub Deskew()
        ' Implementation here
    End Sub
End Class

Public Class OcrResult
    Public Property Text As String
End Class

Public Class Ocr
    Public Function Read(input As OcrInput) As OcrResult
        ' Implementation here
        Return New OcrResult()
    End Function
End Class

Private Sub LoadFile(input As OcrInput, invoicePath As String)
    ' Implementation here
End Sub

Private _ocr As New Ocr()
$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 玩遊戲或重看《最後的我們》。