You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

三、测试说明

  1. 点击Save按钮会弹出保存对话框,选择路径后即可生成包含Hello World内容的PDF文件。
  2. 点击Print按钮会弹出打印机选择界面,确认后执行打印操作。

内容的提问来源于stack exchange,提问作者cindyy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:25:37