C#使用PdfiumViewer库处理PDF文件的实践方法

C#使用PdfiumViewer库处理PDF文件的实践方法 1、简述在 C# 项目中处理 PDF 是一个高频但复杂的需求例如预览 PDF 页面将 PDF 转为图片JPG / PNG / TIFF获取 PDF 页数、尺寸信息提取文本内容配合 OCR、归档、批处理系统使用相比 iText偏编辑/生成或 PDFBoxJavaPdfiumViewer 更适合“解析 渲染”场景尤其在 Windows 桌面程序WinForms / WPF中表现非常优秀。2、什么是 PdfiumViewerPdfiumViewer是一个基于Google PDFium 引擎的 .NET 封装库主要特点高性能 PDF 渲染原生支持 PDF → BitmapAPI 简洁易上手非商业许可免费仅支持 Windows依赖 pdfium.dll适合以下场景WinForms / WPF PDF 预览器PDF 批量转图片PDF 页面级解析与 OpenCV / OCRTesseract联动PdfiumViewer 的核心能力功能是否支持获取 PDF 页数✅渲染为 Bitmap✅指定 DPI 渲染✅提取文本✅页面裁切✅编辑 PDF❌非设计目标3、安装 PdfiumViewer1、NuGet 安装1dotnet add package PdfiumViewer2、引入 pdfium.dll关键PdfiumViewer必须依赖 pdfium.dllx86 / x64 需与程序一致常用来源PdfiumViewer.Native.x86PdfiumViewer.Native.x64推荐方式1dotnet add package PdfiumViewer.Native.x64WinForms / WPF / Console 都适用4、实践样例1234567usingPdfiumViewer;using(var document PdfDocument.Load(sample.pdf)){intpageCount document.PageCount;Console.WriteLine($PDF 页数{pageCount});}这是所有 PDF 处理流程的起点。实战一PDF 渲染为 Bitmap核心功能单页转图片1234567891011121314151617usingPdfiumViewer;usingSystem.Drawing;using(var document PdfDocument.Load(sample.pdf)){intpageIndex 0;// 300 DPI 高清渲染var image document.Render(pageIndex,300,300,PdfRenderFlags.Annotations);image.Save(page1.png, System.Drawing.Imaging.ImageFormat.Png);}参数说明参数含义pageIndex从 0 开始dpiX / dpiY分辨率建议 200–300RenderFlags是否包含注释实战二PDF 全量转图片批量处理12345678910111213141516usingPdfiumViewer;usingSystem.Drawing.Imaging;voidConvertPdfToImages(stringpdfPath,stringoutputDir){usingvar document PdfDocument.Load(pdfPath);Directory.CreateDirectory(outputDir);for(inti 0; i document.PageCount; i){usingvar image document.Render(i, 300, 300, PdfRenderFlags.Annotations);stringpath Path.Combine(outputDir, $page_{i 1}.jpg);image.Save(path, ImageFormat.Jpeg);}}常用于PDF → OCRPDF → 归档图片PDF → OpenCV 图像处理流水线实战三获取 PDF 页面尺寸像素 / 物理尺寸12345678usingPdfiumViewer;usingvar document PdfDocument.Load(sample.pdf);var size document.PageSizes[0];Console.WriteLine($宽{size.Width} pt);Console.WriteLine($高{size.Height} pt);PDF 中单位是Point1 pt 1/72 inch转为像素123intdpi 300;intwidthPx (int)(size.Width / 72 * dpi);intheightPx (int)(size.Height / 72 * dpi);对齐 OpenCV、图像裁切时非常关键。实战四提取 PDF 文本内容123456usingPdfiumViewer;usingvar document PdfDocument.Load(sample.pdf);stringtext document.GetPdfText(0);Console.WriteLine(text);注意事项仅适用于文本型 PDF扫描件图片 PDF需 OCR表格结构会被打平常见用途关键字定位文档分类索引构建实战五结合 WinForms 显示 PDF 页面12345678910usingPdfiumViewer;PdfDocument document PdfDocument.Load(sample.pdf);pictureBox1.Image document.Render(0,pictureBox1.Width,pictureBox1.Height,true);实际项目中可实现上一页 / 下一页缩放滚动预览实战六PDF 页面裁切后渲染区域提取1234567891011121314151617181920212223usingPdfiumViewer;usingSystem.Drawing;usingvar document PdfDocument.Load(sample.pdf);var pageSize document.PageSizes[0];RectangleF crop newRectangleF(0,0,pageSize.Width / 2,pageSize.Height / 2);usingvar image document.Render(0,300,300,crop,PdfRenderFlags.None);image.Save(crop.png);常用于表格区域识别公章 / 签名区域截取OCR 局部增强5、总结PdfiumViewer 是 C# 世界中处理 PDF 解析与渲染的利器简单高效稳定非商业免费如果你的项目涉及PDF → 图片OCR 前处理WinForms / WPF 桌面工具批量文档处理PdfiumViewer 是非常值得优先选择的方案。