爱上倪的酒 發表於 2026-1-5 09:15:14

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

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>1、简述</li><li>2、什么是 PdfiumViewer?</li><ul class="second_class_ul"><li>PdfiumViewer 的核心能力:</li></ul><li>3、安装 PdfiumViewer</li><ul class="second_class_ul"><li>1、NuGet 安装</li><li>2、引入 pdfium.dll(关键)</li><li>常用来源:</li></ul><li>4、实践样例</li><ul class="second_class_ul"><li>实战一:PDF 渲染为 Bitmap(核心功能)</li><ul class="third_class_ul"><li>单页转图片</li></ul><li>实战二:PDF 全量转图片(批量处理)</li><ul class="third_class_ul"></ul><li>实战三:获取 PDF 页面尺寸(像素 / 物理尺寸)</li><ul class="third_class_ul"><li>转为像素:</li></ul><li>实战四:提取 PDF 文本内容</li><ul class="third_class_ul"></ul><li>实战五:结合 WinForms 显示 PDF 页面</li><ul class="third_class_ul"></ul><li>实战六:PDF 页面裁切后渲染(区域提取)</li><ul class="third_class_ul"></ul></ul><li>5、总结</li><ul class="second_class_ul"></ul></ul></div><p class="maodian"></p><h2>1、简述</h2>
<p>在 C# 项目中处理 PDF 是一个<strong>高频但复杂</strong>的需求,例如:</p>
<ul><li>预览 PDF 页面</li><li>将 PDF 转为图片(JPG / PNG / TIFF)</li><li>获取 PDF 页数、尺寸信息</li><li>提取文本内容</li><li>配合 OCR、归档、批处理系统使用</li></ul>
<p>相比 iText(偏编辑/生成)或 PDFBox(Java),<br /><strong>PdfiumViewer 更适合&ldquo;解析 + 渲染&rdquo;场景</strong>,尤其在 Windows 桌面程序(WinForms / WPF)中表现非常优秀。</p>
<p class="maodian"></p><h2>2、什么是 PdfiumViewer?</h2>
<p><strong>PdfiumViewer</strong> 是一个基于 <strong>Google PDFium 引擎</strong> 的 .NET 封装库,主要特点:</p>
<ul><li>高性能 PDF 渲染</li><li>原生支持 PDF &rarr; Bitmap</li><li>API 简洁,易上手</li><li>非商业许可(免费)</li><li>仅支持 Windows(依赖 pdfium.dll)</li></ul>
<p>适合以下场景:</p>
<ul><li>WinForms / WPF PDF 预览器</li><li>PDF 批量转图片</li><li>PDF 页面级解析</li><li>与 OpenCV / OCR(Tesseract)联动</li></ul>
<p class="maodian"></p><h3>PdfiumViewer 的核心能力:</h3>
<table><thead><tr><th style="text-align: center;">功能</th><th style="text-align: center;">是否支持</th></tr></thead><tbody><tr><td style="text-align:center">获取 PDF 页数</td><td style="text-align:center">✅</td></tr><tr><td style="text-align:center">渲染为 Bitmap</td><td style="text-align:center">✅</td></tr><tr><td style="text-align:center">指定 DPI 渲染</td><td style="text-align:center">✅</td></tr><tr><td style="text-align:center">提取文本</td><td style="text-align:center">✅</td></tr><tr><td style="text-align:center">页面裁切</td><td style="text-align:center">✅</td></tr><tr><td style="text-align:center">编辑 PDF</td><td style="text-align:center">❌(非设计目标)</td></tr></tbody></table>
<p class="maodian"></p><h2>3、安装 PdfiumViewer</h2>
<p class="maodian"></p><h3>1、NuGet 安装</h3>
<div class="jb51code"><pre class="brush:bash;">dotnet add package PdfiumViewer
</pre></div>
<p class="maodian"></p><h3>2、引入 pdfium.dll(关键)</h3>
<p>PdfiumViewer <strong>必须依赖 pdfium.dll</strong>:</p>
<ul><li>x86 / x64 需与程序一致</li></ul>
<p class="maodian"></p><h3>常用来源:</h3>
<ul><li>PdfiumViewer.Native.x86</li><li>PdfiumViewer.Native.x64</li></ul>
<p>推荐方式:</p>
<div class="jb51code"><pre class="brush:bash;">dotnet add package PdfiumViewer.Native.x64
</pre></div>
<blockquote><p>WinForms / WPF / Console 都适用</p></blockquote>
<p class="maodian"></p><h2>4、实践样例</h2>
<div class="jb51code"><pre class="brush:csharp;">using PdfiumViewer;

using (var document = PdfDocument.Load("sample.pdf"))
{
    int pageCount = document.PageCount;
    Console.WriteLine($"PDF 页数:{pageCount}");
}
</pre></div>
<p>这是所有 PDF 处理流程的起点。</p>
<p class="maodian"></p><h3>实战一:PDF 渲染为 Bitmap(核心功能)</h3>
<p class="maodian"></p><h4>单页转图片</h4>
<div class="jb51code"><pre class="brush:csharp;">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);
}
</pre></div>
<p>参数说明:</p>
<table><thead><tr><th>参数</th><th>含义</th></tr></thead><tbody><tr><td>pageIndex</td><td>从 0 开始</td></tr><tr><td>dpiX / dpiY</td><td>分辨率(建议 200&ndash;300)</td></tr><tr><td>RenderFlags</td><td>是否包含注释</td></tr></tbody></table>
<p class="maodian"></p><h3>实战二:PDF 全量转图片(批量处理)</h3>
<div class="jb51code"><pre class="brush:csharp;">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 &lt; 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);
    }
}
</pre></div>
<p>常用于:</p>
<ul><li>PDF &rarr; OCR</li><li>PDF &rarr; 归档图片</li><li>PDF &rarr; OpenCV 图像处理流水线</li></ul>
<p class="maodian"></p><h3>实战三:获取 PDF 页面尺寸(像素 / 物理尺寸)</h3>
<div class="jb51code"><pre class="brush:csharp;">using PdfiumViewer;

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

var size = document.PageSizes;

Console.WriteLine($"宽:{size.Width} pt");
Console.WriteLine($"高:{size.Height} pt");
</pre></div>
<blockquote><p>PDF 中单位是 <strong>Point(1 pt = 1/72 inch)</strong></p></blockquote>
<p class="maodian"></p><h4>转为像素:</h4>
<div class="jb51code"><pre class="brush:csharp;">int dpi = 300;
int widthPx = (int)(size.Width / 72 * dpi);
int heightPx = (int)(size.Height / 72 * dpi);
</pre></div>
<p>对齐 OpenCV、图像裁切时非常关键。</p>
<p class="maodian"></p><h3>实战四:提取 PDF 文本内容</h3>
<div class="jb51code"><pre class="brush:csharp;">using PdfiumViewer;

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

string text = document.GetPdfText(0);
Console.WriteLine(text);
</pre></div>
<p>注意事项:</p>
<ul><li>仅适用于 <strong>文本型 PDF</strong></li><li>扫描件(图片 PDF)需 OCR</li><li>表格结构会被打平</li></ul>
<p>常见用途:</p>
<ul><li>关键字定位</li><li>文档分类</li><li>索引构建</li></ul>
<p class="maodian"></p><h3>实战五:结合 WinForms 显示 PDF 页面</h3>
<div class="jb51code"><pre class="brush:csharp;">using PdfiumViewer;

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

pictureBox1.Image = document.Render(
    0,
    pictureBox1.Width,
    pictureBox1.Height,
    true
);
</pre></div>
<p>实际项目中可实现:</p>
<ul><li>上一页 / 下一页</li><li>缩放</li><li>滚动预览</li></ul>
<p class="maodian"></p><h3>实战六:PDF 页面裁切后渲染(区域提取)</h3>
<div class="jb51code"><pre class="brush:csharp;">using PdfiumViewer;
using System.Drawing;

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

var pageSize = document.PageSizes;

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");
</pre></div>
<p>常用于:</p>
<ul><li>表格区域识别</li><li>公章 / 签名区域截取</li><li>OCR 局部增强</li></ul>
<p class="maodian"></p><h2>5、总结</h2>
<p><strong>PdfiumViewer 是 C# 世界中处理 PDF 解析与渲染的利器</strong>:</p>
<ul><li>简单</li><li>高效</li><li>稳定</li><li>非商业免费</li></ul>
<p>如果你的项目涉及:</p>
<ul><li>PDF &rarr; 图片</li><li>OCR 前处理</li><li>WinForms / WPF 桌面工具</li><li>批量文档处理</li></ul>
<p><strong>PdfiumViewer 是非常值得优先选择的方案</strong>。</p>
<p>以上就是C#使用PdfiumViewer库处理PDF文件的实践方法的详细内容,更多关于C# PdfiumViewer处理PDF文件的资料请关注琼殿技术社区其它相关文章!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>C#开发者必备的PDF文档高效处理操作指南</li><li>C#处理PDF的高级操作应用指南</li><li>C#利用itext实现PDF页面处理与切分</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: C#使用PdfiumViewer库处理PDF文件的实践方法