C#-利用ZPL语言完成条形码的生成和打印
2016-09-09 17:10
375 查看
近期由于公司项目的须要,研究了一项对我来说算是新的技术—条形码的生成和打印。由于之前没有接触过这方面的知识,所以刚開始还有点小迷茫和小兴奋,只是一步一步来,问题总会解决的。如今来总结一下做条形码这块的收获。
条形码的生成没有什么难度,就是运用一些字符串处理函数自己主动生成一串字母或数字的组合。这里主要说明一下怎样把生成的条码值打印出来。首先我们要接触一种新的语言ZPL(ZebraProgramming
Language)看名字zebra就知道和斑马有关;的确,ZPL是斑马公司自主设计的语言(斑马公司的业务主要是制作斑马条形码打印机)。如今大部分条码打印机都是能够识别ZPL指令的,我们能够用ZPL指令编写一个模板,然后将自己主动生成的条形码值(字符串)依照一定格式格式化成新的字符串。然后将这些内容传入打印机就可以。
以下来举个Demo说明一下详细的操作:
这是我编写好的一个模板:(名称为BarcodePath,保存格式为.TXT或者.PRN格式,并且一定要注意是大写!!)
---------------------------------------------------------------------------------------------------------
^XA
^PW1000
^MD30
^LH0,0
#CN_DATA1#;|宋体|20|15|^FO150,0
#CN_DATA2#;|宋体|20|15|^FO650,0
^FO70,0^BY2.0,3.0^BCN,120,Y,N,N,A^FD#ID1#^FS
^FO570,0^BY2.0,3.0^BCN,120,Y,N,N,A^FD#ID2#^FS
^PQ1,0,1,Y
^XZ
ZPL语言还是很好理解的,都是一些固定的指令,了解就行。
---------------------------------------------------------------------------------------------------------
^XA和^XZ:分别代表一个指令块的开始和结束,
是固定的东西。
^PW:打印宽度,如果宽度较小,则会出现打印不全的效果。
^MD:设置标签颜色的深度,取值范围为 -30 to 30,上面的指令将颜色调到了最深。
^LH:设置条码纸的边距,本模板未进行设置。
---------------------------------------------------------------------------------------------------------
以下以字符串abc^edf~L000001^L000002为例进行说明(abc、edf分别为汉字,L000001、L000002为条形码值)
#CN_DATA1#:为abc的占位符。
#CN_DATA2#:为edf的占位符。
|宋体|20|15|:指字体为宋体,字符高度为20,宽度为15
^FO:设置条码左上角的位置的坐标(70,0)。
^BY:设置条形码显示样式, 这是该模板最重要的一个部分, 2.0是条码的缩放级别(可接受的数值:1-10点 ),这个数值下打出的条码很小, 3.0是条码中粗细柱的比例(可接受的数值:2.0到3.0,增量0.1,对固定比例的条码无效
), 120是条码高度。
^BCN:是打印code128的指令。
^FD:设置要打印的内容
^FS:表示换行
#ID1#:指L000001
#ID2#:指L000002
---------------------------------------------------------------------------------------------------------
^PQ50,10,1,Y:打印总数50张标签每个序列号只打一张。打印每组数量是10,但在每组间不暂停。
^PQ50,10,1,N:打印总数50张标签每个序列号只打一张。打印每数量是10,每组打印后暂停。
这里可以写成^PQ1,0,1,Y,即每次打印一张,不暂停。因为打印总张数可以在程序中进行控制。
---------------------------------------------------------------------------------------------------------
建议:编写模板需要自己尝试,可以先编写一个打印的demo,根据打印出来的效果,不断的调试改动模板,以达到预期的效果。
模板讲到这里应该就差不多了。下面说明如何进行打印。
首先需要引入一个封装好的DLL文件SMT.ZEBRA.dll,打印操作主要就是靠它来完成的,在他内部封装了一个ZebraPrinter类,包含方法PrintLabEx
客户端代码:
打印效果:
有问题的地方欢迎指出!
代码下载
oノo════════════════════════════╲
│ヽ.编程学习ing.... 欢迎交流。 │
│ http://blog.csdn.net/u010028869
.ヽ│
╲═════════════════════════════ヾ
条形码的生成没有什么难度,就是运用一些字符串处理函数自己主动生成一串字母或数字的组合。这里主要说明一下怎样把生成的条码值打印出来。首先我们要接触一种新的语言ZPL(ZebraProgramming
Language)看名字zebra就知道和斑马有关;的确,ZPL是斑马公司自主设计的语言(斑马公司的业务主要是制作斑马条形码打印机)。如今大部分条码打印机都是能够识别ZPL指令的,我们能够用ZPL指令编写一个模板,然后将自己主动生成的条形码值(字符串)依照一定格式格式化成新的字符串。然后将这些内容传入打印机就可以。
以下来举个Demo说明一下详细的操作:
这是我编写好的一个模板:(名称为BarcodePath,保存格式为.TXT或者.PRN格式,并且一定要注意是大写!!)
---------------------------------------------------------------------------------------------------------
^XA
^PW1000
^MD30
^LH0,0
#CN_DATA1#;|宋体|20|15|^FO150,0
#CN_DATA2#;|宋体|20|15|^FO650,0
^FO70,0^BY2.0,3.0^BCN,120,Y,N,N,A^FD#ID1#^FS
^FO570,0^BY2.0,3.0^BCN,120,Y,N,N,A^FD#ID2#^FS
^PQ1,0,1,Y
^XZ
ZPL语言还是很好理解的,都是一些固定的指令,了解就行。
---------------------------------------------------------------------------------------------------------
^XA和^XZ:分别代表一个指令块的开始和结束,
是固定的东西。
^PW:打印宽度,如果宽度较小,则会出现打印不全的效果。
^MD:设置标签颜色的深度,取值范围为 -30 to 30,上面的指令将颜色调到了最深。
^LH:设置条码纸的边距,本模板未进行设置。
---------------------------------------------------------------------------------------------------------
以下以字符串abc^edf~L000001^L000002为例进行说明(abc、edf分别为汉字,L000001、L000002为条形码值)
#CN_DATA1#:为abc的占位符。
#CN_DATA2#:为edf的占位符。
|宋体|20|15|:指字体为宋体,字符高度为20,宽度为15
^FO:设置条码左上角的位置的坐标(70,0)。
^BY:设置条形码显示样式, 这是该模板最重要的一个部分, 2.0是条码的缩放级别(可接受的数值:1-10点 ),这个数值下打出的条码很小, 3.0是条码中粗细柱的比例(可接受的数值:2.0到3.0,增量0.1,对固定比例的条码无效
), 120是条码高度。
^BCN:是打印code128的指令。
^FD:设置要打印的内容
^FS:表示换行
#ID1#:指L000001
#ID2#:指L000002
---------------------------------------------------------------------------------------------------------
^PQ50,10,1,Y:打印总数50张标签每个序列号只打一张。打印每组数量是10,但在每组间不暂停。
^PQ50,10,1,N:打印总数50张标签每个序列号只打一张。打印每数量是10,每组打印后暂停。
这里可以写成^PQ1,0,1,Y,即每次打印一张,不暂停。因为打印总张数可以在程序中进行控制。
---------------------------------------------------------------------------------------------------------
建议:编写模板需要自己尝试,可以先编写一个打印的demo,根据打印出来的效果,不断的调试改动模板,以达到预期的效果。
模板讲到这里应该就差不多了。下面说明如何进行打印。
首先需要引入一个封装好的DLL文件SMT.ZEBRA.dll,打印操作主要就是靠它来完成的,在他内部封装了一个ZebraPrinter类,包含方法PrintLabEx
// 说明: // 打印条形码、RFID等类型标签 // // 参数: // n_strTemplateFilePath: // 标签模版文件名称,不含路径,如:"TEMPLATE.TXT" // // n_strLabels: // 标签数据集合字符串,多个标签行用'|'分割,单个标签行数据内部用'^'(字段)分割或'~'(文字或条码)分割, 如"研发部^51296829~8019^8020|11G~51296829^8001^8012"注明了如下打印要点: // 1. 打印两行标签(俗称两枚) 2. 第一行标签打印两个文本("研发部"、"51296829"),2个条形码(分别是"8019"、"8020") // 3. 第二行标签打印1个文本("11G"),3个条形码("51296829"、"8001"、"8012") // n_strPrinterName: // 打印机名称等,比如"ZDesigner 888-TT" public bool PrintLabEx(string n_strTemplateFilePath, string n_strLabels, string n_strPrinterName);
客户端代码:
private void button1_Click(object sender, EventArgs e) { try { //实例化一个打印类 ZebraPrinter printer = new ZebraPrinter(); //定义两个标签值 string str1 = "L000001"; string str2 = "L000002"; //按照格式,格式化成新的字符串 str1 = string.Concat(" ", "^", " ", "~", str1, "^", str2); //双排条形码 //str = string.Concat(" ", "~", str); //单排条形码 //printPath:模板名称 //comboBox1.Text:打印机名称 string printPath = "BarcodePath.TXT"; printer.PrintLabEx(printPath, str1, comboBox1.Text); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void SmtZebraWinFormZPL_Load(object sender, EventArgs e) { //获取本地计算机上安装的所有打印机,保存到集合strCollects中 PrinterSettings.StringCollection strCollects = PrinterSettings.InstalledPrinters; string strPrinterName = string.Empty; //遍历集合,将所有打印机加载到下拉列表comboBox1中 foreach (String strName in strCollects) { strPrinterName = strName.ToString(); comboBox1.Items.Add(strPrinterName); } comboBox1.SelectedIndex = 0x00; }
打印效果:
有问题的地方欢迎指出!
代码下载
oノo════════════════════════════╲
│ヽ.编程学习ing.... 欢迎交流。 │
│ http://blog.csdn.net/u010028869
.ヽ│
╲═════════════════════════════ヾ
相关文章推荐
- C#-利用ZPL语言完成条形码的生成和打印
- C#-利用ZPL语言完毕条形码的生成和打印
- C#-利用ZPL语言完毕条形码的生成和打印
- C#利用Zxing.net生成二维码和条形码并实现打印的功能
- C#利用Zxing.net生成条形码和二维码并实现打印的功能
- C#利用zxing.net生成二维码和条形码并实现打印的功能
- 报表源代码 winform c# -基于DexExpressXtraReport的打印报表,后台生成报表,winform版本,采用C#语言封装,比金质通更强大,现在开放源代码
- C#自动给据sql中的带@的变量提取变量名称在从简单数据对象中取得生成SqlParameter数组进行数据插入(利用反射完成)
- 利用Java语言打印具有"*"号的等边三角形
- C#自动给据sql中的带@的变量提取变量名称在从简单数据对象中取得生成SqlParameter数组进行数据插入(利用反射完成)
- 利用doxygen生成说明文档(支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、C#)
- 利用apktool将APK反编译,生成程序的图片、XML配置、语言资源等文件
- .net实现生成及打印条形码功能
- 利用Go语言上传图像并生成缩略图
- 字符串生成条形码图片并插入到Excel!并打印出来后可以扫描!
- barcode4j生成条形码及打印条码开发介绍—页面参数解释
- 利用线程的知识,完成一个线程负责打印1-26的数字,另一个线程负责打印A-Z
- .net实现生成及打印条形码功能
- ASP.NET关于条形码的生成问题兼网页打印
- .net实现生成及打印条形码功能 收藏