VB.NET中如何将PrintDocument(含e.Graphics内容)保存为PDF
解决方案:VB.NET实现PrintDocument保存为PDF及打印逻辑优化
一、打印对话框逻辑说明
你当前的btnPrint_Click代码已经正确实现了打印机选择流程:先弹出PrintDialog让用户选择打印机,确认后才执行打印。如果之前直接调用PrintDocument1.Print()未弹出对话框,是因为缺少了PrintDialog的调用步骤,当前代码的打印逻辑是正常的。
二、实现Save按钮保存为PDF功能
要将PrintDocument中的绘图内容保存为PDF,我们使用轻量易用的PdfSharp库来实现,步骤如下:
1. 安装PdfSharp库
打开Visual Studio的NuGet包管理器,搜索并安装PdfSharp.Drawing(包含PDF创建和绘图核心功能)。
2. 代码修改
(1)添加必要命名空间
在代码顶部补充:
Imports PdfSharp.Drawing Imports PdfSharp.Pdf
(2)修复PrintPage事件的内存泄漏
将PrintDocument1_PrintPage_1中的Font对象放入Using块,确保资源自动释放:
Private Sub PrintDocument1_PrintPage_1(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage Using font As New Font("Arial", 16, FontStyle.Regular) e.Graphics.DrawString("Hello World", font, Brushes.Black, 200, 200) End Using End Sub
(3)实现Save按钮的PDF保存逻辑
填充btnSave_Click的代码:
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click ' 弹出文件保存对话框,让用户选择PDF存储路径 Using saveDialog As New SaveFileDialog() saveDialog.Filter = "PDF 文件 (*.pdf)|*.pdf" saveDialog.Title = "保存为PDF" saveDialog.FileName = "我的文档.pdf" ' 设置默认文件名 If saveDialog.ShowDialog() = DialogResult.OK Then ' 创建新的PDF文档 Dim pdfDoc As New PdfDocument() pdfDoc.Info.Title = "打印内容导出PDF" ' 添加PDF页面,页面大小与PrintDocument的设置保持一致 Dim pdfPage As PdfPage = pdfDoc.AddPage() pdfPage.Size = PdfSharp.PageSizeConverter.ToPdfSharpSize(PrintDocument1.DefaultPageSettings.PaperSize) ' 获取PDF页面的绘图上下文 Using gfx As XGraphics = XGraphics.FromPdfPage(pdfPage) ' 模拟PrintPageEventArgs,将PDF的绘图对象传入 Dim printArgs As New PrintPageEventArgs( gfx, New RectangleF(0, 0, pdfPage.Width.Point, pdfPage.Height.Point), New RectangleF(0, 0, pdfPage.Width.Point, pdfPage.Height.Point), PrintDocument1.DefaultPageSettings ) ' 调用PrintPage事件,把内容绘制到PDF上 PrintDocument1_PrintPage_1(PrintDocument1, printArgs) End Using ' 保存PDF文件到用户选择的路径 pdfDoc.Save(saveDialog.FileName) MessageBox.Show("PDF保存成功!") End If End Using End Sub
(4)修正按钮事件绑定问题
你的btnSetting_Click事件绑定的是Button3.Click,请确保窗体上的设置按钮Name属性为Button3,或修改为按钮的实际名称(比如btnSetting):
Private Sub btnSetting_Click(sender As Object, e As EventArgs) Handles btnSetting.Click PageSetupDialog1.Document = PrintDocument1 PageSetupDialog1.Document.DefaultPageSettings.Color = False PageSetupDialog1.ShowDialog() End Sub
三、测试说明
- 点击Save按钮会弹出保存对话框,选择路径后即可生成包含
Hello World内容的PDF文件。 - 点击Print按钮会弹出打印机选择界面,确认后执行打印操作。
内容的提问来源于stack exchange,提问作者cindyy
相关产品推荐
相关产品推荐

