如何在 VB.NET 项目中使用 pdfium.dll(PDFium 引擎)和 PdfiumViewer.dll(基于 PDFium 的 .NET 控件),来实现 PDF 文档的渲染和显示呢?
其实已经有比较好的库来实现发票的合并打印功能了,现在简单说明下基本用法。也把成品案例提供出来。不想自己写的可以直接用。
https://download.youkuaiyun.com/download/lucifercxw/90185252
准备工作
-
下载 PDFium 库:
-
访问 https://github.com/pvginkel/PdfiumViewer,下载最新版本的 PdfiumViewer NuGet 包或直接下载包含 pdfium.dll 和 PdfiumViewer.dll 的 zip 文件。
-
解压文件后,您应该找到 pdfium.dll (x86 或 x64 版本,取决于您的应用程序目标平台) 以及 PdfiumViewer.dll。
-
-
创建 VB.NET 项目:
-
在 Visual Studio 中创建一个新的 Windows Forms 应用程序项目 (或 WPF 应用程序,代码稍有不同)。
-
-
添加引用:
-
右键单击您的项目,选择“添加” -> “引用”。
-
浏览并选择 PdfiumViewer.dll。 点击“确定”。
-
-
复制 pdfium.dll:
-
将 pdfium.dll 文件复制到您的项目输出目录(通常是 bin\Debug 或 bin\Release 文件夹)。
-
注意: 确保 pdfium.dll 的架构(x86 或 x64)与您的应用程序架构匹配。
-
代码示例 (Windows Forms)
下面是一个简单的示例,演示如何在 Windows Forms 应用程序中显示 PDF 文档:
Imports System.IO
Imports PdfiumViewer
Imports System.Drawing
Public Class Form1
Private pdfViewer As PdfiumViewer.PdfViewer
Private pdfDocument As PdfDocument
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 创建 PDF 查看器控件
pdfViewer = New PdfiumViewer.PdfViewer()
pdfViewer.Dock = DockStyle.Fill
Me.Controls.Add(pdfViewer)
'加载 PDF 文档
Dim pdfFilePath As String = Path.Combine(Application.StartupPath, "example.pdf") ' 假设您的 PDF 文件在项目输出目录
If File.Exists(pdfFilePath) Then
Try
pdfDocument = PdfDocument.Load(pdfFilePath)
pdfViewer.Document = pdfDocument
Catch ex As Exception
MessageBox.Show("加载PDF文件失败: " + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Else
MessageBox.Show("PDF文件未找到: " + pdfFilePath, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
'释放资源
If pdfDocument IsNot Nothing Then
pdfDocument.Dispose()
End If
End Sub
End Class
代码详解:
-
Imports 语句: 导入需要的命名空间,System.IO 用于文件操作,PdfiumViewer 用于 PDFium 查看器控件。
-
pdfViewer 变量: 声明一个 PdfiumViewer.PdfViewer 类型的变量,用于存储 PDF 查看器控件实例。
-
pdfDocument 变量: 声明一个 PdfDocument 类型的变量, 用于存储打开的PDF文档实例。
-
Form1_Load 事件处理程序:
-
创建 PdfViewer 控件: 创建一个新的 PdfViewer 实例,并设置其 Dock 属性为 DockStyle.Fill,使其填充整个窗体。然后将其添加到窗体的控件集合中。
-
加载 PDF 文档:
-
使用 Path.Combine 构建 PDF 文件的完整路径,这里假设 example.pdf 文件位于应用程序的输出目录中。
-
使用 File.Exists 检查文件是否存在。
-
如果文件存在,使用 PdfDocument.Load 方法加载 PDF 文档。
-
如果成功加载,将 pdfDocument 赋值给 pdfViewer.Document属性,从而在控件中显示 PDF 文档。
-
使用 Try...Catch 结构来捕获加载过程中可能发生的错误,并显示错误消息。
-
-
未找到 PDF 文件处理: 如果文件不存在,显示一个错误消息。
-
-
Form1_FormClosing 事件处理程序:
-
在窗口关闭时,确保释放PdfDocument 实例占用的资源,防止内存泄漏。
-
如何使用
-
将上面的代码复制到您的 Form1.vb 文件中。
-
在您的项目输出目录中放入一个名为 example.pdf 的 PDF 文件(或者修改代码中的文件名和路径)。
-
运行您的应用程序。您应该看到 PDF 文档在窗体中正确显示。
注意事项
-
pdfium.dll 版本: 确保您使用的 pdfium.dll 版本与您的应用程序的架构(x86 或 x64)匹配。
-
文件路径: 正确配置 pdfium.dll 的路径以及要加载的 PDF 文件的路径。
-
错误处理: 在代码中添加适当的错误处理逻辑,以捕获加载 PDF 文档时可能发生的异常。
-
资源释放: 在窗体关闭时,释放 PdfDocument 对象所占用的资源,防止内存泄漏。
-
高级功能: PdfiumViewer 还提供了其他一些功能,例如缩放、旋转、打印等。您可以参考 https://github.com/pvginkel/PdfiumViewer 提供的文档进行学习。
-
WPF 应用: 如果您使用 WPF,您需要使用 PdfiumViewer.Wpf.PdfViewer 控件,并适当调整代码,但核心逻辑仍然类似。
-
NuGet 包: 您也可以使用 NuGet 包管理器安装 PdfiumViewer,它会自动处理依赖关系,无需手动复制 pdfium.dll。
-
性能: pdfium.dll 的性能非常高,但如果需要处理大量 PDF 文档或复杂的 PDF,仍然需要考虑性能优化,如异步加载或按需渲染。
大家赶紧去试试吧!