
光学字符识别(OCR)技术已成为处理扫描文档和基于图像的 PDF 的开发人员的必备工具。在本教程中,你将学习如何使用 Spire.PDF for .NET 和 Spire.OCR for .NET 库在 C# 中对 PDF 执行 OCR,从扫描文档或 PDF 中的图像里提取文本。通过将扫描版 PDF 转换为可编辑、可搜索的格式,你可以显著改善文档管理流程。
为什么扫描版 PDF 需要 OCR?
扫描版 PDF 本质上是图像文件——它们包含的是文字的图片,而不是实际可选择和可搜索的文本内容。当你扫描纸质文档或收到基于图像的 PDF 时,文本仅以像素形式存在,无法编辑、搜索或提取。这给需要以数字化方式处理这些文档的企业和个人带来了很大的限制。
OCR 技术通过分析扫描图像中字母和数字的形状,将其转换为机器可读的文本,从而解决了这一问题。这一过程将静态 PDF 转变为可使用、可搜索、可编辑的文档——实现文本提取、关键词搜索,以及与数据库和工作流自动化工具的无缝集成。
在法律、医疗和教育等经常需要处理大量扫描文档的领域中,OCR 在文档数字化过程中发挥着重要作用,可以让重要数据更容易访问和使用。
环境搭建:安装所需库
在开始编写代码之前,我们首先需要使用必要的组件配置开发环境:Spire.PDF 和 Spire.OCR。Spire.PDF 负责处理 PDF 操作,而 Spire.OCR 执行实际的文本识别。
步骤 1. 通过 NuGet 安装 Spire.PDF 和 Spire.OCR
首先,在 Visual Studio 中打开 NuGet 包管理器,搜索 “Spire.PDF” 和 “Spire.OCR” 并将其安装到你的项目中。或者,你也可以使用包管理器控制台:
Install-Package Spire.PDF
Install-Package Spire.OCR
步骤 2. 下载 OCR 模型:
Spire.OCR 需要预训练语言模型才能进行文本识别。根据你的操作系统(Windows、Linux 或 macOS)下载相应的模型文件,并将其解压到指定目录(例如 D:\win-x64)。
支持的平台包括:
重要提示:请确保项目的目标平台设置为 x64(项目属性 > 生成 > 平台目标),因为 Spire.OCR 仅支持 64 位系统。

在 C# 中对扫描版 PDF 执行 OCR
安装好必要的库后,现在就可以对扫描版 PDF 执行 OCR 了。以下是一个演示此过程的示例代码片段。
using Spire.OCR;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace OCRPDF
{
class Program
{
static void Main(string[] args)
{
// 创建 OcrScanner 类的实例
OcrScanner scanner = new OcrScanner();
// 配置扫描器
ConfigureOptions configureOptions = new ConfigureOptions
{
ModelPath = @"D:\win-x64", // 设置模型路径
Language = "Chinese" // 设置语言
};
// 应用配置选项
scanner.ConfigureDependencies(configureOptions);
// 加载 PDF 文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Input.pdf");
// 遍历所有页面
for (int i = 0; i < doc.Pages.Count; i++)
{
// 将页面转换为图像
Image image = doc.SaveAsImage(i, PdfImageType.Bitmap);
// 将图像转换为 MemoryStream
using (MemoryStream stream = new MemoryStream())
{
image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Position = 0; // 重置流的位置
// 对图像流执行 OCR
scanner.Scan(stream, OCRImageFormat.Png);
string pageText = scanner.Text.ToString();
// 将提取的文本保存到单独的文件中
string outputTxtPath = Path.Combine(@"C:\Users\Administrator\Desktop\Output", $"Page-{i + 1}.txt");
File.WriteAllText(outputTxtPath, pageText);
}
}
// 关闭文档
doc.Close();
}
}
}
关键组件说明:
- OcrScanner 类:该类是执行 OCR 的核心。它提供了配置和执行扫描操作的方法。
- ConfigureOptions 类:该类用于设置 OCR 扫描器的配置。ModelPath 属性指定 OCR 模型文件的路径,Language 属性允许你指定文本识别的语言。
- PdfDocument 类:该类表示 PDF 文档。*LoadFromFile 方法用于加载需要处理的 PDF 文件。
- 图像转换:使用 SaveAsImage 方法将每个 PDF 页面转换为图像。这是必要的,因为 OCR 作用于图像文件。
- MemoryStream:图像被保存到 MemoryStream 中,使我们无需将图像保存到磁盘即可执行 OCR。
- OCR 处理:Scan 方法对图像流执行 OCR。识别出的文本可通过 OcrScanner 实例的 Text 属性访问。
- 输出:提取的文本按页保存到文本文件中。
输出:

如果需要从可搜索的 PDF 中提取文本,请参阅本指南:使用 C# 实现 PDF 文本自动化提取
在 C# 中从 PDF 内的图像提取文本
除了处理整个 PDF 页面外,你还可以提取嵌入 PDF 中的图像里的文本。方法如下:
using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.OCR;
using System.Drawing;
namespace OcrImageFromPdf
{
class Program
{
static void Main(string[] args)
{
// 创建 PdfDocument 对象
PdfDocument doc = new PdfDocument();
// 加载 PDF 文档
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Input.pdf");
// 创建 PdfImageHelper 对象
PdfImageHelper imageHelper = new PdfImageHelper();
// 创建 OcrScanner 类的实例
OcrScanner scanner = new OcrScanner();
// 配置扫描器
ConfigureOptions configureOptions = new ConfigureOptions
{
ModelPath = @"D:\win-x64", // 设置模型路径
Language = "Chinese" // 设置语言
};
scanner.ConfigureDependencies(configureOptions);
// 声明一个 int 变量
int m = 0;
// 遍历所有页面
for (int i = 0; i < doc.Pages.Count; i++)
{
// 获取指定页面
PdfPageBase page = doc.Pages[i];
// 获取页面中的所有图片信息
PdfImageInfo[] imageInfos = imageHelper.GetImagesInfo(page);
// 遍历图片信息
for (int j = 0; j < imageInfos.Length; j++)
{
// 获取指定的图片信息
PdfImageInfo imageInfo = imageInfos[j];
// 获取图片
Image image = imageInfo.Image;
// 将图片转换为 MemoryStream
using (MemoryStream stream = new MemoryStream())
{
image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Position = 0; // 重置流的位置
// 对图片流执行 OCR
scanner.Scan(stream, OCRImageFormat.Png);
string imageText = scanner.Text.ToString();
// 将 OCR 结果保存到文本文件
string outputTxtPath = Path.Combine(@"C:\Users\Administrator\Desktop\Output", $"Image-Text-{m + 1}.txt");
File.WriteAllText(outputTxtPath, imageText);
m++;
}
}
}
// 释放资源
doc.Dispose();
}
}
}
关键组件说明:
- PdfImageHelper 类:该类用于从 PDF 页面中提取图像。它提供了检索图像信息的方法,例如 GetImagesInfo,该方法会返回一个 PdfImageInfo 对象数组。
- PdfImageInfo 类:每个 PdfImageInfo 对象包含与图像相关的属性,包括可供进一步处理的实际 Image 对象。
- 图像处理:与前面的示例类似,每张图像被保存到 MemoryStream 中以进行 OCR 处理。
- 输出:从每张图像提取的文本被保存到单独的文本文件中。
输出:

总结
通过将 Spire.PDF 与 Spire.OCR 结合使用,你可以将扫描版 PDF 和基于图像的文档无缝转换为完全可搜索、可编辑的文本。无论你需要处理整个页面还是从特定的嵌入图像中提取文本,方法都简单而灵活。
这种 OCR 集成不仅简化了文档数字化流程,还通过支持搜索、复制和自动化数据提取来提高生产力。对于经常需要处理大量扫描文档的行业而言,使用 C# 实现 OCR 可以显著提升信息的可访问性、合规性以及信息检索速度。
常见问题解答
可以对非中文 PDF 执行 OCR 吗?
可以,Spire.OCR 支持多种语言。你可以在 ConfigureOptions 中将 Language 属性设置为所需语言。
如果输出文本出现乱码或识别不正确,该怎么办?
请检查输入 PDF 中图像的质量。如果图像模糊或对比度低,OCR 可能难以准确识别文本。考虑在处理前增强图像质量。
可以从嵌入 PDF 中的图像提取文本吗?
可以。可以使用辅助类从每个页面中提取图像,然后应用 OCR 对图像中的文本进行识别。
Spire.OCR 可以识别 PDF 中的手写文本吗?
Spire.OCR 主要针对印刷体文本进行了优化。对于手写文字,识别准确率通常会较低。
是否需要额外安装语言模型才能执行 OCR?
是的,Spire.OCR 需要预训练的语言模型文件。在执行 OCR 之前,请下载并配置适用于你目标语言的相应模型。
获取免费许可证
如需完整体验 Spire.PDF for .NET 和 Spire.OCR for .NET 的功能而不受评估限制,可以申请 30 天免费试用许可证。







