在Winform中的打印主要可以通过三种方式来实现:一种是使用Winform提供的类,另一种是使用控件,还有一种就是利用水晶报表的打印。
打印控件主要优势是方便快捷,一般应用于简单、固定、单调的模板打印,其主要常用控件有:
(1) PrintDocument:是一个可用于设置属性来描述有关打印的信息,并且可用于调用方法Print()或通过事件PrintPage来打印文档的组件。
(2) PrintDialog:允许用户选择打印机并指定文档中要打印的部分。
(3) PrintPreviewDialog:此控件是一个打印预览对话框,用于显示文档的打印效果。该控件包含用于打印、放大、显示一页或多页以及关闭对话框的按钮。
(4) PageSetupDialog:主要用来设置页面大小,页边距等。
------------------------------------------------------
建个winform工程,拖如上四个控件,再拖三个按钮
public Form1()
{
InitializeComponent();
this.printDialog1.Document = this.printDocument1;//必要的
this.printPreviewDialog1.Document = this.printDocument1;
this.pageSetupDialog1.Document = this.printDocument1;
}
private void button3_Click(object sender, EventArgs e)
{//打印
if (this.printDialog1.ShowDialog() == DialogResult.OK)
this.printDocument1.Print();
}
private void button1_Click(object sender, EventArgs e)
{//打印预览
this.printPreviewDialog1.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{//打印设置
this.pageSetupDialog1.ShowDialog();
}
{//双击printDocument控件, 这才是真正开始干活的,在这里面写你想要打印信息
Font font = new Font("Tahoma", 12, FontStyle.Underline);//设置画笔
Brush bru = Brushes.Blue;
Pen pen = new Pen(bru);
pen.Width = 5;
//设置各边距
int nLeft = this.pageSetupDialog1.PageSettings.Margins.Left;
int nTop = this.pageSetupDialog1.PageSettings.Margins.Top;
int nRight = this.pageSetupDialog1.PageSettings.Margins.Right;
int nBottom = this.pageSetupDialog1.PageSettings.Margins.Bottom;
int nWidth = this.pageSetupDialog1.PageSettings.PaperSize.Width-nRight-nLeft;
int nHeight = this.pageSetupDialog1.PageSettings.PaperSize.Height-nTop-nBottom;
//打印各边距
e.Graphics.DrawLine(pen, nLeft, nTop, nLeft, nTop + nHeight);
e.Graphics.DrawLine(pen, nLeft+nWidth, nTop, nLeft+nWidth, nTop + nHeight);
e.Graphics.DrawLine(pen, nLeft, nTop, nLeft+nWidth, nTop);
e.Graphics.DrawLine(pen, nLeft, nTop+nHeight, nLeft + nWidth, nTop+nHeight);
//在离左边距20,右边距20的位置打印
e.Graphics.DrawString("haha xixi", font, bru, nLeft+20, nTop+20);//如果要打印datagridView在这里遍历便可
}
但是如果想打印一张表的数据,我建义你使用水晶报表,这样就方便得多.
水晶报表(Crystal Report)是业内最专业、功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。在VS.Net平台 做过报表开发的程序员,一定都对水晶报表强大、高效、集成等特性留下了深刻印象。除了开发新程序外,在工作中我们常需要接触到很多较早的软件系统报表功能升级的需求,如果能结合水晶报表这一强大的工具,往往能事半功倍。
因为有些打印效果需要分类汇总、规范的页面格式、预览等,而水晶报表都能方便高效的实现。如打印药品入库清单,需要用到表格的样式,且对总消费求和;处方笺的打印也需要绘制规范的格式,同时还可以利用自带的公式进行相应的数据加工。
其实现过程:首先建立一个DataSet.xsd文件,在上面创建需要的Table模板,table中的列都将是水晶报表要用到的;其次通过报表专家进行水晶报表的创建,包括需要显示的字段,需要汇总求和的数据,基本样式等都可逐步实现,完成后也可做相应的样式和数据修改;最后把数据库里的数据查询出来,赋给水晶报表数据源,通过CrystalReportView控件展示给用户。通过自带的打印,导出等工具,可以方便的进行操作。