zoukankan      html  css  js  c++  java
  • c#调用刀片小票打印机

    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"] + "-
    " + dt.Rows[i]["dname"] + "	点菜员 - " + dt.Rows[i]["uname"] + "
    --------------------
    ";
    
                            for (int j = 0; j < dt_detail.Rows.Count; j++)
                            {
                                outPut += "
    
    "+dt_detail.Rows[j]["fname"] + "	" + dt_detail.Rows[j]["fnum"];
                                if (dt_detail.Rows[j]["remark"].ToString() != "")
                                {
                                    outPut += "   * " + dt_detail.Rows[j]["remark"] + "
    
    ";//菜品【口味】备注
                                }
                                UpdateStatus(orderId.ToString(), dt_detail.Rows[j]["id"].ToString(), orderTime);//修改该打印状态
                            }
    
                            outPut += "
    
    " + DateTime.Now + "
    
    
    
    
    
    ";
                            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

  • 相关阅读:
    使用 Apache OpenJPA 开发 EJB 3.0 应用,第 3 部分: 实体继承
    使用 Apache OpenJPA 开发 EJB 3.0 应用,第 2 部分: 开发第一个 Open JPA 应用
    使用 Apache OpenJPA 开发 EJB 3.0 应用,第 6 部分: 处理实体生命周期事件的回调
    http://www.oschina.net/question/129540_20547
    tomcat6实现远程调试
    FluorineFx和Flex配置
    今天才开通这个博客呀!
    vue中install方法
    Vue.nextTick 的原理和用途
    vue3.0中使用nextTick
  • 原文地址:https://www.cnblogs.com/soundcode/p/8109935.html
Copyright © 2011-2022 走看看