概述
C# winform中的打印方式
在开发winform时,有时候会需要用到打印功能,在项目中原有的打印功能是先放一个模板文件,然后将自己需要打印的文件,放入模板文件,最后再打印出来。这样的实现方式是可以实现大多数的打印的,但是因为我从事的是工业互联网,服务的客户的硬件设备都还是比较落后的,有的系统还是win7,设置还有xp系统,这样就可能会导致格式不兼容的问题。比如最近客户要求打印的时候直接打印出发票格式,不想点击纸张格式来设置。用项目中原有的方法,在win10系统下,可以通过设置文件的打印格式,或者是设置打印机的首选项来满足客户的需求,但是我的客户用的是xp系统,无论我这边通过代码还是文件指定,又或者是指定打印机首选项都不能满足客户需求,最后我选择了重新绘制的方法来重新实现打印功能。在记录这种方法之前还是先学习一下项目中原有的打印功能,这样更能加深印象,而且在第一种方法可以满足客户需求的前提下,第一种实现方法要比第二种方便很多。
使用Excel.workbook来实现
首先在在管理解决方案的nuget中下载安装Microsoft.office.Interop.Excel。然后主要实现的代码如下:
Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.Application();
//打开模板文件
byte[] buff = Properties.Resources.OC2;
File.WriteAllBytes("OC2.xls", buff);
string path = Application.StartupPath; //获取当前路径
Microsoft.Office.Interop.Excel.Workbook book = myExcel.Application.Workbooks.Add(path + @"OC2.xls");
Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets[1];
//指定为横向打印
xlSheet.PageSetup.Orientation = Microsoft.Office.Interop.Excel.XlPageOrientation.xlPortrait;
//指定纸张大小
xlSheet.PageSetup.PaperSize = Microsoft.Office.Interop.Excel.XlPaperSize.xlPaperA4;
//这里就是赋值过程,是给指定excle单元格赋值
xlSheet.Cells[2, 9].Value += wp.getProcessNameStr(this.mProcCheckInfo.ProcId);
xlSheet.Cells[3, 1].Value += this.mProcCheckInfo.MoldNum;
xlSheet.PrintPreview();//打印预览
可以看的到这里的赋值过程是比较清楚的,就是将我们需要打印出来的值赋值到我们的模板excel文件中去。最后再调用打印来打印文件。
自已绘制指定纸张大小打印
上面有一行代码是指点纸张大小,默认的有常见的纸张大小,并不能自定义纸张大小。为了实现自定义纸张大小,首先要在页面中添加PrintDocument控件和PrintPreviewDialog控件。具体实现部分代码如下:
//指定纸张大小,这里的单位是英寸不是厘米,需要计算一下,百度上有换算计算机
this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custom", 800, 551);
this.printDocument1.PrintPage += new PrintPageEventHandler(this.MyPrintDocument_PrintPage);
private void MyPrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//画图
Image newImage = Properties.Resources.logor;
//前两个数表示起始点坐标,后两个点表示长宽
e.Graphics.DrawImage(newImage, 40, 20, 180, 60);
//this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custom", 820, 700);
/*如果需要改变自己 可以在new Font(new FontFamily("黑体"),11)中的“黑体”改成自己要的字体就行了,黑体 后面的数字代表字体的大小
System.Drawing.Brushes.Blue , 170, 10 中的 System.Drawing.Brushes.Blue 为颜色,后面的为输出的位置 */
e.Graphics.DrawString("制造有限公司", new Font(new FontFamily("黑体"), 12), System.Drawing.Brushes.Black, 310, 20);
e.Graphics.DrawString("施工单", new Font(new FontFamily("黑体"), 10), System.Drawing.Brushes.Black, 350, 60);
//信息的名称
e.Graphics.DrawString("NO."+this.mProcCheckInfo.ExtnNum, new Font(new FontFamily("黑体"), 10), System.Drawing.Brushes.Black, 660, 60);
e.Graphics.DrawLine(Pens.Black, 10, 80, 765, 80);
//画线
e.Graphics.DrawLine(Pens.Black, 10, 80, 10, 505);
//写字
e.Graphics.DrawString("外协件名称:" + this.mProcCheckInfo.MoldNum, new Font(new FontFamily("黑体"), 10), System.Drawing.Brushes.Black, 15, 90);
}
通过自己写字和画图,来实现一个表格,可以指定笔的颜色,粗细,字体的大小等,也可以画图,基本上是可以实现所有的打印的,但是画图的过程还是比较麻烦的,要一条一条边去画,还要如果大小不合适,所有的线和文字的坐标又需要重新算一遍。同时,如果电脑连接多台打印机,会选择默认打印机,不会让我们选择打印机,所以要提前设置好默认打印机。
最后
以上就是健壮翅膀为你收集整理的C# winform中的打印文件的实现方式的全部内容,希望文章能够帮你解决C# winform中的打印文件的实现方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复