近期由于公司项目的须要,研究了一项对我来说算是新的技术—条形码的生成和打印。由于之前没有接触过这方面的知识,所以刚開始还有点小迷茫和小兴奋,只是一步一步来,问题总会解决的。如今来总结一下做条形码这块的收获。

条形码的生成没有什么难度,就是运用一些字符串处理函数自己主动生成一串字母或数字的组合。这里主要说明一下怎样把生成的条码值打印出来。首先我们要接触一种新的语言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);

client代码:

        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                  .ヽ│

╲═════════════════════════════ヾ

转载于:https://www.cnblogs.com/mengfanrong/p/4360692.html

C#-利用ZPL语言完毕条形码的生成和打印相关推荐

  1. C#-利用ZPL语言完成条形码的生成和打印

     最近因为公司项目的需要,研究了一项对我来说算是新的技术-条形码的生成和打印.因为之前没有接触过这方面的知识,所以刚开始还有点小迷茫和小兴奋,不过一步一步来,问题总会解决的.现在来总结一下做条形码 ...

  2. ZPL语言完成条形码的打印

    近期因为项目的需求,需要使用到打印机来打印业务相关的条形码和其他信息,由于之前有操作其它打印机的经验,Leader就安排我来做这个了(凑哦,这能说我是懵逼的么).于是就开始了我的探索之旅啦,不对,是踩 ...

  3. c# 小票打印机打条形码_C#条形码的生成与打印

    本文主要介绍基于第三方类库BarcodeX制作条形码及打印方法 第一步:引用类库 第二步:定义一个打印的方法 /// /// 打印条形码方法 /// /// 为PrintDocument对象的Prin ...

  4. 利用Go语言上传图像并生成缩略图

    承前文:Go语言中对图像进行缩放 //利用Go语言上传图像并生成缩略图 func upload(w http.ResponseWriter, req *http.Request, link strin ...

  5. NLP实战:利用Python理解、分析和生成文本 | 赠书

    导读:本文内容参考自<自然语言处理实战:利用Python理解.分析和生成文本>一书,由Hobson Lane等人所著. 本书是介绍自然语言处理(NLP)和深度学习的实战书.NLP已成为深度 ...

  6. Java语言使用注解处理器生成代码——第二部分:注解处理器

    原文作者:deors 原文地址:https://deors.wordpress.com/2011/10/08/annotation-processors/ 译文作者:Jianan - qinxiand ...

  7. 利用PHP语言开发手机app后台服务器的框架是什么?或者说开发流程是怎么样的?

    最近正在做一个手机APP的服务端API开发,虽然是基于Ruby on Rails的,做的也不太专业,不过大致相通,希望能够给你一些启发. 首先,如果是比较简单的手机APP,例如新闻客户端这样的 不会涉 ...

  8. 利用R语言进行线性/非线性回归拟合实例(1)

    利用R语言进行线性/非线性回归拟合实例(1) 1. 生成一组数据 vector<float>xxvec; vector<float>yyvec; ofstreamfout(&q ...

  9. 利用R语言制作好看的Meta分析文献偏倚风险图

    在<Meta踩坑集>里,向大家分享了使用RevMan进行基本的文献偏移风险图是如何制作的.在很多文献里,我们看到的偏倚风险图都长这样: 但也有的文献偏移风险图长这样: 那这些花里胡哨,看起 ...

最新文章

  1. Redis Cluster 介绍与搭建
  2. kaptcha图形验证码组件
  3. DCMTK学习之读取DcmDataset对应tag的值
  4. 032-session函数
  5. 字典-字典的统计、合并、清空操作
  6. 牛客 - 字典序(思维)
  7. 什么是m叉树_国考临近考试了,感觉已经没有进步空间了,最后关头还有没有什么提成成绩的好方法?...
  8. TCP/IP 三次握手和四次挥手
  9. Mysql——Innodb和Myisam概念与数据恢复
  10. r roc函数_画ROC曲线的R包总结
  11. 【测试】软件测试分类体系系统学习
  12. C# 委托的三种调用示例(同步调用 异步调用 异步回调)
  13. python 车牌识别训练模型_使用Python基于HyperLPR/Mask-RCNN的中文车牌识别
  14. MATLAB信号与系统分析(三)——连续信号与系统的复频域分析及MATLAB实现
  15. 单片机测试开发板用什么软件,怎么知道单片机开发板的好坏
  16. iOS 开发者必不可少的 75 个工具,你都会了吗
  17. 职称论文发表的字数不够怎么办
  18. SCA在得物DevSecOps平台上应用​
  19. java启动参数xmm_JVM所有参数一览
  20. js实现文件下载并重命名

热门文章

  1. centos6.4下安装python3.6以及对应的django1.11
  2. BTrace简介及使用
  3. 为什么一定要用MQ中间件
  4. Dubbo学习总结(2)——Dubbo架构详解
  5. kdump和crash的配置方法与内核故障原因分析(一)
  6. libvirtError: 无效参数:could not find capabilities for domaintype=kvm
  7. Python操作Redis的5种数据类型
  8. 算法笔记(JavaScript版)——排序
  9. 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
  10. Objective C中@protected等关键字概述