[C#]Winform实现打印功能
380 Views
2017.10.9更新
使用组件reportview可以很好的解决打印问题,比原生的打印组件好用很多。
C#自带的printDocument可以解决简单打印,但是实际运用起来效果不是很好。先记录printDocument的使用方法以及存在的问题。等找到了更好的方法以后做替换。
参考http://www.cnblogs.com/freeliver54/archive/2010/10/20/1856978.html
1、新建打印窗体,在窗体中取一个panel比例大致为1:1.414,在panel中添加各项组件构成打印纸张。
2、将pageSetupDialog、printDialog、printDocument、printPreviewDialog四个控件添加到窗体中
3、为pageSetupDialog1、printDialog1、printPreviewDialog1的document属性设为printDocument1
4、创建预览、打印设置、打印按钮,点击事件绑定到pageSetupDialog1、printDialog1、printPreviewDialog1
5、为printDocument1添加printDocument1_PrintPage事件
//打印
private void btn_dy_Click(object sender, EventArgs e)
{
if (this.printDialog1.ShowDialog() == DialogResult.OK)
{
this.printDocument1.Print();
}
}
//预览
private void btn_yl_Click(object sender, EventArgs e)
{
//ShowDialog方法:将窗体显示为模式对话框,并将当前活动窗口设置为它的所有者
this.printPreviewDialog1.ShowDialog();
}
//打印设置
private void btn_sz_Click(object sender, EventArgs e)
{
this.pageSetupDialog1.ShowDialog();
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
////打印内容 为 整个Form
//Image myFormImage;
//myFormImage = new Bitmap(this.Width, this.Height);
//Graphics g = Graphics.FromImage(myFormImage);
//g.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, this.Size);
//e.Graphics.DrawImage(myFormImage, 0, 0);
//打印内容 为 局部的 this.groupBox1
Bitmap _NewBitmap = new Bitmap(dayin_panel.Width, dayin_panel.Height);
dayin_panel.DrawToBitmap(_NewBitmap, new Rectangle(0, 0, _NewBitmap.Width, _NewBitmap.Height));
e.Graphics.DrawImage(_NewBitmap, 0, 0, _NewBitmap.Width, _NewBitmap.Height);
////打印内容 为 自定义文本内容
//Font font = new Font("宋体", 12);
//Brush bru = Brushes.Blue;
//for (int i = 1; i <= 5; i++)
//{
// e.Graphics.DrawString("Hello world ", font, bru, i * 20, i * 20);
//}
}
结果虽然能生成打印页,但是很模糊,而且不知道怎么默认打印设置。打印时会因为电脑分辨率的原因出现很大的位置偏差。最后,还不能实现分页打印。怎么解决这些问题只能尝试其他办法了