IRONSOFTWAREHOME
USING IRONOCR

如何在 C# 中对 PDF 进行 OCR 识别:使用.NET从扫描文档中提取文本

Kannaopat Udonpant
Kannapat Udonpant
Updated: 2026年4月21日

扫描的 PDF 文档给.NET开发人员带来了一个持续的挑战:文本仅以图像形式存在,因此无法进行搜索、复制或以编程方式处理。 光学字符识别 (OCR) 通过将扫描图像转换为可编辑和可搜索的数据来解决这个问题——将纸质文档、相机拍摄的图像或任何基于图像的 PDF 文件转换为机器可读的文本。 无论是数字化纸质档案、自动化数据提取,还是构建文档处理流程,在 C# 中对 PDF 文件执行 OCR 的能力都是一项至关重要的能力。

IronOCR是一个基于 Tesseract 5 引擎构建的.NET OCR 库,并具有额外的精度增强功能。 它允许开发人员使用少量代码从任何 PDF 文档(扫描或其他方式)中提取文本。 本文将介绍核心工作流程:基本 PDF OCR、页面选择性处理、区域目标提取以及针对复杂扫描的图像预处理。

您如何在C#中对PDF进行OCR?

在.NET中,提取 PDF 文本的最快方法是通过NuGet安装IronOCR 。 在项目目录中打开终端并运行:

dotnet add package IronOcr

安装该软件包后,以下顶级语句程序会读取扫描的 PDF 文件并打印其提取的文本:

using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");

// Run recognition
OcrResult result = ocr.Read(input);

// Access the extracted text
string text = result.Text;
Console.WriteLine(text);

IronTesseract 类将 Tesseract 5 包装为兼具 .NET Core 和 .NET Framework 原生优化的类。 OcrInput 对象负责管理 PDF 加载和内部页面渲染。 当调用 Read 时,OCR 进程会分析每页并返回一个 OcrResult,其中包含提取出的完整文本,加上关于段落、行、单词及其像素坐标的结构化数据。

结果可以写入文本文件、传递给下游处理逻辑、存储在数据库中,或输入到文档索引管道中。有关底层引擎的更多信息,请参阅Tesseract OCR 文档IronOCR API 参考文档

输入

如何OCR一个PDF:使用C# .NET OCR PDF从扫描文档中提取文本:图1 - 示例PDF输入

输出

如何OCR一个PDF:使用C# .NET OCR PDF从扫描文档中提取文本:图2 - 控制台输出

如何读取PDF文件中的特定页面?

如果只有某些页面包含相关内容,处理长文档的每一页都会浪费时间和内存。 IronOCR允许您通过将零基页面索引传递给LoadPdf来定位特定页面:

using IronOcr;
using System.Collections.Generic;

var ocr = new IronTesseract();

// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };

using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);

选择性页面加载可以减少处理时间和内存消耗,这在处理数百页的归档文件时非常重要,因为其中只有少数几页包含所需的数据。 从零开始的索引约定与标准的.NET集合一致:页面索引 0 是文档的第一页。

对于事先不知道相关页面的文档,可以考虑先以降低 DPI 的速度快速扫描整个文档,以确定页码,然后再以完整的设置对这些页面重新扫描。

IronOCR页面选择文档中了解更多关于页面级控制的信息。

如何从页面的特定区域提取数据?

发票处理、表格数字化和结构化文档解析通常需要从指定区域提取文本,而不是扫描整个页面。 IronOCR通过ContentAreas参数支持区域定向OCR,该参数接受一组 Rectangle 对象,用于指定每个页面要分析的部分:

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
    new Rectangle(130, 290, 250, 50)   // Invoice number field
};

using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);

Rectangle 构造函数需要四个整数参数:X 坐标、Y 坐标、宽度和高度 — 均以像素为单位,从渲染页面的左上角测量。 以小区域而非整个页面为目标,既可以减少 OCR 时间,又能降低引擎识别周围噪声或无关文本字段的可能性。

对于批量发票处理工作流,将区域提取与对 result.Pages 的迭代结合,能从数百份文档中提取相同字段位置的结构化数据。 每个页面结果都会独立地显示其内容区域中识别出的文本。

IronOCR内容区示例为多区域方案提供了额外的配置选项。

输入

如何OCR一个PDF:使用C# .NET OCR PDF从扫描文档中提取文本:图3 - 示例发票

输出

如何OCR一个PDF:使用C# .NET OCR PDF从扫描文档中提取文本:图4 - 提取的数据输出

如何提高扫描文档的OCR识别准确率?

现实世界中扫描的文档经常会出现质量问题:页面倾斜、分辨率低,或者扫描硬件或软件引入了数字噪声。 IronOCR包含一组图像预处理过滤器,可在识别引擎运行之前纠正这些问题:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);

// Apply image correction filters
input.Deskew();    // Automatically straighten rotated pages
input.DeNoise();   // Remove scanning artifacts and speckles

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);

dpi 参数控制在识别运行之前PDF页面的渲染分辨率。 更高的分辨率(200 至 300 DPI)可以提高文本较小或较密集的文档的精度,但处理过程中会占用更多内存。 Deskew 方法自动检测并纠正页面旋转。 DeNoise 去除会干扰字符识别步骤的斑点和伪影。

对于需要更彻底的图像校正的文档, IronOCR还提供对比度增强、二值化(将页面转换为黑白)和缩放调整。 将多个过滤器按顺序组合使用,可以从原本会产生乱码输出的扫描件中恢复可用的文本。 查看IronOCR图像过滤器参考获取可用预处理操作的完整列表。

如何处理受密码保护和多格式的文档?

IronOCR不仅限于标准 PDF 文件。 该库可处理文档处理工作流程中经常出现的各种输入场景。

支持通过在输入构建过程中传递凭据来启用密码保护的 PDF 文件

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);

图像格式 — PNG、JPEG、TIFF、BMP、GIF和多页TIFF — 通过相应的 LoadImageLoadImageFrames 方法加载。 无论输入格式如何,都适用相同的预处理过滤器和区域定位选项。

多语言文档通过 IronOCR 的语言包系统进行处理。 库默认提供英语,并支持覆盖拉丁文、西里尔文、CJK、阿拉伯文等脚本的125多个语言包。在调用 Read 之前加载其他语言:

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;

对于同一页面上混合多种语言的文档,提供 MultiLanguage 模式。 这对于国际环境下的发票处理尤其有价值,因为发票的抬头、明细项目和地址可能以不同的语言出现。

部署可在 Windows、Linux、macOS 和云环境(包括 Azure 和 Docker 容器)中进行。

如何从扫描文档创建可搜索的PDF?

除了将文本提取为字符串之外, IronOCR还可以生成可搜索的 PDF 输出——在 PDF 中,原始扫描图像作为视觉层保留,同时嵌入一个不可见的文本层以进行搜索和复制操作。 这是Professional文档扫描仪生成的标准格式。

IronOCR可搜索PDF功能接受 OcrResult 并写入一个新PDF文件:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");

OcrResult result = ocr.Read(input);

// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");

输出文件可以使用任何PDF阅读器打开。 文本选择、搜索和复制操作在嵌入的文本层上进行,同时保留原始扫描外观。 这种格式通常是合规性档案、法律文件库和Enterprise内容管理系统所必需的。

对于额外的输出格式,OcrResult 对象还提供每页的置信度分数、单词级别的边界框和结构化段落数据 — 所有这些对于下游的分类或索引任务都很有用。

如何同时读取条形码、二维码和文本?

文档处理流程通常需要从同一文档中提取人类可读的文本和机器可读的代码。 IronOCR可以在一次 OCR 过程中检测和解码条形码和二维码,而无需单独的库。

在处理之前启用 IronTesseract 实例上的条形码阅读功能:

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");

OcrResult result = ocr.Read(input);

// Access recognized text
Console.WriteLine(result.Text);

// Access barcode data
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}

这对于货运标签处理、库存管理以及任何条形码和打印文本同时出现在扫描文档上的工作流程都特别有用。 IronOCR条形码读取指南涵盖了支持的格式,包括Code 128、QR码、Data Matrix和PDF417。

IronOCR输入类型之间有什么区别?

IronOCR提供了两种加载 PDF 文件的主要方法,每种方法都适用于不同的场景:

IronOCR PDF 输入方法比较
方法类别最适合注意事项
一般性输入OcrInput.LoadPdf()大多数用例支持所有预处理过滤器、页面选择和内容区域
PDF专用OcrPdfInput简单场景便捷包装;配置选项较少
图像文件OcrInput.LoadImage()PNG、JPEG、TIFF、BMP与 PDF 输入相同的预处理和区域定位方法
多页TIFFOcrInput.LoadImageFrames()传真存档,扫描仪输出将每一帧作为单独的页面进行处理

对于大多数生产场景,推荐使用 OcrInput.LoadPdf() 因为它提供了完整的预处理和配置API。 OcrPdfInput 适用于快速原型或默认设置足够的情况。

下一步计划是什么?

以上代码示例涵盖了IronOCR在 C# 中用于 PDF OCR 的核心工作流程。 以下是进行下一步操作的简要清单:

  • 安装包dotnet add package IronOcr 或在NuGet上搜索IronOCR -运行基本示例:在构建完整的流程逻辑之前,确认能够从示例 PDF 中提取文本。
  • 应用预处理:如果处理扫描文档,请添加DeNoise调用并用代表性样本进行测试
  • **探索额外功能:**可搜索的PDF输出、"条形码读取、多语言支持",以及结构化数据输出。 -查看部署指南:Azure、Docker 和 Linux 部署文章涵盖了特定于环境的配置。 -试用免费版:在购买许可证之前,先开始免费试用,体验所有功能。 -获取许可IronOCR 的许可选项涵盖从个人开发者到Enterprise部署的各种需求,并允许免版税再分发。

对于具体使用案例的问题, IronOCR操作指南库提供了涵盖数十种场景的分步文章。 完整的 API 接口已记录在IronOCR API 参考文档中。

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户