C# 列印小票 POS
C# 列印小票 POS
最近在寫一個餐飲的收銀系統,以前從來沒有碰過印表機這玩意。感覺有些無從下手,在前面做報表時,總想找第三方的控制元件來用用,結果始終不行沒搞定、沒研究透,催得急沒辦法還是的動手自己寫個,哈...查了些相關的資料,感覺也不難,沒多久就搞定了。主要用到PrintDocument和PrintPreviewDialog兩個物件,一個用來列印,一個用來閱覽,如果在設定模板OK後,若果人流量比較多的話就直接列印不必在閱覽,這樣會快好多。
其他的也不多少了,下面來看具體的實現:
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(); } |
列印效果如下:
對於目前的理解,前些天學的設計模式,感覺在這裡好像可以用到模板模式和裝飾模式,我的理由是:關於收銀列印和後廚列印的樣式、風格會不同,將來也可能會改動,所以,如果把它設定成模板就好了,根據模板來列印,將來要換風格的話,直接更換模板即可(這只是我的個人理解)。而每個小票樣式都有頭、主題、尾,根據這些組合似乎可以使用裝飾模式哈….這只是我的一想法,待以後我會是試試看。
相關文章
- electron + vue專案實現列印小票功能Vue
- 重複造輪子系列——基於FastReport設計列印模板實現桌面端WPF套打和商超POS高度自適應小票列印AST
- Java 實現 POS 印表機無驅列印Java
- 有贊零售小票列印跨平臺解決方案
- 外賣小程式對接飛鵝小票列印的實現
- shortcut switch in terminal start pos & end pos
- js連線小票印表機JS
- c#列印99乘法表C#
- PoS RPCRPC
- c#之tcbs 列印憑證示例C#
- 在C#裡實現DATAGRID的列印預覽和列印 (轉)C#
- c#列印三角形C#
- Web列印外掛實現思路(C#/Winform)WebC#ORM
- C#中直接列印Report檔案(rdlc)C#
- C#條碼生成及列印例項程式碼C#
- c# Log 日誌 以及不列印重複LogC#
- POS機行業特點行業
- POS請求API介面樣例API
- 大俠們 誰用 C#做過 USB指令列印的?C#
- mysql MASTER_POS_WAIT函式MySqlASTAI函式
- 以太坊的POS共識機制
- C# 熱敏印表機 Socket 網路連結 列印 圖片C#
- mybatis : ERROR. token : COMMA, pos : 373MyBatisError
- Qtum量子鏈Staking(PoS挖礦)教程QT
- SAP RETAIL 商品主資料POS檢視AI
- 用javascript完成pos機的輸入輸出JavaScript
- 路由技術詳解--路由器POS接入路由器
- C#通過反射獲取物件屬性,列印所有欄位屬性的值C#反射物件
- Web 列印Web
- Java列印Java
- 列印流
- 印萌自助列印系統,如何提升傳統列印店的列印效率?
- 共識演算法PoS及Go語言實現演算法Go
- 路由器技術詳解--路由器POS接入路由器
- SAP印表機原理、列印配置及列印操作
- 雲列印比線下列印店便宜嗎?
- 拉美地區POS支付方式(附原資料表)
- 共識演算法之爭(PBFT,Raft,PoW,PoS,DPoS,Ripple)演算法Raft