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

VB.NET中从PrintDocument导出PDF时图片缺失问题求助

VB.NET打印预览保存PDF图片缺失的解决方法

问题原因

直接使用PictureBox.Image在打印页面绘制时,可能因GDI+对打印上下文的处理差异,导致PDF保存阶段无法正确渲染图片;另外未正确释放字体等资源,也可能间接影响打印输出稳定性。

解决方案

  1. 将PictureBox中的图片转换为Bitmap对象,确保打印上下文能正确识别图片资源
  2. 调整绘制坐标,避免图片超出打印页面边界
  3. 用Using语句自动释放字体、图片等资源,防止内存泄漏
  4. 可选:设置PrintDocument的默认页面参数,匹配纸张尺寸需求

修改后的代码

Public Class Form2
    Private Sub PrintDocument2_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument2.PrintPage
        ' 初始化绘制坐标
        Dim XPos As Integer = 300
        Dim YPos As Integer = 20

        ' 使用Using自动释放字体资源
        Using headerFont As New Font("Arial", 18)
            e.Graphics.DrawString("Stack Overflow is Best", headerFont, Brushes.Black, XPos + 30, YPos)
        End Using

        YPos += 125 ' 合并原代码中两次YPos累加操作

        ' 检查PictureBox是否加载了图片
        If PictureBox2.Image IsNot Nothing Then
            ' 将图片转换为Bitmap,消除打印上下文的兼容性问题
            Using printBitmap As New Bitmap(PictureBox2.Image)
                ' 定义绘制区域
                Dim drawRect As New Rectangle(XPos - 200, YPos + 50, 300, 300)
                ' 确保绘制区域在打印页面范围内
                If e.PageBounds.IntersectsWith(drawRect) Then
                    e.Graphics.DrawImage(printBitmap, drawRect)
                End If
            End Using
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
        ' 设置默认纸张为A4(可选,根据需求调整)
        PrintDocument2.DefaultPageSettings.PaperSize = New System.Drawing.Printing.PaperSize(System.Drawing.Printing.PaperName.A4, 827, 1169)
        PrintPreviewDialog2.Document = PrintDocument2
        PrintPreviewDialog2.ShowDialog()
    End Sub
End Class

关键说明

  • Using语句会在代码块结束后自动释放Font和Bitmap资源,避免GDI+资源占用导致的异常
  • 转换为Bitmap对象后,打印上下文能更稳定地处理图片渲染,解决PDF保存时的图片缺失问题
  • 增加图片存在性检查和页面边界校验,避免空引用异常或图片被绘制到页面外

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:45:39