最近这几天在测试DataMAx-I-4208采用DPL[Developer Programm Language]指令方式进行遇到诸多问题.解决这个问题过程中也是不断打印测试得到验证.今天早上用程序批量打印发先DAtaMax打印出来的条码效果和ZeBar斑马没什么区别.有人也询问很多采用DPL打印细节问题 就此对C#控制DAtaMAx指令DPL打印条码中遇到问题进行总结一下.
首先在讲遇到问题前搞明白我们要打印一个Code128格式的条码需要具体控制什么因素? 知道我们要在程序中要做什么 这很重要.DataMax发送DPL指令给打印机Code128条码:
打印一条Code128条码通过串口通信向打印机DataMax发送DPL指令打印. 首先要建立串口连接,同时要知道DPL中关于Code128条码打印指令语法.剩下就是条码位置? 等细节调试问题. 具体总结如下:
<1>DPL中打印Code128指令语法
<2>DPL指令中控制BarCode和文本 宽度和高度
<3>DPL设置条码打印在底板上初始位置X,Y
<4>采用密尔值控制DPL中条码宽高比例.
<5>Code128条码格式控制
分析好问题,我们在项目采用是界面先建立打印模板:
打印系统条码数据时指定不同的打印模板:
后台程序自动解析打印模板和打印数据称DataMax支持的DPL指令方式 再发送给打印机批量打印.整个流程:
在上一篇中C#控制DataMax打印机问题总结中提到.Code128基本打印指令:
在DPL手册Code128基本能看到基础语法:
在说明我可以看出打印机为203DPI的Dot点设置默认为D22. DWH语法能够设置的值组合总共有6个.来调节条码宽度.
第三行是核心打印条码的指令:
如上清晰看出大概分为两部分. 前一部分是打印条码Code128格式字符串, 后面一部分则是条码中指定负载数据.其实如果你进一步深入会问: 不同条码间格式如何定义的?后来我翻遍整个DPL手册终于在一个小角落[150页]找到相关说明:
对打印整个条码指令进行结构拆解:
1E0000000150100 这端标识头字符串代表什么意思?继续进行拆解发现:
这时是否有些彻底明白了吧那一段代码具体代表什么意思.如下我会演示用C#发送DPLCode 128打印条码.整个过程,.在上篇中C#控制DataMax打印机问题总结.提到
这时转换后16进制字符串,我们通过ASII16进制修改工具查看一下这个字符16进制码:
经测试发现
发现DAtaMAx打印机识别则是
经过对
首先来看如何在利用DPL指令方式控制BarCode在打印中初始位置X,Y: 在打印中如果想知道打印元素对应的方位坐标则需要知道目前打印机对坐标系统设置对应关系:
打印机中不同的坐标系统.同一个元素所在坐标位置值则不同.类似坐标系统A中:条码对应XY坐标也不同:
根据DPL中说明DAtaMAx坐标为A方案.那么如何来通过DPL指令来控制条码在纸带上初始位置? 在DPL文档中仔细研究发现设置BArCode初始位置属性时Row OffSet和Column OFFset 分别对应语法:
基本语法为R0015,则设置在纸带上初始X坐标位置15点, 值的范围[0-9999],对应格式必须是4位数作为标识,Column Offset则基本雷同.不在赘述.添加了初始化位置DPL指令如下:
从上可以看出对应初始坐标为X:y=44:15.程序中控制坐标位置格式000R:
调用控制XY坐标:
如下在关注条码宽度设置,在图一中我们对条码设置一个属性值叫密尔 即条码宽度单位.在测试ZeBar打印计算ZPL中计算宽度是每密尔对应0.25CM. 但是在DPL设置则不同,单一单位区域内打印点DOt数量是不变的,只有设置DOt的高度和宽度才能设置条码外在宽度效果.203DPI 对应每英寸8个点Dot. DPL如何来设置每个点的Width和Height:具体语法格式
D11是默认值,针对300、400 600DPI打印机,DAtaMAx-i-4208的DPi为203,则对应的设置为D22. 在界面中密尔值范围8-17共10个值:
10值范围对应可以设置的比例关系为6个: 分别为1:1 /1:2/1:3/2:1/2:2/2:3. C#中进行范围指定控制:
如果采用默认的D11设置发现打印出来效果 总体条码宽度或高度过小.需要对条码宽高进行重新设置.在Code128语法命令有一段说明很重要:
其中明确提到第四个字符用来设置条码宽度,从第五个字符串到第七位设置条码高度值. Height[0-999] C#则需要凭借字符串方式来组合DPL指令:
至此从程序发给DAtaMAx最终打印DPL指令为:
最终控制打印效果[居中设置]:
最后关于