C# 打印小票 POS

主要用到PrintDocumentPrintPreviewDialog兩個對象一個用來打印,一個用來閱覽,若是在設置模板OK後,若果人流量比較多的話就直接打印沒必要在閱覽,這樣會快好多。設計模式

其餘的也很少少了,下面來看具體的實現:ui

privatevoid button2_Click(object sender, EventArgs e)this

{spa

//打印預覽 設計

PrintPreviewDialog ppd = newPrintPreviewDialog();對象

PrintDocument pd = newPrintDocument();事件

//設置邊距ip

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

pd.DefaultPageSettings.Margins = margin;get

////紙張設置默認

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();

}

打印效果以下:

 

對於目前的理解,前些天學的設計模式,感受在這裏好像能夠用到模板模式和裝飾模式,個人理由是:關於收銀打印和後廚打印的樣式、風格會不一樣,未來也可能會改動,因此,若是把它設置成模板就行了,根據模板來打印,未來要換風格的話,直接更換模板便可(這只是個人我的理解)。而每一個小票樣式都有頭、主題、尾,根據這些組合彷佛可使用裝飾模式哈.這只是個人一想法,待之後我會是試試看。

相關文章
相關標籤/搜索