C#-利用ZPL语言完毕条形码的生成和打印
近期由于公司项目的须要,研究了一项对我来说算是新的技术—条形码的生成和打印。由于之前没有接触过这方面的知识,所以刚開始还有点小迷茫和小兴奋,只是一步一步来,问题总会解决的。如今来总结一下做条形码这块的收获。
条形码的生成没有什么难度,就是运用一些字符串处理函数自己主动生成一串字母或数字的组合。这里主要说明一下怎样把生成的条码值打印出来。首先我们要接触一种新的语言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 .ヽ│
╲═════════════════════════════ヾ
C#-利用ZPL语言完毕条形码的生成和打印的更多相关文章
- ZPL语言完成条形码的打印
近期因为项目的需求,需要使用到打印机来打印业务相关的条形码和其他信息,由于之前有操作其它打印机的经验,Leader就安排我来做这个了(凑哦,这能说我是懵逼的么).于是就开始了我的探索之旅啦,不对,是踩 ...
- 吉特仓库管理系统- 斑马打印机 ZPL语言的腐朽和神奇
上一篇文章说到了.NET中的打印机,在PrintDocument类也暴露一些本质上上的问题,前面也提到过了,虽然使用PrintDcoument打印很方便.对应条码打印机比如斑马等切刀指令,不依赖打印机 ...
- 利用powerdesigner反向数据库结构,生成ER图
参考月下狼~图腾~:<利用powerdesigner反向数据库结构,生成ER图> https://www.zybuluo.com/Jpz/note/123582 首先新建一个"P ...
- 利用R语言进行交互数据可视化(转)
上周在中国R语言大会北京会场上,给大家分享了如何利用R语言交互数据可视化.现场同学对这块内容颇有兴趣,故今天把一些常用的交互可视化的R包搬出来与大家分享. rCharts包 说起R语言的交互包,第一个 ...
- 利用C语言编辑画图程序的实现方法
不知道大家在进行开发县级电网调度自动化系统的时候,是否都会遇到一个问题就是:要绘制一个电力系统一次接线图.大家都应该知道其实电力系统的一次接线图是较为复杂的,如果想要使用一般的编程方法来进行绘制的话, ...
- R语言- 实验报告 - 利用R语言脚本与Java相互调用
一. 实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调 ...
- 利用R语言制作出漂亮的交互数据可视化
利用R语言制作出漂亮的交互数据可视化 利用R语言也可以制作出漂亮的交互数据可视化,下面和大家分享一些常用的交互可视化的R包. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包 ...
- 利用C语言结构体模拟一个简单的JavaBean
利用C语言模拟一个Javabean 仅封装了,“无参构造函数”,“带参构造函数”,"toString方法" #include <stdio.h> struct User ...
- 利用R语言打造量化分析平台
利用R语言打造量化分析平台 具体利用quantmod包实现对股票的量化分析 1.#1.API读取在线行情2.#加载quantmod包3.if(!require(quantmod)){4. instal ...
随机推荐
- C语言求素数的算法
前言 最后一次是出了素数的问题C语言解决题目(面试),当时用了最粗暴的算法.回来细致參考资料,事实上答案有非常多种: 1,小学生版本号: 推断 x 是否为质数,就从 2 一直算到 x-1. stati ...
- HDU1312 Red and Black 解读
递归搜索方法标题,采用递归搜索方法,但是,如果没有迭代计算的真正的政党格. 我们的想法是: 1 每一个搜索为党格要改变电流方向格的值至 '*',或任何其他非'.'的值,代表方格了 2 递归的时候不回复 ...
- SQLite外键
数据库工具:SQLite Manager(V0.7.7) SQLite版本号:V3.6.19+ SQLite Manager 默认是不开启外键的. 那么怎样,使用它创建一个带有外键的表呢? 一.开启外 ...
- 采用Flume实时采集和处理数据
它已成功安装Flume在...的基础上.本文将总结使用Flume实时采集和处理数据,详细过程,如下面: 第一步,在$FLUME_HOME/conf文件夹下,编写Flume的配置文件,命名为flume_ ...
- cocos2d-x3.0 lua学习(一个)
最近开始学习Lua这里记录下一个写简单Lua代码,但我在写Lua代码.自己主动的代码提示的一些问题,谁希望提供下很好的解决方案,编辑我用SubLime Text2 test.lua.这里创建一个场景, ...
- linux笔记本上安装了双显卡驱动(intel+nvidia)
为了提高linux图形性能并降低功耗,独特的文章. 我用的系统Fedora 20 Xfce x64,在安装驱动程序,以确保系统是最新的版本号. 最好安装gcc.kernel-devel和其他包.己主动 ...
- Swift: 打造滑动解锁文字动画
原文:Swift: 打造滑动解锁文字动画 最近木事,找出来玩了玩facebook的paper.到处都是那个"slide to unlock your phone"的效果啊.忽闪忽闪 ...
- zoj3791(An Easy Game) DP
意甲冠军:给定两个01弦s1,s2.每一个变化s1在m字 - 位.要求k制作步骤之后s1变s2有多少种方法. 解法:DP,关键是状态的设计.考虑还是唯一性和可传递性.dp[i][j]表示第i步后有j个 ...
- Eclipse扩展安装插件方式
Eclipse安装插件经常使用的是直接安装的方式,就是将插件中包含的plugins和features文件夹中的内容直接复制到了Eclipse的plugins和features文件夹内,这样很容易导致插 ...
- 必要的软件架构师——编译原理·语法
最近软测试.我观看进程的视频! 发现里面有很多内容已经在自我不错的接触过程.而占80%比例! 但其中的一部分.我很奇怪的一部分.研究,在这里,将我研究的内容整理分享给大家! 编译原理: 首先,我第一眼 ...