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