查看: 43|回复: 0

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

[复制链接]

2

主题

0

回帖

0

积分

积极分子

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-8-25
发表于 2026-1-5 09:15:14 | 显示全部楼层 |阅读模式

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 安装

dotnet add package PdfiumViewer

2、引入 pdfium.dll(关键)

PdfiumViewer 必须依赖 pdfium.dll

  • x86 / x64 需与程序一致

常用来源:

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

推荐方式:

dotnet add package PdfiumViewer.Native.x64

WinForms / WPF / Console 都适用

4、实践样例

using PdfiumViewer;

using (var document = PdfDocument.Load("sample.pdf"))
{
    int pageCount = document.PageCount;
    Console.WriteLine($"PDF 页数:{pageCount}");
}

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

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

单页转图片

using PdfiumViewer;
using System.Drawing;

using (var document = PdfDocument.Load("sample.pdf"))
{
    int pageIndex = 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 全量转图片(批量处理)

using PdfiumViewer;
using System.Drawing.Imaging;

void ConvertPdfToImages(string pdfPath, string outputDir)
{
    using var document = PdfDocument.Load(pdfPath);

    Directory.CreateDirectory(outputDir);

    for (int i = 0; i < document.PageCount; i++)
    {
        using var image = document.Render(i, 300, 300, PdfRenderFlags.Annotations);
        string path = Path.Combine(outputDir, $"page_{i + 1}.jpg");
        image.Save(path, ImageFormat.Jpeg);
    }
}

常用于:

  • PDF → OCR
  • PDF → 归档图片
  • PDF → OpenCV 图像处理流水线

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

using PdfiumViewer;

using var 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)

转为像素:

int dpi = 300;
int widthPx = (int)(size.Width / 72 * dpi);
int heightPx = (int)(size.Height / 72 * dpi);

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

实战四:提取 PDF 文本内容

using PdfiumViewer;

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

string text = document.GetPdfText(0);
Console.WriteLine(text);

注意事项:

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

常见用途:

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

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

using PdfiumViewer;

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

pictureBox1.Image = document.Render(
    0,
    pictureBox1.Width,
    pictureBox1.Height,
    true
);

实际项目中可实现:

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

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

using PdfiumViewer;
using System.Drawing;

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

var pageSize = document.PageSizes[0];

RectangleF crop = new RectangleF(
    0,
    0,
    pageSize.Width / 2,
    pageSize.Height / 2
);

using var image = document.Render(
    0,
    300,
    300,
    crop,
    PdfRenderFlags.None
);

image.Save("crop.png");

常用于:

  • 表格区域识别
  • 公章 / 签名区域截取
  • OCR 局部增强

5、总结

PdfiumViewer 是 C# 世界中处理 PDF 解析与渲染的利器

  • 简单
  • 高效
  • 稳定
  • 非商业免费

如果你的项目涉及:

  • PDF → 图片
  • OCR 前处理
  • WinForms / WPF 桌面工具
  • 批量文档处理

PdfiumViewer 是非常值得优先选择的方案

以上就是C#使用PdfiumViewer库处理PDF文件的实践方法的详细内容,更多关于C# PdfiumViewer处理PDF文件的资料请关注琼殿技术社区其它相关文章!

您可能感兴趣的文章:
  • C#开发者必备的PDF文档高效处理操作指南
  • C#处理PDF的高级操作应用指南
  • C#利用itext实现PDF页面处理与切分
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部