跳至页脚内容
使用 IRONOCR

使用 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;
    }
}
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了吗? 开始您的免费试用,今天就开始构建生产应用程序。

NuGet 使用 NuGet 安装

PM >  Install-Package IronOcr

IronOCR 上查看 NuGet 快速安装。超过 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集成到他们的项目中?

开发人员可以轻松地将IronOCR集成到他们的C#项目中,其直观的API简化了为应用添加OCR功能的过程。

IronOCR有哪些使用案例?

IronOCR可以用于文档管理系统、自动数据录入、内容数字化,以及任何需要从图像或PDF中提取文本的应用程序。

Kannaopat Udonpant
软件工程师
在成为软件工程师之前,Kannapat 在日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了车辆机器人实验室的成员,隶属于生物生产工程系。2022 年,他利用自己的 C# 技能加入 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他可以直接从编写大多数 IronPDF 代码的开发者那里学习。除了同行学习外,Kannapat 还喜欢在 Iron Software 工作的社交方面。不撰写代码或文档时,Kannapat 通常可以在他的 PS5 上玩游戏或重温《最后生还者》。