前几节讲了PrintDialog、PageSetupDialog,实际对应了打印机设置、页面设置,
但是,光靠设置是不能完成打印的。
本节讲的PrintDocument就是完成打印的组件。
PrintDocument提供了Print()方法,实际触发它的PrintPage()事件,在该事件中完成打印。
同时,PrintDocument组件还提供了EndPrint()事件,通过这个事件,可以获知打印完成情况。
直接看例子:
来看具体的代码:
'按下打印按钮 Private Sub Button4_Click(sender As Object,e As EventArgs) Handles Button4.Click PrintDialog1.Document = PrintDocument1 If PrintDialog1.ShowDialog = DialogResult.OK Then TextBox1.Text &= "开始打印" & ControlChars.CrLf PrintDocument1.Print() End If End Sub '打印页面 Private Sub PrintDocument1_PrintPage(sender As Object,e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim g As Graphics = e.Graphics g.DrawRectangle(New Pen(New SolidBrush(Color.Red),2),New Rectangle(10,100,60)) g.DrawString("这是一个打印的例子",New Font("宋体",20),New SolidBrush(Color.Blue),New Point(10,62)) g.DrawImage(PictureBox1.Image,600,400),New Rectangle(0,PictureBox1.Image.Width,PictureBox1.Image.Height),GraphicsUnit.Pixel) End Sub '打印完毕 Private Sub PrintDocument1_EndPrint(sender As Object,e As PrintEventArgs) Handles PrintDocument1.EndPrint TextBox1.Text &= "打印完毕" End Sub
我先将代码做个分析,看完你就会觉得很简单:
在PrintPage事件中才是真正的打印:
PrintPage的参数e,这是一个PrintPageEventArgs类,提供了6个属性:
Cancel:指示是否取消打印。
Graphics:只读,提供了在打印页面上绘图的Graphic。
HasMorePages:指示是否还要继续打印。
MarginBounds:只读,表示边距以内的页面部分的矩形区域。
PageBounds:只读,表示页面全部区域的矩形区域。
PageSettings:只读,当前页的页设置,是一个PageSettings类。
Graphics:只读,提供了在打印页面上绘图的Graphic。
HasMorePages:指示是否还要继续打印。
MarginBounds:只读,表示边距以内的页面部分的矩形区域。
PageBounds:只读,表示页面全部区域的矩形区域。
PageSettings:只读,当前页的页设置,是一个PageSettings类。
最后打印完毕,触发PrintDocument1的EndPrint事件。
来看看运行情况:
按下打印按钮
由于我的电脑上没有真实的打印机,选择Xps虚拟打印机(这也是安装office后微软提供的虚拟打印机),按下打印对话框中的”打印“按钮,
接着就会出现保存文件对话框:
好了,按下”保存“,马上就会提示打印完毕:
来看看刚才保存的”dd.oxps“文件,双击就可以使用默认的 xps查看器 打开:
再提醒一下,如果是真实打印机,那么就不会打印到文件。
学习更多vb.net知识,请参看
vb.net 教程 目录