C# 打印小票 POS

主要用到PrintDocumentPrintPreviewDialog两个对象一个用来打印,一个用来阅览,如果在设置模板OK后,若果人流量比较多的话就直接打印不必在阅览,这样会快好多。

其他的也不多少了,下面来看具体的实现:

privatevoid button2_Click(object sender, EventArgs e)

{

//打印预览 

PrintPreviewDialog ppd = newPrintPreviewDialog();

PrintDocument pd = newPrintDocument();

//设置边距

Margins margin = newMargins(20, 20, 20, 20);

pd.DefaultPageSettings.Margins = margin;

////纸张设置默认

PaperSize pageSize = newPaperSize("First custom size", getYc(58), 600);

pd.DefaultPageSettings.PaperSize = pageSize;

//打印事件设置 

pd.PrintPage += newPrintPageEventHandler(this.pd_PrintPage);

ppd.Document = pd;

ppd.ShowDialog();

try

{

pd.Print();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "打印出错"MessageBoxButtons.OK, MessageBoxIcon.Error);

pd.PrintController.OnEndPrint(pd, newPrintEventArgs());

}

}

这里的代码主要是获取需要打印的内容,在实际运用中这里要改成动态的哦

privateint getYc(double cm) 

{

return (int)(cm / 25.4) * 100;

}

publicstring GetPrintStr() 

{

StringBuilder sb = newStringBuilder(); 

string tou = "伊尹餐饮公司";

string address = "深圳市罗湖区东门老街29";

string saleID = "2010930233330";

string item = "项目";

decimal price = 25.00M;

int count = 5;

decimal total = 0.00M;

decimal fukuan = 500.00M;

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

sb.Append("-----------------------------------------------------------------\n");

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

sb.Append("-----------------------------------------------------------------\n");

sb.Append("项目" + "\t\t" + "数量" + "\t" + "单价" + "\t" + "小计" + "\n");

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

{

decimal xiaoji = (i+1) * price; 

sb.Append(item + (i+1) + "\t\t" + (i+1) + "\t" + price + "\t" + xiaoji);

total += xiaoji;

if (i != (count))

sb.Append("\n");

}

sb.Append("-----------------------------------------------------------------\n");

sb.Append("数量: " + count + 合计: " + total+"\n");

sb.Append("付款现金" + " " + fukuan);

sb.Append(" 现金找零:" + " " + (fukuan - total) + "\n");

sb.Append("-----------------------------------------------------------------\n");

sb.Append("地址:" + address + "\n");

sb.Append("电话:123456789 123456789\n");

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

return sb.ToString();

}

打印效果如下:

 

对于目前的理解,前些天学的设计模式,感觉在这里好像可以用到模板模式和装饰模式,我的理由是:关于收银打印和后厨打印的样式、风格会不同,将来也可能会改动,所以,如果把它设置成模板就好了,根据模板来打印,将来要换风格的话,直接更换模板即可(这只是我的个人理解)。而每个小票样式都有头、主题、尾,根据这些组合似乎可以使用装饰模式哈.这只是我的一想法,待以后我会是试试看。

你可能感兴趣的:(C#)