VB.NET中从PrintDocument导出PDF时图片缺失问题求助
VB.NET打印预览保存PDF图片缺失的解决方法
问题原因
直接使用PictureBox.Image在打印页面绘制时,可能因GDI+对打印上下文的处理差异,导致PDF保存阶段无法正确渲染图片;另外未正确释放字体等资源,也可能间接影响打印输出稳定性。
解决方案
- 将PictureBox中的图片转换为
Bitmap对象,确保打印上下文能正确识别图片资源 - 调整绘制坐标,避免图片超出打印页面边界
- 用
Using语句自动释放字体、图片等资源,防止内存泄漏 - 可选:设置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
相关产品推荐
相关产品推荐

