private void button2_Click(object sender, EventArgs e) { //打印預覽 PrintPreviewDialog ppd = new PrintPreviewDialog(); PrintDocument pd = new PrintDocument();
//設置邊距 Margins margin = new Margins(20, 20, 20, 20); pd.DefaultPageSettings.Margins = margin;
////紙張設置默認 PaperSize pageSize = new PaperSize("First custom size", getYc(58), 600); pd.DefaultPageSettings.PaperSize = pageSize;
//打印事件設置 pd.PrintPage += new PrintPageEventHandler(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, new PrintEventArgs()); } } |
這裏的代碼主要是獲取需要打印的內容,在實際運用中這裏要改成動態的哦
private int getYc(double cm) { return (int)(cm / 25.4) * 100; }
public string GetPrintStr() { StringBuilder sb = new StringBuilder();
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(); } |
打印效果如下:
對於目前的理解,前些天學的設計模式,感覺在這裏好像可以用到模板模式和裝飾模式,我的理由是:關於收銀打印和後廚打印的樣式、風格會不同,將來也可能會改動,所以,如果把它設置成模板就好了,根據模板來打印,將來要換風格的話,直接更換模板即可(這只是我的個人理解)。而每個小票樣式都有頭、主題、尾,根據這些組合似乎可以使用裝飾模式哈….這只是我的一想法,待以後我會是試試看。