在windows应用程序中文档的打印是一项非常重要的功能,在打印程序的设计中复杂难度最大的属于打印功能设置,因为中途需要计算一些复杂的计算过程。比如页面开始打印的起始位置和结束位置,换行,分页等。
例图1
vs2013自带了打印控件。基本可以满足打印与打印预览的需求。
个别打印特殊要求需要重写控件功能。
本程序使用五种打印需要的控件分别是:
PrintDocument 打印输出控件
PrintDialog 构造对话框控件 -> 打印设置功能
PageSetupDialog 构造对话框控件 -> 页面设置功能
PrintPreviewDialog 构造对话框控件 -> 打印预览功能
PrintPreviewControl 打印预览控件 -> 独立的打印预览显示
例图2
实现打印功能的核心是PrintDocument类,该类的代码命名空间是System.Drawing.Printing,封装了当前的打印设置页面以及所有的与打印有关的事件和方法。
这个类包括以下几个属性,事件和方法
属性部分
1、PrinterSettings属性
存放打印机的设置信息,这个属性不需要程序员设置,因为它是由打印对话框获取的
2、PrintCountroller属性
控制打印过程
3、DefaultPageSettings属性
存放页面设置信息,打印纸大小方向等。也不需要程序员设置,因为它是由页面设置对话框获取的。
4、DocumentName属性
指定文档名称,出现在打印机状态窗口中事件与方法
BeginPrint
在将要打印文档时发生。
PrintPage
对于要打印的每一页发生一次。事件接受一个PrintPageEventArgs参数该参数封装了打印相关的信息。
PrintPageEventArgs参数有很多重要的属性
1、Cancel 取消打印
2、Graphics 页面的绘图对象
3、HasMorePages 是否还有要打印的页面
Print方法:该方法没有参数 调用它将按照当前设置开始打印.
首先先拉四个控件
// printDocument1
//
this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage);
//
// printDialog1
//
this.printDialog1.UseEXDialog = true;
//
// printPreviewDialog1
//
this.printPreviewDialog1.AutoScrollMargin = new System.Drawing.Size(0, 0);
this.printPreviewDialog1.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this.printPreviewDialog1.ClientSize = new System.Drawing.Size(400, 300);
this.printPreviewDialog1.Enabled = true