zoukankan      html  css  js  c++  java
  • C#小票打印机

    使用的佳博GP-5890XIII

    http://www.cnblogs.com/lovenan/p/3217448.html

     using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Printing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace JBPrinter
    {
        public partial class Form1 : Form
        {
            private IntPtr Gp_IntPtr;                   //驱动打印句柄
            private libUsbContorl.UsbOperation NewUsb = new libUsbContorl.UsbOperation();
            private string iPaddress;
    
            private System.Windows.Forms.PrintPreviewDialog printv_pos = null;
            private System.Drawing.Printing.PrintDocument printd_pos = null;
    
    
            public Form1()
            {
                InitializeComponent();
                iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
            }
    
            private void btn_dk_Click(object sender, EventArgs e)
            {
                LoadPOSDll PosPrint = new LoadPOSDll();
    
                //POS_COM_DTR_DSR 0x00 流控制为DTR/DST  
                //POS_COM_RTS_CTS 0x01 流控制为RTS/CTS 
                //POS_COM_XON_XOFF 0x02 流控制为XON/OFF 
                //POS_COM_NO_HANDSHAKE 0x03 无握手 
                //POS_OPEN_PARALLEL_PORT 0x12 打开并口通讯端口 
                //POS_OPEN_BYUSB_PORT 0x13 打开USB通讯端口 
                //POS_OPEN_PRINTNAME 0X14 打开打印机驱动程序 
                //POS_OPEN_NETPORT 0x15 打开网络接口 
    
                if (PosPrint.OpenNetPort(iPaddress))//当参数nParam的值为POS_OPEN_NETPORT时,表示打开指定的网络接口,如“192.168.10.251”表示网络接口IP地址,打印时参考
                {
                    Gp_IntPtr = PosPrint.POS_IntPtr;
                    txt_OPenState.Text = "打开网口成功!";
                }
                else
                {
                    txt_OPenState.Text = "失败!";
                }
            }
    
            #region 端口地址修改
            private void txt_Ip1_TextChanged(object sender, EventArgs e)
            {
    
                iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
            }
    
            private void txt_Ip2_TextChanged(object sender, EventArgs e)
            {
                iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
            }
    
            private void txt_Ip3_TextChanged(object sender, EventArgs e)
            {
                iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
            }
    
            private void txt_Ip4_TextChanged(object sender, EventArgs e)
            {
                iPaddress = txt_Ip1.Text.Trim() + "." + txt_Ip2.Text.Trim() + "." + txt_Ip3.Text.Trim() + "." + txt_Ip4.Text.Trim();
            }
            #endregion
    
            #region 打印机状态检测(请先检网关)
            private void btn_QueryStatus_Click(object sender, EventArgs e)
            {
                Byte res = new Byte();
                int ret = LoadPOSDll.POS_NETQueryStatus(iPaddress, out res);
                StringBuilder sb = new StringBuilder();
                if ((res & 0x10) == 0x10)
                    sb.AppendLine("打印机出错!");
                if ((res & 0x02) == 0x02)
                    sb.AppendLine("打印机脱机!");
                if ((res & 0x04) == 0x04)
                    sb.AppendLine("上盖打开!");
                if ((res & 0x20) == 0x20)
                    sb.AppendLine("切刀出错!");
                if ((res & 0x40) == 0x40)
                    sb.AppendLine("纸将尽!");
                if ((res & 0x80) == 0x80)
                    sb.AppendLine("缺纸!");
                if (sb.Length > 0)
                    MessageBox.Show(sb.ToString());
            }
            #endregion
    
            #region 简单打印1
    
            private void btn_Print1_Click(object sender, EventArgs e)
            {
                //LoadPOSDll PosPrint = new LoadPOSDll();
    
                //POS_COM_DTR_DSR 0x00 流控制为DTR/DST  
                //POS_COM_RTS_CTS 0x01 流控制为RTS/CTS 
                //POS_COM_XON_XOFF 0x02 流控制为XON/OFF 
                //POS_COM_NO_HANDSHAKE 0x03 无握手 
                //POS_OPEN_PARALLEL_PORT 0x12 打开并口通讯端口 
                //POS_OPEN_BYUSB_PORT 0x13 打开USB通讯端口 
                //POS_OPEN_PRINTNAME 0X14 打开打印机驱动程序 
                //POS_OPEN_NETPORT 0x15 打开网络接口 
    
                //            if (LoadPOSDll.POS_StartDoc())
                //            {
                //                byte[] by_SendData = System.Text.Encoding.Default.GetBytes("今天到此一游~~
    ");
                //                LoadPOSDll.POS_WriteFile(PosPrint.POS_IntPtr, by_SendData, (uint)by_SendData.Length);
                //                LoadPOSDll.POS_WriteFile(PosPrint.POS_IntPtr, new byte[] { 0x0a }, 1);
                //                LoadPOSDll.POS_EndDoc();
                //            }
                print();
    
            }
            #endregion
    
            #region 先预览后打印
            private void button1_Click(object sender, EventArgs e)
            {
                //打印预览            
    
                PrintPreviewDialog ppd = new PrintPreviewDialog();
    
                PrintDocument pd = new PrintDocument();
    
    
    
                //设置边距
    
                Margins margin = new Margins(15, 15, 15, 15);
    
                pd.DefaultPageSettings.Margins = margin;
    
    
    
                ////纸张设置默认
    
                PaperSize pageSize = new PaperSize("First custom size", getYc(70), 420);
    
                pd.DefaultPageSettings.PaperSize = pageSize;
    
    
    
                //打印事件设置            
    
                pd.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
    
                ppd.Document = pd;
    
                ppd.ShowDialog();
    
    
    
                try
                {
                    //print();
                }
    
                catch (Exception ex)
                {
    
                    MessageBox.Show(ex.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                    pd.PrintController.OnEndPrint(pd, new PrintEventArgs());
    
                }
            }
            #endregion
    
    
            private int getYc(double cm)
            {
                return (int)(cm / 25.4) * 100;
            }
    
    
    
            #region 打印的内容
    
            #region 标题
            public string GetPrintHead()
            {
                StringBuilder sb = new StringBuilder();
                string tou = "重庆洞子老火锅";
                sb.Append("        " + tou + "     
    ");
                return sb.ToString();
            }
            #endregion
    
            #region 内容
            public string GetPrintStr()
            {
    
                StringBuilder sb = new StringBuilder();
    
                string address = "重庆涪陵XXX号";
    
                string saleID = "2010930233330";
    
                string item = "商品";
    
                decimal price = 25.00M;
    
                int count = 1;
    
                decimal total = 0.00M;
    
                decimal fukuan = 500.00M;
    
                //sb.Append("          " + tou + "     
    ");
    
                sb.Append("--------------------------------------------------
    ");
    
                sb.Append("日期:" + DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") + "
    " + "单号:" + saleID + "
    ");
    
                sb.Append("--------------------------------------------------
    ");
    
                sb.Append("项目" + "	" + "数量" + "	" + "单价" + "	" + "小计" + "
    ");
    
                for (int i = 0; i < count; i++)
                {
    
                    decimal xiaoji = (i + 1) * price;
    
                    sb.Append(item + (i + 1) + "	" + (i + 1) + "	" + price + "	" + xiaoji);
    
                    total += xiaoji;
    
                    if (i != (count))
    
                        sb.Append("
    ");
    
                }
    
                sb.Append("--------------------------------------------------
    ");
    
                sb.Append("数量: " + count + " 合计: " + total + "
    ");
    
                sb.Append("付款: " + fukuan);
    
                sb.Append(" 现金找零: " + (fukuan - total) + "
    ");
    
                sb.Append("--------------------------------------------------
    ");
    
                sb.Append("地址:" + address + "
    ");
    
                sb.Append("电话:123456789   123456789
    ");
    
                sb.Append("      谢谢惠顾欢迎下次光临 ");
    
                return sb.ToString();
    
            }
            #endregion
            #endregion
    
            /// POS打印
            /// </summary>
            public void print()
            {
                this.printv_pos = new System.Windows.Forms.PrintPreviewDialog();
                this.printd_pos = new System.Drawing.Printing.PrintDocument();
    
                this.printv_pos.AutoScrollMargin = new System.Drawing.Size(0, 0);    //获取或设置自动滚动边距的大小
                this.printv_pos.AutoScrollMinSize = new System.Drawing.Size(0, 0);   //获取或设置自动滚动条的最小大小
                this.printv_pos.ClientSize = new System.Drawing.Size(400, 300);     //获取或设置窗体工作区的大小
                this.printv_pos.Document = this.printd_pos;                         //获取或设置要预览的文档
                this.printv_pos.Enabled = true;
                this.printv_pos.Name = "printPreviewDialog1";
                this.printv_pos.Visible = false;
    
    
                this.printd_pos.PrintController = new System.Drawing.Printing.StandardPrintController();
                this.printd_pos.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
    
                //设置边距
                System.Drawing.Printing.Margins margins = new System.Drawing.Printing.Margins(5, 5, 5, 5);
                this.printd_pos.DefaultPageSettings.Margins = margins;
    
                this.printd_pos.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("First custom size", getYc(70), 420);
                //this.printDocument1.PrinterSettings.PrinterName = "";
                //Margins margins = new Margins(
    
                //this.printv_pos.Document = this.printd_pos;
    
                printv_pos.PrintPreviewControl.AutoZoom = false;
                printv_pos.PrintPreviewControl.Zoom = 1;
    
                // this.printv_pos.ShowDialog(win);
    
                try
                {
                    printd_pos.Print();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    printd_pos.PrintController.OnEndPrint(printd_pos, new PrintEventArgs());
                }
    
            }
    
    
            #region (页面设置事件)字体设置
            private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
            {
                Graphics g = e.Graphics;
    
                //头部
                string strHeader = GetPrintHead();
                Font ft = new Font("微软雅黑", 12.5F, FontStyle.Bold);    //字体  
                Point pt = new Point(0, 0);                               //顶部
                g.DrawString(strHeader, ft, new SolidBrush(Color.Black), pt);
    
                //Graphics.MeasureString 方法 (String, Font)
                //MeasureString测量用指定的 System.Drawing.Font 绘制的指定字符串
                Size headSize = Size.Round(g.MeasureString(strHeader, ft));  //头部的Size(宽和高)
                headSize.Width = 0;                                          //设置宽为0,是因为只需要向y移动,不需要x移动
    
                //内容
                string strFile = GetPrintStr();
                ft = new Font("宋体", 8.5F, FontStyle.Regular);
                pt = new Point(headSize);                                  //Point(Size size)
                g.DrawString(strFile, ft, new SolidBrush(Color.Black), pt);
                SizeF strSize = g.MeasureString(strHeader, ft);
            }
            #endregion
        }
    }
    
    

    winFrom

    先预览再打印

  • 相关阅读:
    Angular的执行顺序
    小程序地理位置授权,以及无法打开授权弹框的解决办法
    当需要对一个集合遍历删除元素的时候,都应该倒着删
    .net core部署在CentOS上时关于使用GDI报错的问题
    FactoryMethod(工厂方法模式)
    SimpleFactory(简单工厂模式)
    .net core3.1中swagger的使用
    使用HtmlAgilityPack开发爬虫筛选HTML时,关于xpath的坑
    在centos7.x环境中SQL Server附加数据库
    centos7.x中安装SQL Server
  • 原文地址:https://www.cnblogs.com/tangge/p/7201259.html
Copyright © 2011-2022 走看看