[C#] ZEBRA ZPL指令打印BarCode,QRCode
来源:互联网 发布:程序员上班3天被劝退 编辑:程序博客网 时间:2024/06/06 01:58
公司业务需要 接触到c#的打印机方面的业务。要求客户端控制打印机来打印条码,二维码。
条码:在条码打印上 在传参方面和排版方面需要去慢慢调试。
二维码:直接指令打印二维码在控制二维码大小很难把控,因为传入的参数不同,二维码的大小也会随之变化,而ZPL指令只又通过改变缩放比例来调节,但是可以通过打印二维码图像来做到对大小的把控,两种方式下面都有提到。
由于网上的案列少 在弄完这个小demo后想把自己的心得分享出来。just no bb,show you my code. 本人不会c#,写的差不要见笑。
首先是引用dll
条码(BarCode)打印
主要代码片
try { //实例化一个打印类 ZebraPrinter printer = new ZebraPrinter(); //定义标签值 与拼接的字符串对应 string code = "L000001"; string var1 = "物料code:000 0000"; string var2 = "物料名:123456 "; string var3 = "数量:1"; string var4 = "生成日期:2016/4/5"; string var5 = "货主:XXXXXX电子有限公司"; //拼接命令字符串 code = string.Concat(var1, "^", var2, "^", var3, "^", var4, "^", var5, "~", code); string printPath = "TEMPLATE.txt"; DirectoryInfo dirinfo = new DirectoryInfo(Environment.CurrentDirectory); printPath = @"\template\" + printPath; printer.PrintLabEx(printPath, code, "GK888t"); } catch (Exception ex) { Console.WriteLine("ERROR:" + ex); //此处要打LOG }
模板类容
(TEMPLATE.txt) TXT文件!
^XA^PW2000^MD30^LL300^LH0,0^PQ1,0,1,Y#CN_DATA1#;|宋体|20|15|^FO70,90#CN_DATA2#;|宋体|20|15|^FO70,120#CN_DATA3#;|宋体|20|15|^FO70,150#CN_DATA4#;|宋体|20|15|^FO70,180#CN_DATA5#;|宋体|20|15|^FO70,210^FO70,0^BY2.0,3.0^BCN,60,Y,N,N,A^FD#ID1#^FS^XZ
介绍
单位:mm^XA ^XZ 开始和结束^PW2000 条码宽度^MD30 条码浓度(-30~30)^LL300 打印的长度(配合打印机设置里面的打印长度)(传入参数太多打印长度太小会出现打印不全的情况)^LH0,0 条码纸的边距^PQ1,0,1,Y 一次打印一张不暂停#CN_DATA# 变量占位符 |宋体|20|15| 宋体 高20 宽15^FO 设置左上角的位置(坐标)^BY 缩放级别2.0(1~10)粗细柱比例3.0 条码高度60^BCN code128指令^FD 打印条码类容#ID# 条码变量占位符^FS 换行传入的参数一定不能大于模板的参数 ^后 接的是字符串参数 ~后接的是code参数GK88T 局域网打印机名称
BarCode(二维码)直接zpl打印
主要代码片
try { //实例化一个打印类 ZebraPrinter printer = new ZebraPrinter(); string printPath = "TEMPLATE2.txt"; string code = "中文1232111"; //此处传参 QR码 string var1 = "我是汉字"; //此处传参 文本值 code = string.Concat(var1, "~", code); Console.WriteLine(code); DirectoryInfo dirinfo = new DirectoryInfo(Environment.CurrentDirectory); printPath = @"\template\" + printPath; Console.WriteLine(printPath); printer.PrintLabEx(printPath, code, "GK888t"); //Bullzip PDF Printer GK888t } catch (Exception ex) { Console.WriteLine("ERROR:" + ex); //此处要打LOG }
模板内容
^XA#CN_DATA1#;|宋体|20|20|^FO1,1^FO20,20^BQ,2,10^CI26^FH^FDQA,#ID1#^FS^XZ
介绍
^BQ,2,10 二维码类型 和缩放比例^CI26 解决中文字符解析不出来_0A_0D 此字符加入到字符中间可以达到换行效果其余的基本和上面参数解释一样
BarCode(二维码)图片zplii打印
这写的二维码image形式打印二维码 条码打印同理
代码片
string str = "我是中文 你认识我吗"; string printPath = str + ".png"; DirectoryInfo dirinfo = new DirectoryInfo(Environment.CurrentDirectory); printPath = dirinfo+ @"\QRImages\" + printPath; Console.WriteLine(printPath); //生成二维码图片 try { String savePath = printPath; ImagePrintQrUtilS imagePrintQrUtils = new ImagePrintQrUtilS(); ImagePrintQrUtilS.CreateQRCodeImage(str, savePath); Console.WriteLine("类容:" + GetImageQrZPL.Convert(printPath)); RawPrinterHelper.SendStringToPrinter("GK888t",GetImageQrZPL.Convert(printPath)); } catch (Exception) { }
public static System.Drawing.Image CreateQRCodeImage(string num, string path) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); String encoding = "Byte"; if (encoding == "Byte") { qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; } try { int scale = Int16.Parse("4"); //Convert.ToInt16(4); qrCodeEncoder.QRCodeScale = scale; } catch (Exception) { } try { int version = Int16.Parse("7"); qrCodeEncoder.QRCodeVersion = version; } catch (Exception) { } string errorCorrect = "M"; if (errorCorrect == "L") qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L; else if (errorCorrect == "M") qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; else if (errorCorrect == "Q") qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q; else if (errorCorrect == "H") qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; try { Bitmap bm = qrCodeEncoder.Encode(num,Encoding.UTF8);//+Encoding.UTF8 解决中文乱码!!!! bm.Save(path); MemoryStream ms = new MemoryStream(); bm.Save(ms, System.Drawing.Imaging.ImageFormat.Png); return System.Drawing.Image.FromStream(ms); } catch (Exception) { } return null; }
public static string Convert(string s_FilePath) { int b = 0; long n = 0; long clr; StringBuilder sb = new StringBuilder(); sb.Append("^XA~DGR:ZONE.GRF,"); Bitmap bm = new Bitmap(s_FilePath); int w = ((bm.Size.Width / 8 + ((bm.Size.Width % 8 == 0) ? 0 : 1)) * bm.Size.Height); int h = (bm.Size.Width / 8 + ((bm.Size.Width % 8 == 0) ? 0 : 1)); sb.Append(w.ToString().PadLeft(5, '0') + "," + h.ToString().PadLeft(3, '0') + ",\n"); using (Bitmap bmp = new Bitmap(bm.Size.Width, bm.Size.Height)) { for (int y = 0; y < bm.Size.Height; y++) { for (int x = 0; x < bm.Size.Width; x++) { b = b * 2; clr = bm.GetPixel(x, y).ToArgb(); string s = clr.ToString("X"); if (s.Substring(s.Length - 6, 6).CompareTo("BBBBBB") < 0) { bmp.SetPixel(x, y, bm.GetPixel(x, y)); b++; } n++; if (x == (bm.Size.Width - 1)) { if (n < 8) { b = b * (2 ^ (8 - (int)n)); sb.Append(b.ToString("X").PadLeft(2, '0')); b = 0; n = 0; } } if (n >= 8) { sb.Append(b.ToString("X").PadLeft(2, '0')); b = 0; n = 0; } } } sb.Append("^LH0,0^FO5,60^XGR:ZONE.GRF^FS^XZ"); } return sb.ToString(); }
介绍
这个主要原理是先生成二维码图片再将图片转为zpl指令打印二维码。和打印图片类型条码的同理若有具体的控制 在 Convert方法中的Append 修改和添加指令 打印中文乱码已解决。
后记
如果有不了解的或者有错误的地方可以评论留言或者加我qq 294810949交流。
新博客地址 https://yeyafei.github.io/
1 0
- [C#] ZEBRA ZPL指令打印BarCode,QRCode
- ZPL II (Zebra 标签机)简易指令集
- Delphi 调用打印指令ZPL--USB
- ZPL指令
- Zebra打印机,中文转ZPL指令的.net实现,替换FNTHEX32.DLL
- Delphi调用打印机的ZPL指令来打印数据
- delphi:斑马打印机ZPL指令打印中文及二维码
- C#-利用ZPL语言完成条形码的生成和打印
- C#-利用ZPL语言完毕条形码的生成和打印
- C#-利用ZPL语言完成条形码的生成和打印
- ZPL并口打印
- ZPL条码打印类
- ZPL打印中文
- delphi:斑马打印机ZPL指令打印中文及二维码,补充说明
- ZPL II 简易指令集
- ZPL指令中文参考地址
- zebra中文打印
- C#条码打印与ZPL
- 常用正则
- FZU 2127 养鸡场
- Android Studio有什么奇技淫巧?
- Mina框架研究(一)
- 自动部署服务器
- [C#] ZEBRA ZPL指令打印BarCode,QRCode
- 单机spark绑定端口
- 笔试题20. LeetCode OJ (6)
- javascript面向对象
- 分拆素数和
- Linux命令行:rmdir命令
- 稳定的奇偶数字排序
- Chrome浏览器的密码数据
- LeetCode 217 -Contains Duplicate ( JAVA )