C#与斑马打印机打印条码2——C#程序编写

C#与斑马打印机打印条码2——C#程序编写

前面写到斑马打印机的ZPL语言,及常用的命令。本次写下C#如何调用ZPL语言在斑马打印机上进行打印。

C#调用斑马打印机打印主要用到两个库:Fnthex32.dll和SMT.ZEBRA.dll,使用方法:SMT.ZEBRA.dll在项目中引用,Fnthex32.dll只需把dll放到C:\Windows\SysWow64和C:\Windows\System32 文件夹中即可。另外注意生成的程序要是32位,64位会报错。

代码实现:

主要用到的方法:ZebraPrinter.PrintLabEx(string n_strTemplateFilePath, string n_strLabels, string n_strPrinterName)

第一个参数:n_strTemplateFilePath是ZPL命令的路径地址,编写好的ZPL命令格式是.TXT或者.ZPL格式,注意要是大写。

第二个参数:n_strLabels标签数据集合字符串,多个标签行用'|'分割,单个标签行数据内部用'^'(字段)分割或'~'(文字或条码)分割

第三个参数:n_strPrinterName是打印机名称。

代码如下:

        /// <summary>
        /// CODE128条码生成;
        /// </summary>
        /// <param name="sn">条码内容</param>
        /// <param name="txt_x">文本起始X</param>
        /// <param name="txt_y">文本起始Y</param>
        /// <param name="txt_font">文本字体</param>
        /// <param name="txt_size">字体大小</param>
        /// <param name="barcode_width">条码宽</param>
        /// <param name="barcode_x">条码起始X</param>
        /// <param name="barcode_y">条码起始Y</param>
        /// <param name="barcode_height">条码高</param>
        /// <param name="print_name">打印机名称</param>
        public void Print_code128(string sn, string txt_x, string txt_y, string txt_font, string txt_size, string barcode_width
            , string barcode_x, string barcode_y, string barcode_height, string print_name)
        {
            FileStream F = new FileStream("code128.TXT", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            F.Close();
            StreamWriter sw = new StreamWriter("code128.TXT");
            sw.WriteLine("^XA^PW709^LH0,0^FO" + txt_x + "," + txt_y);
            sw.WriteLine("^CF" + txt_font + "," + txt_size);
            sw.WriteLine("^FD" + sn + "^FS");
            sw.WriteLine("#CN_DATA1#;|黑体,粗体|20|10|");
            sw.WriteLine("^BY" + barcode_width + ",3.0");
            sw.WriteLine("^FO" + barcode_x + "," + barcode_y);
            sw.WriteLine("^BCN," + barcode_height + ",N,N,N,A");
            sw.WriteLine("^FD#ID1#^FS^PQ1,0,1,Y^XZ");
            sw.Close();
            ZebraPrinter printer = new ZebraPrinter();
            string str = string.Concat(" ", "~", sn);
            string printPath = "code128.TXT";
            printer.PrintLabEx(printPath, str, print_name);
        }

        /// <summary>
        /// PDF417条码生成;
        /// </summary>
        /// <param name="sn">条码内容</param>
        /// <param name="txt_x">文本起始X</param>
        /// <param name="txt_y">文本起始Y</param>
        /// <param name="txt_font">文本字体</param>
        /// <param name="txt_size">字体大小</param>
        /// <param name="barcode_width">条码宽</param>
        /// <param name="barcode_x">条码起始X</param>
        /// <param name="barcode_y">条码起始Y</param>
        /// <param name="barcode_height">条码高</param>
        /// <param name="print_name">打印机名称</param>
        public void Print_pdf417(string sn, string txt_x, string txt_y, string txt_font, string txt_size, string barcode_width
            , string barcode_x, string barcode_y, string barcode_height,  string print_name)
        {
            FileStream F = new FileStream("pdf417.TXT", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            F.Close();
            StreamWriter sw = new StreamWriter("pdf417.TXT");
            sw.WriteLine("^XA^PW709^LH0,0^FO" + txt_x + "," + txt_y);
            sw.WriteLine("^CF" + txt_font + "," + txt_size);
            sw.WriteLine("^FD" + sn + "^FS");
            sw.WriteLine("#CN_DATA1#;|黑体,粗体|20|10|");
            sw.WriteLine("^BY" + barcode_width + ",3.0");
            sw.WriteLine("^FO" + barcode_x + "," + barcode_y);
            sw.WriteLine("^B7N," + barcode_height + ",2,,,N");
            sw.WriteLine("^FD#ID1#^FS^PQ1,0,1,Y^XZ");
            sw.Close();
            ZebraPrinter printer = new ZebraPrinter();
            string str = string.Concat(" ", "~", sn);
            string printPath = "pdf417.TXT";
            printer.PrintLabEx(printPath, str, print_name);
        }

        /// <summary>
        /// QR条码生成
        /// </summary>
        /// <param name="sn">条码内容</param>
        /// <param name="txt_x">文本X位置</param>
        /// <param name="txt_y">文本Y位置</param>
        /// <param name="txt_font">文本字体</param>
        /// <param name="txt_size">文本大小</param>
        /// <param name="barcode_x">二维码X位置</param>
        /// <param name="barcode_y">二维码Y位置</param>
        /// <param name="barcode_Magnification">二维码放大系数</param>
        /// <param name="ErrorCorrectionLevel">二维码纠错级别</param>
        /// <param name="print_name">打印机名称</param>
        public void Print_QR(string sn, string txt_x, string txt_y,  string txt_font, string txt_size, string barcode_x, string barcode_y, string barcode_Magnification, string ErrorCorrectionLevel, string print_name)
        {
            FileStream F = new FileStream("QR.TXT", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            F.Close();
            StreamWriter sw = new StreamWriter("QR.TXT");
            //第一段文字
            sw.WriteLine("^XA^LH0,0^FO" + txt_x + "," + txt_y);
            sw.WriteLine("^CF" + txt_font + "," + txt_size);
            sw.WriteLine("^FD" + sn + "^FS");
            //占位字符
            sw.WriteLine("#CN_DATA1#;|黑体,粗体|20|10|");
            //二维码
            sw.WriteLine("^FO" + barcode_x + "," + barcode_y);
            sw.WriteLine("^BQN,2," + barcode_Magnification);
            sw.WriteLine("^FD" + ErrorCorrectionLevel + "A,#ID1#^FS^PQ1,0,1,Y^XZ");
            sw.Close();
            ZebraPrinter printer = new ZebraPrinter();
            string str = string.Concat(" ", "~", sn);
            string printPath = "QR.TXT";
            printer.PrintLabEx(printPath, str, print_name);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if(comboBox1.SelectedIndex==0)
            { 
                zp.Print_code128(textBox1.Text, "250", "75","0","50","4","80","5","60", printName);
            }
            else if(comboBox1.SelectedIndex == 1)
            {
                zp.Print_pdf417(textBox1.Text, "90", "75", "0", "50", "5", "150", "70", "8", printName);
            }
            else
            {
                zp.Print_QR(textBox1.Text,"160","20","0","80","50","0","4","H",printName);
            }
        }

完整代码已上传,需要的关注我后私信发送“ZPL打印”即可获取。