1. 程式人生 > >c#調用刀片小票打印機

c#調用刀片小票打印機

close comm 字體大小 問題 mon 自動 tostring 8.0 設置字體大小

public static bool Print(int orderId, string orderTime)
        {
            bool b = true;

            string cut = ((char)29).ToString() + ((char)86).ToString() + ((char)1).ToString() + ((char)49).ToString();//發送切紙指令
            //byte[] byte_cut = System.Text.Encoding.Default.GetBytes(cut);
            //string font = ((char)1D).ToString() + ((char)21).ToString() + ((char)01).ToString()+ ((char)10).ToString() ;//文字大小

            byte[] fonts = new byte[] { 27, 82, 0 };//1D 21 選擇字體
            byte[] temp = new byte[] { 29, 33, 17 };//1D 21 選擇字體大小,0x01放大一倍

            byte[] bty_tmp = new byte[] { 29, 86, 1, 49 };//切紙
            byte[] Internal = System.Text.Encoding.Default.GetBytes(((char)27).ToString() + ((char)64).ToString());//初始化打印機


            System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
            System.Net.Sockets.NetworkStream stream = null;
            Int32 port = 9100;
            //string ipPrint = ConfigurationManager.ConnectionStrings["printIP"].ConnectionString;//獲取打印機名稱
            string ipPrint = "192.168.0.77";
            //string ipPrint =Common.Comm.readXml("/xml/setting.xml", "printIP");//讀取xml的IP
            try
            {
                //client.Connect("192.168.1.77", port);
                client.Connect(ipPrint, port);
                stream = client.GetStream();
                //是否支持寫入
                if (!stream.CanWrite)
                {
                    b = false;
                }
                Byte[] data;

                //按菜品類型和時間、單號、點菜員、訂單點菜備註 分組查詢
                string sql_query = "select tname,typeid,dname,uname,d.addtime,d.remark,count(fname)fnum"+
                " from   "+
                " p_orderDetailInfo d,p_orderinfo o, p_deskinfo desk, p_foodinfo f, p_foodType t,users u"+
                " where d.orderid=o.id and d.foodid=f.id and o.deskid=desk.id and f.typeid=t.id and u.id=d.userid"+
                " and o.id=" + orderId + " and d.addtime=‘" + orderTime + "‘ " +
                " group by tname,typeid,d.remark,dname,uname,d.addtime ";

                string sql_detail = "";


                DataTable dt = DbSqlHelper.ExecuteDataSet(CommandType.Text, sql_query).Tables[0];
                DataTable dt_detail = null;

                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        //當前該訂單的菜品信息
                        sql_detail = "select fname,count(fname) fnum,f.id ,userid,d.remark from "+
                        "p_orderDetailInfo d,p_foodinfo f "+
                        "where d.foodid=f.id and TypeID=" + dt.Rows[i]["typeid"] + " and d.addtime=‘" + orderTime + "‘ and orderid=" + orderId + "  group by fname,f.id ,userid,d.remark";

                        dt_detail = DbSqlHelper.ExecuteDataSet(CommandType.Text, sql_detail).Tables[0];
                        stream.Write(Internal, 0, Internal.Length);
                        stream.Write(fonts, 0, fonts.Length);//設置字體
                        stream.Write(temp, 0, temp.Length);//設置字體大小--關鍵

                        string outPut = "-" + dt.Rows[i]["tname"] + "-\n" + dt.Rows[i]["dname"] + "\t點菜員 - " + dt.Rows[i]["uname"] + "\n--------------------\n";

                        for (int j = 0; j < dt_detail.Rows.Count; j++)
                        {
                            outPut += "\n\n"+dt_detail.Rows[j]["fname"] + "\t" + dt_detail.Rows[j]["fnum"];
                            if (dt_detail.Rows[j]["remark"].ToString() != "")
                            {
                                outPut += "   * " + dt_detail.Rows[j]["remark"] + "\n\n";//菜品【口味】備註
                            }
                            UpdateStatus(orderId.ToString(), dt_detail.Rows[j]["id"].ToString(), orderTime);//修改該打印狀態
                        }

                        outPut += "\n\n" + DateTime.Now + "\n\n\n\n\n\n";
                        data = data = System.Text.Encoding.Default.GetBytes(outPut);
                        stream.Write(data, 0, data.Length);//輸出文字
                        outPut = ""; // 一個分類打印完成後清空。切紙

                        //stream.Write(Internal, 0, Internal.Length);
                        // data = System.Text.Encoding.Default.GetBytes(cut);
                        //stream.Write(data, 0, data.Length);

                        stream.Write(bty_tmp, 0, bty_tmp.Length);
                        //bty_tmp = new byte[] { 29, 86, 1, 49 };


                    }

                    //data = System.Text.Encoding.Default.GetBytes(cut);
                    //stream.Write(bty_tmp, 0, bty_tmp.Length);
                    //stream.Write(bty_tmp, 0, bty_tmp.Length);
                }
                //-----------------
            }
            catch
            {
                //打印機缺紙或者紙匣打開時,不會出現異常,不用特殊代碼判斷,數據不會丟失.
                b = false;
               
            }
            finally
            {
                stream.Close();
                stream.Dispose();
                client.Close();
            }
            return b;
        }

  

2年前的餐飲項目,在一些飯店已經運行了1年多了。

適用於熱敏刀片打印機,

運用在超市、飯店 等各種需要小票打印的場合。

打印完後,會自動切紙。

這裏有一個排版的問題,對齊不是很嚴格。

http://www.cnblogs.com/chenqilong/archive/2013/04/18/3028358.html

c#調用刀片小票打印機