[C#]Winform实现打印功能

153 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);
    //}
}

结果虽然能生成打印页,但是很模糊,而且不知道怎么默认打印设置。打印时会因为电脑分辨率的原因出现很大的位置偏差。最后,还不能实现分页打印。怎么解决这些问题只能尝试其他办法了

留下回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据