使用 IRONOCR 使用 IronOCR 创建 .NET OCR SDK Kannapat Udonpant 已发布:2026年1月21日 下载 IronOCR NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 假设您曾经需要从扫描文档、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 输出 构建核心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的预处理功能显著提高了真实文档的识别准确性: // 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的复杂性。 凭借广泛的语言支持、卓越的准确性和生产就绪的功能,它是开发人员信赖的完整.NET OCR SDK,用于企业应用程序。 IronOCR提供灵活的许可选项,起价为$liteLicense供单一开发者使用,并有扩展到企业部署的选项。 免版税模式意味着在将您的OCR SDK应用程序分发给客户时无需额外费用。 准备好构建您的.NET OCR SDK了吗? 开始您的免费试用,今天就开始构建生产应用程序。 使用 NuGet 安装 PM > Install-Package IronOcr 在 IronOCR 上查看 NuGet 快速安装。超过 1000 万次下载,它正以 C# 改变 PDF 开发。 您也可以下载 DLL 或 Windows 安装程序。 常见问题解答 .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中提取文本的应用程序。 Kannapat Udonpant 立即与工程团队聊天 软件工程师 在成为软件工程师之前,Kannapat 在日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了车辆机器人实验室的成员,隶属于生物生产工程系。2022 年,他利用自己的 C# 技能加入 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他可以直接从编写大多数 IronPDF 代码的开发者那里学习。除了同行学习外,Kannapat 还喜欢在 Iron Software 工作的社交方面。不撰写代码或文档时,Kannapat 通常可以在他的 PS5 上玩游戏或重温《最后生还者》。 相关文章 已发布2026年1月21日 OCR C# GitHub 集成:使用 IronOCR 构建文本识别应用程序 OCR C# GitHub 教程:使用 IronOCR 在您的 GitHub 项目中实施文本识别。包括代码示例和版本控制技巧。 阅读更多 已更新2026年1月5日 如何 OCR PDF:使用 C# .NET OCR 从扫描文档中提取 PDF 文本 了解如何使用 IronOcr 对 PDF 进行 OCR 并从扫描文档中提取文本。 阅读更多 已更新2025年12月19日 C# 读取 PDF 表单字段:以编程方式提取表单数据 了解如何使用IronPDF在C#中读取PDF表单字段。从可填写PDF中提取文本、复选框、下拉列表等,提供简单的代码示例。 阅读更多 OCR C# GitHub 集成:使用 IronOCR 构建文本识别应用程序如何 OCR PDF:使用 C# .NET OCR...
已发布2026年1月21日 OCR C# GitHub 集成:使用 IronOCR 构建文本识别应用程序 OCR C# GitHub 教程:使用 IronOCR 在您的 GitHub 项目中实施文本识别。包括代码示例和版本控制技巧。 阅读更多
已更新2025年12月19日 C# 读取 PDF 表单字段:以编程方式提取表单数据 了解如何使用IronPDF在C#中读取PDF表单字段。从可填写PDF中提取文本、复选框、下拉列表等,提供简单的代码示例。 阅读更多