C#小票打印(通用)
之前打印都是用串口,现在很多打印机都是USB接口的,换了USB接口的打印机后,USB接口的程序一直没办法打印,后来调用厂商的DLL,但很麻烦,在网上找了很多,都没有找到合适的,之后参考了PrintDocument类一些打印方法,测试成功,贴出代码,如有不对的地方,和需要优化的,请指出。
首先:
//定义一个字符串流,用来接收所要打印的数据
privateStringReadersr;
//str要打印的数据
publicboolPrint(stringstr)
{
boolresult=true;
try
{
sr=newStringReader(sb.ToString());
PrintDocumentpd=newPrintDocument();
pd.PrintController=newSystem.Drawing.Printing.StandardPrintController();
pd.DefaultPageSettings.Margins.Top=2;
pd.DefaultPageSettings.Margins.Left=0;
pd.DefaultPageSettings.PaperSize.Width=320;
pd.DefaultPageSettings.PaperSize.Height=5150;
pd.PrinterSettings.PrinterName=pd.DefaultPageSettings.PrinterSettings.PrinterName;//默认打印机
pd.PrintPage+=newPrintPageEventHandler(this.pd_PrintPage);
pd.Print();
}
catch(Exceptionex)
{
result=false;
}
finally
{
if(sr!=null)
sr.Close();
}
returnresult;
}
privatevoidpd_PrintPage(objectsender,PrintPageEventArgsev)
{
FontprintFont=newFont("Arial",9);//打印字体
floatlinesPerPage=0;
floatyPos=0;
intcount=0;
floatleftMargin=ev.MarginBounds.Left;
floattopMargin=ev.MarginBounds.Top;
Stringline="";
linesPerPage=ev.MarginBounds.Height/printFont.GetHeight(ev.Graphics);
while(count<linesPerPage&&((line=sr.ReadLine())!=null))
{
yPos=topMargin+(count*printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString(line,printFont,Brushes.Black,
leftMargin,yPos,newStringFormat());
count++;
}
//Ifmorelinesexist,printanotherpage.
if(line!=null)
ev.HasMorePages=true;
else
ev.HasMorePages=false;
}
调用Print(stringstr)方法就可以打印啦!
例:StringBuildersb=newStringBuilder();
sb.Append("益民停车场管理系统\n");
sb.Append("*************************************\n");
sb.Append("进场时间:"+DateTime.Now.ToString()+"\n");
sb.Append("出场时间:"+DateTime.Now.AddHours(2).ToString()+"\n");
sb.Append("停车时长:2小时\n");
sb.Append("停车收费:5元\n");
sb.Append("*************************************\n");
Print(stringsb.toString());
另外:此方法不管是串口,并口,还是USB接口的打印机都可以调用,前提是一定要将打印机设为默认打印机。如果要关闭打印机,可设一个BOOL变量,如果为true则调用,否则不调用。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。