C# PaddleOCRSharp.PDF 增加PDF识别 作者:马育民 • 2025-07-02 13:59 • 阅读:10003 摘自:https://www.cnblogs.com/raoyutian/p/18927316 # 传统识别pdf的缺点 在实际项目中,经常会遇到需要从 PDF 文件中提取文本信息的需求。由于 PDF 文档通常包含多种格式和布局,直接使用 OCR 技术对其进行识别并不总是最优的选择。因此,在进行 OCR 之前,通常需要将 PDF 内容转换为图像文件,以便更有效地应用 OCR 算法。 一般步骤是: 1. 读取 PDF 文件:使用pdf库来读取 PDF 文件的内容。这些库可以解析 PDF 文档,并提取页面内容。 2. 将 PDF 页面转换为图像:利用 PDF 库,它可以将每一页的 PDF 内容转换为单独的图像文件或直接保存为多页图像文件。 3. 处理图像质量:转换后的图像可能需要进一步优化。例如,可以通过调整分辨率、对比度等参数来提高 OCR 识别的效果。 4. 应用 OCR 技术:使用如 PaddleOCR、Tesseract 或其他 OCR 库对转换后的图像进行文字识别。 # 新方式 PaddleOCRSharp目前增加扩展组件库 `PaddleOCRSharp.PDF` ,在nuget上安装PaddleOCRSharp包之后再安装PaddleOCRSharp.PDF包即可。 ### 添加依赖 [](https://www.malaoshi.top/upload/0/0/1GW1PtAmOPCO.png) ### 代码 关键代码也就一行。 ``` PaddleOCREngine engine = new PaddleOCREngine(); var result = engine.DetectTextPDF(“PDF文件或者byte数组”); ``` 返回结果是一个对象包含一个Pages属性,Pages属性包含PDF的每一页的OCRResult信息。OCRResult就是PaddleOCRSharp的OCR图片识别结果,包含文本坐标置信度等信息。 ``` public class PDFOCRResult { // // 摘要: // PDF识别每页结果集合 public List Pages { get; set; } = new List(); } ``` PaddleOCRSharp.PDF包含两个重载方法,分别满足传参文件路径和文件流。 ``` /// /// PDF识别 /// /// OCR引擎 /// PDF文件 /// 导出图片的分辨,分辨率越高越清晰,图片像素越大 /// 拆分第几页事件回调 /// PDF识别结果 public static PDFOCRResult DetectTextPDF(this PaddleOCREngine engine, string pdffile, float dpi = 150, Action pageAction = null) /// /// PDF识别 /// /// OCR引擎 /// PDF文件byte数组 /// 导出图片的分辨,分辨率越高越清晰,图片像素越大 /// 拆分第几页事件回调 /// PDF识别结果 public static PDFOCRResult DetectTextPDF(this PaddleOCREngine engine, byte[] pdfbytes, float dpi = 150, Action pageAction = null) ``` 完整示例代码: ``` using PaddleOCRSharp; namespace ConsoleApp { internal class Program { static void Main(string[] args) { string pdf = "input.pdf"; PaddleOCREngine engine = new PaddleOCREngine(); DateTime dt1 = DateTime.Now; Action action = new Action(page => { Console.WriteLine($"正在处理第:{page}页"); }); var result = engine.DetectTextPDF(pdf,150, action); int pagecount = result.Pages.Count; Console.WriteLine($"总页数:{pagecount}"); DateTime dt2 = DateTime.Now; foreach (var page in result.Pages) { Console.WriteLine(page.Text); } Console.WriteLine($"总耗时:{(dt2 - dt1).TotalMilliseconds}ms"); Console.WriteLine($"平均耗时:{(dt2 - dt1).TotalMilliseconds / pagecount}ms"); Console.ReadLine(); } } } ``` 原文出处:http://malaoshi.top/show_1GW1PtCXjA3T.html