博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# PrintDocument打印
阅读量:4353 次
发布时间:2019-06-07

本文共 3191 字,大约阅读时间需要 10 分钟。

前段时间开发项目时接触到了打印模块,以前做的打印都是托管指令集打印([DllImport("winspool.drv")]),可是在某些环境和不同打印机测试时会有偶尔几个打印机出现乱码,找来找去找不到解决方案,于是就打算换成.Net的Print打印类进行打印。

因为搜集到的资料有绝大部分都很浪费口舌,且代码难易度不适合初学者,索性,写一个来巩固自己,也可顺应其他人的东西。

-----------------------------初次撰文,如有错误,请留言指示。谢咯-----------------------

.Net打印程序使用起来是非常简单的,绝大部分已经封装完毕,只需要简单的创建实例和调用方法,以及定义打印格式而已。

PrintDocument---进行打印时,将输出发送到打印机的可重用对象。

声明此对象后,可针对于打印时需要修改的格式字体等属性进行修改。

例如:PrintDocument.DefaultPageSettings.Margins 对象,顾名思义,Margins边距的意思,在PrintDocument声明后调用时是用来获取或者设置页边距的属性,和CSS里的margin类似。

声明PrintDocument对象  PrintDocument printDocument = new PrintDocument();

声明Margins对象 Margins margins = new Margins(int32 left,right,top,bottom);

对DefaultPageSettings.Margins赋值  printDocument.DefaultPageSettings.Margins = margins;

DefaultPageSettings对象是页面设置对象,用做打印时所有默认的设置。例如:PageSize(纸张大小设置) PageSource(纸张来源设置)。

当设置完毕后,可以直接调用PrintDocument的Print()对象进行打印。

打印前需要创建PrintDocument_PrintPrintPage事件,而打印页面的设置和打印方式(DrawString,DrawImage)和打印格式,都在此定义。

代码事例:

private void printDocument_PrintPage(object sender, PrintPageEventArgs ev)    

{            

  Font titleFont = new Font("宋体", 9, FontStyle.Bold);//标题字体            

  Font fntTxt = new Font("宋体", 9, FontStyle.Regular);//正文文字            

  Brush brush = new SolidBrush(Color.Black);//画刷            

  Pen pen = new Pen(Color.Black);           //线条颜色            

  Point po = new Point(10, 10);            

  try            

  {                

    e.Graphics.DrawString(GetPrintSW.ToString(), titleFont, brush,po);   //DrawString方式进行打印。         

  }            

  catch (Exception ex)            

  {                

     MessageBox.Show(this, "打印出错!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);            

  }

}

///GetPrintSw方法用来构造打印文本,内部StringBuilder.AppendLine在Drawstring时单独占有一行。

public StringBuilder GetPrintSW()        

 {            

  StringBuilder sb = new StringBuilder();            

  string tou = "测试管理公司名称";            

  string address = "河南洛阳";            

  string saleID = "2010930233330";    //单号        

  string item = "项目";            

  decimal price = 25.00M;            

  int count = 5;            

  decimal total = 0.00M;            

  decimal fukuan = 500.00M;            

  sb.AppendLine(" " + tou + " \n");            

  sb.AppendLine("-----------------------------------------");            

  sb.AppendLine("日期:" + DateTime.Now.ToShortDateString() + " " + "单号:" + saleID);            

  sb.AppendLine("-----------------------------------------");            

  sb.AppendLine("项目" + "      " + "数量" + "    " + "单价" + "    " + "小计");            

  for (int i = 0; i < count; i++)            

  {                

  decimal xiaoji = (i + 1) * price;                

  sb.AppendLine(item + (i + 1) + "      " + (i + 1) + "     " + price + "    " + xiaoji);                

  total += xiaoji;            

  }            

  sb.AppendLine("-----------------------------------------");            

  sb.AppendLine("数量:" + count + "  合计: " + total);            

  sb.AppendLine("付款:" + fukuan);            

  sb.AppendLine("现金找零:" + (fukuan - total));            

  sb.AppendLine("-----------------------------------------");            

  sb.AppendLine("地址:" + address + "");            

  sb.AppendLine("电话:123456789 123456789");            

  sb.AppendLine("谢谢惠顾欢迎下次光临 ");            

  sb.AppendLine("-----------------------------------------");            

  return sb;        

}

 

//在打印页面创建PrintDocument对象 

PrintDocument pd = new PrintDocument();

//如果需要打印预览,可以声明打印预览变量,预览这一部分,这里不再介绍,博客园里相应代码多到没边,可以自行查询。

//打印按钮事件:

private void btnPrint_Click(object sender, EventArgs e)        

 {            

  pd.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); //打印页面需指定相应的PrintDocument_PrintPrintPage事件委托      

  CommonUtils.Printer.Print(pd);

}

转载于:https://www.cnblogs.com/smallsoftfox/archive/2012/06/25/2562736.html

你可能感兴趣的文章
RasAPI函数实现PPPOE拨号
查看>>
Lowest Bit(虽然很简单)
查看>>
Git详细教程(2)---多人协作开发
查看>>
SQA
查看>>
【系统安全性】三、加密算法
查看>>
rabbitMQ学习(三)
查看>>
连接Oracle11g数据库时遇到无监听,网络适配器无法建立等问题的一些解决办法...
查看>>
form input限制
查看>>
SVN Berkeley DB Cannot allocate memory解决方案
查看>>
springboot 日志框架
查看>>
菜单栏按钮用控件的Name值在后台操作时出现异常解决
查看>>
Java集合
查看>>
vue中的组件传值
查看>>
Loader 和URLLoader的区别.
查看>>
世界级的安卓测试开发流!
查看>>
战略性情绪分析的5大数据来源
查看>>
Python-匿名函数
查看>>
关于foreach中对集合执行Add或者Remove操作引发枚举值被修改异常
查看>>
java学习笔记(1)
查看>>
event事件坐标
查看>>