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"] + "-\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

时间: 2024-10-08 00:34:56

c#调用刀片小票打印机的相关文章

.net 调用小票打印机 打印票据

public class PrintInvoice     { #region 01.获得打印机1获得吧台打印机2获得后厨打印机 /// <summary> /// 获得打印机1获得吧台打印机2获得后厨打印机 /// </summary> public TcpClient GetPrint(int n = 1) { var client = new System.Net.Sockets.TcpClient(); var bll = new PrintAndPlaceBll(); v

转:C#并口热敏小票打印机打印位图

最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: [html] view plaincopy class LptControl { private string LptStr = "lpt1"; public LptControl(string l_LPT_Str) { LptStr = l_LPT_Str; } [StructLayout(LayoutKind.Sequential)] pr

C#并口热敏小票打印机打印位图包括芯片的写入

下面是打印所需要调用的代码: class LptControl { private string LptStr = "lpt1"; public LptControl(string l_LPT_Str) { LptStr = l_LPT_Str; } [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal; int InternalHigh; int Offset; int OffSe

小票打印机乱码问题

-------------------------------------- editor:YeungChi date:2016/3/29 describe:小票打印机乱码问题 文章内容:一.参数解释 二.串口连接打印机设置案例 -------------------------------------- 串口是一种非常通用的设备通信的协议: 一.参数解释 波特率 这是一个衡量符号传输速率的参数.它表示每秒钟传送的符号的个数.例如300波特表示每秒钟发送300个符号.当我们提到时钟周期时,我们就

串口小票打印机打印乱码问题

-------------------------------------- editor:YeungChi date:2016/3/29 describe:小票打印机乱码问题 文章内容:一.参数解释 二.串口连接打印机设置案例 -------------------------------------- 串口是一种非常通用的设备通信的协议: 一.参数解释 波特率 这是一个衡量符号传输速率的参数.它表示每秒钟传送的符号的个数.例如300波特表示每秒钟发送300个符号.当我们提到时钟周期时,我们就

C# 热敏打印机 小票打印机 打印图片

using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; namespace POSPrinter { /// <summary> /// POSPrinter的摘要说明. /// 此类处理网络打印,使用了IP端口. /// </summary&

常见小票打印机打印故障及解决方法汇总视频教程

通过对"常见小票打印机故障及解决方法汇总视频教程"课程学习,达到以下目的:1.可以独立自主安装打印机驱动以及安装打印机硬件设备 2.可以独立自主排除常见打印机故障学习教程 常见小票打印机故障:[小票打印机不打印故障]1.电脑系统参数设置不正确导致小票打印机不打印故障2.端口不正确导致不打印故障3.属性参数不正确导致不打印故障4.红灯一直闪烁不打印故障5.打印机图标突然消失不打印故障6.默认打印机不正确不打印故障 [虽然打印,但是打印不正常]1.虽然打印,但是打印的字挤压在一起,显示不正

365小票打印机打印接口开发文档

API开发文档 接口1:打印内容 参数 说明 deviceNo 打印机编号 key 密钥 printContent 打印内容 times 固定传1 调用方式:HTTP POSTURL:http://open.printcenter.cn:8080/addOrder返回结果:JSON字符串 ----------S1小票机返回的结果有如下几种:---------- {"responseCode":0,"msg":"订单添加成功,打印完成","

某小票打印机打印接口开发文档

API开发文档 接口1:打印内容 参数 说明 deviceNo 打印机编号 key 密钥 printContent 打印内容 times 固定传1 调用方式:HTTP POSTURL:http://open.printcenter.cn:8080/addOrder返回结果:JSON字符串 ----------S1小票机返回的结果有如下几种:---------- {"responseCode":0,"msg":"订单添加成功,打印完成","