Split Container内标签打印无内容问题求助
解决SplitContainer内容打印空白的问题
原代码存在的问题
- 创建的Bitmap尺寸为1x1,完全无法容纳SplitContainer的内容,DrawToBitmap操作后图像仍是空白状态。
- 没有将生成的图像绘制到打印页的Graphics上下文,相当于未把内容输出到打印介质。
- 在PrintPage事件中设置PrinterName时机错误,此时打印流程已启动,该设置不会生效。
修复方案及代码
- 提前在打印前指定目标打印机
- 创建与SplitContainer尺寸匹配的Bitmap,确保完整容纳容器内容
- 调用SplitContainer自身的DrawToBitmap方法绘制内容,保证只打印目标区域
- 将生成的Bitmap绘制到打印页的Graphics对象上,支持位置调整或缩放
修正后的代码:
Private Sub cmdPrint_Click(sender As Object, e As EventArgs) Handles cmdPrint.Click ' 打印前指定目标打印机 PrintDocument1.PrinterSettings.PrinterName = cboPrinter.Text PrintDocument1.Print() End Sub Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage ' 创建与SplitContainer尺寸一致的Bitmap,Using语句自动释放资源 Using bmp As New Bitmap(SplitContainer1.ClientSize.Width, SplitContainer1.ClientSize.Height) ' 让SplitContainer绘制自身及子控件到Bitmap SplitContainer1.DrawToBitmap(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height)) ' 将Bitmap绘制到打印页,(10,10)为打印起始偏移量 e.Graphics.DrawImage(bmp, 10, 10) ' 可选:按纸张比例缩放打印内容 ' Dim scale As Single = e.MarginBounds.Width / bmp.Width ' e.Graphics.DrawImage(bmp, e.MarginBounds.X, e.MarginBounds.Y, bmp.Width * scale, bmp.Height * scale) End Using End Sub
内容的提问来源于stack exchange,提问作者BrianJ_NYC
相关产品推荐
相关产品推荐

