WPF中使用PDFium显示PDF, 支持.NET Core 和 .NET Framework

简介在Web大行其道的今天,客户端应用被忽视,WPF技术也变的小众,很多技术方案更新跟不上。调研了一些显示在WPF中显示PDF的方案,分享出来备用。

技术栈介绍

  1. WPF
    Windows Presentation Foundation 是创建桌面客户端应用程序的 UI 框架。 WPF 开发平台支持广泛的应用开发功能,包括应用模型、资源、控件、图形、布局、数据绑定、文档和安全性。
    WPF 是 .net 的一部分,因此,如果以前使用 ASP.NET 或 Windows 窗体通过 .net 生成了应用程序,则应熟悉编程体验。 WPF 使用 Extensible Application Markup Language (XAML),为应用编程提供声明性模型。
  2. PDFium
    PDFium 是 Chromium 的 PDF 渲染引擎,许可协议为 BSD 3-Clause。不同于 Mozilla 基于 HTML5 的 PDF.js,PDFium 是基于 Foxit Software (福昕软件)的渲染代码,Google 与其合作开源出的。

步入正题

在WPF中显示PDF需要用到大神们已经对PDFium封装好的组件 PdfiumViewer (Nuget中可以搜到)。

开源地址:GitHub - pvginkel/PdfiumViewer: PDF viewer based on Google​'s PDFium.

我在实际使用中发现 Pieter van Ginkel 开源的原版 PdfiumViewer 存在一些Bug,但是作者已经较长时间不更新了,所以只能亲自动手修复遇到的Bug。

修复后的开源地址:https://github.com/91651/PdfiumViewer ,为了方便使用也发布了Nuget包

Install-Package PDFium.Viewer.WPF

新包支持 .net framework4.6.1+、netcoreapp3.1、net5.0、net6.0

另外,需要安装 PdfiumViewer 的依赖包,PdfiumViewer.Native.x86.v8-xfa 和 PdfiumViewer.Native.x86_64.v8-xfa (虽然 PdfiumViewer 中显示引用了前面两个依赖,但是实测不能自动安装,需要手动在项目中添加引用)

完成 PdfiumViewer的安装,推荐使用 PDFium.Viewer.WPF,在需要显示PDF的页面添加以下代码

// 添加引用
xmlns:PdfiumViewer="clr-namespace:PdfiumViewer;assembly=PDFium.Viewer.WPF"
// 添加组件
<PdfiumViewer:PdfRenderer Name="PdfiumViewer" PagesDisplayMode="ContinuousMode"  SnapsToDevicePixels="True" UseLayoutRounding="True" />
// 添加加载PDF的代码
private void LoadPdf(byte[] source)
{
    Dispatcher.Invoke(() =>
    {
        PdfiumViewer.OpenPdf(new MemoryStream(source));
        PdfiumViewer.SetZoomMode(PdfViewerZoomMode.FitWidth);
    });
}

效果预览:

WPF显示PDF

PDF工具栏为Demo自定义添加,实际使用中可以自行选择。

本站发布的文章受知识共享协议保护,转载、收录请标明出处。

评论


昵称:   邮箱:

PdfiumViewer.Native.x86.v8-xfa 和 PdfiumViewer.Native.x86_64.v8-xfa 这2个包,不能正常引入,提示不是一个有效的程序集,这个要怎么解决?

Top
An error has occurred. This application may no longer respond until reloaded.Reload 🗙