当前位置: 首页 > news >正文

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

1、简述

在 C# 项目中处理 PDF 是一个高频但复杂的需求,例如:

  • 预览 PDF 页面
  • 将 PDF 转为图片(JPG / PNG / TIFF)
  • 获取 PDF 页数、尺寸信息
  • 提取文本内容
  • 配合 OCR、归档、批处理系统使用

相比 iText(偏编辑/生成)或 PDFBox(Java),
PdfiumViewer 更适合“解析 + 渲染”场景,尤其在 Windows 桌面程序(WinForms / WPF)中表现非常优秀。

2、什么是 PdfiumViewer?

PdfiumViewer是一个基于Google PDFium 引擎的 .NET 封装库,主要特点:

  • 高性能 PDF 渲染
  • 原生支持 PDF → Bitmap
  • API 简洁,易上手
  • 非商业许可(免费)
  • 仅支持 Windows(依赖 pdfium.dll)

适合以下场景:

  • WinForms / WPF PDF 预览器
  • PDF 批量转图片
  • PDF 页面级解析
  • 与 OpenCV / OCR(Tesseract)联动

PdfiumViewer 的核心能力:

功能是否支持
获取 PDF 页数
渲染为 Bitmap
指定 DPI 渲染
提取文本
页面裁切
编辑 PDF❌(非设计目标)

3、安装 PdfiumViewer

1、NuGet 安装

1

dotnet add package PdfiumViewer

2、引入 pdfium.dll(关键)

PdfiumViewer必须依赖 pdfium.dll

  • x86 / x64 需与程序一致

常用来源:

  • PdfiumViewer.Native.x86
  • PdfiumViewer.Native.x64

推荐方式:

1

dotnet add package PdfiumViewer.Native.x64

WinForms / WPF / Console 都适用

4、实践样例

1

2

3

4

5

6

7

usingPdfiumViewer;

using(var document = PdfDocument.Load("sample.pdf"))

{

intpageCount = document.PageCount;

Console.WriteLine($"PDF 页数:{pageCount}");

}

这是所有 PDF 处理流程的起点。

实战一:PDF 渲染为 Bitmap(核心功能)

单页转图片

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

usingPdfiumViewer;

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–300)
RenderFlags是否包含注释

实战二:PDF 全量转图片(批量处理)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

usingPdfiumViewer;

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 → OCR
  • PDF → 归档图片
  • PDF → OpenCV 图像处理流水线

实战三:获取 PDF 页面尺寸(像素 / 物理尺寸)

1

2

3

4

5

6

7

8

usingPdfiumViewer;

usingvar document = PdfDocument.Load("sample.pdf");

var size = document.PageSizes[0];

Console.WriteLine($"宽:{size.Width} pt");

Console.WriteLine($"高:{size.Height} pt");

PDF 中单位是Point(1 pt = 1/72 inch)

转为像素:

1

2

3

intdpi = 300;

intwidthPx = (int)(size.Width / 72 * dpi);

intheightPx = (int)(size.Height / 72 * dpi);

对齐 OpenCV、图像裁切时非常关键。

实战四:提取 PDF 文本内容

1

2

3

4

5

6

usingPdfiumViewer;

usingvar document = PdfDocument.Load("sample.pdf");

stringtext = document.GetPdfText(0);

Console.WriteLine(text);

注意事项:

  • 仅适用于文本型 PDF
  • 扫描件(图片 PDF)需 OCR
  • 表格结构会被打平

常见用途:

  • 关键字定位
  • 文档分类
  • 索引构建

实战五:结合 WinForms 显示 PDF 页面

1

2

3

4

5

6

7

8

9

10

usingPdfiumViewer;

PdfDocument document = PdfDocument.Load("sample.pdf");

pictureBox1.Image = document.Render(

0,

pictureBox1.Width,

pictureBox1.Height,

true

);

实际项目中可实现:

  • 上一页 / 下一页
  • 缩放
  • 滚动预览

实战六:PDF 页面裁切后渲染(区域提取)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

usingPdfiumViewer;

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 是非常值得优先选择的方案

http://www.jsqmd.com/news/878571/

相关文章:

  • OpenWebUI 到底解决了什么,没解决什么?
  • 在自动化脚本中使用 Taotoken 实现多模型 API 的轮询与降级策略
  • DeepSeek训练数据准备终极 checklist(2024Q3最新版):涵盖CC-100兼容性、Wikipedia时间切片、代码许可证合规性、多语言熵均衡等17项硬性审计项
  • 【信息科学与工程学】【通信工程】第四篇 通信网络的数学架构 03 城域网中的组合数学方程02
  • ComfyUI-Impact-Pack V8终极指南:掌握AI图像智能修复与细节增强的3大核心技巧
  • DLSS Swapper深度解析:让游戏帧率轻松翻倍的智能管家
  • 包头白蚁消杀防治中心靠谱推荐|金盾虫控 青蚁卫士:资深虫害防控品牌,一站式解决白蚁危害难题 - 卓信营销
  • 从0到1跑通DeepSeek-Coder:火山引擎Serverless推理服务全流程(含Code Interpreter沙箱安全加固步骤)
  • 深度解析硬件隐私保护工具:5大核心技术实现设备伪装与指纹防护
  • DeepSeek工具调用失败率突增237%?紧急发布:2024Q3工具注册中心变更公告与向后兼容迁移方案(72小时倒计时)
  • 告别低效操作!用League Akari英雄联盟本地化效率工具提升你的游戏表现
  • GitHub中文界面终极汉化指南:5分钟告别英文困扰
  • 暗黑破坏神2存档编辑器:打造你的个性化游戏体验
  • DeepSeek告警响应SLA达成率提升至99.95%的终极配置——仅限头部AI基建团队内部流通的12项隐性参数调优表
  • 深入解析防水套管:从国标02S404到工程应用,巩义金达供水如何构筑管道安全防线 - 品牌优选官
  • 在模型广场中根据任务需求选择合适的Taotoken模型
  • 深入解析tsMuxer:高效无损视频封装解决方案与实战配置指南
  • PVEL-AD数据集:如何重塑工业质检的算法基准?
  • 如何用韭菜盒子插件彻底改变你的投资工作流?VSCode中的金融数据革命
  • 微信小程序数据可视化:为什么ECharts组件是你的最佳选择?
  • DeepSeek身份认证集成深度解析(企业级SSO落地全链路拆解)
  • 3分钟搞定9大网盘下载加速:LinkSwift直链解析工具全攻略
  • 图像分割中的‘信息最大化’:手撕MaxEntropy最大熵阈值法,从公式推导到Python实现
  • 每日一个开源项目 #110:ai-engineering-from-scratch - 从零构建 AI 工程全栈能力
  • 量子机器学习在电力系统隐蔽攻击检测中的应用
  • UnrealPakViewer深度解析:可视化分析虚幻引擎Pak文件的终极指南
  • 如何高效使用Monitorian:3个智能自动化技巧解放你的双手
  • LogExpert终极指南:5步解决Windows日志分析的核心痛点
  • JiYuTrainer:打破数字课堂束缚,重获学习自主权的终极方案
  • ComfyUI-WanVideoWrapper完整指南:10分钟掌握AI视频动画制作技巧