一路坎坷的打印驱动
来了一台 斑马zd888-zpl 标签打印机, 同事说,看,条码在测试纸上打出来了,你在那种规格纸上按公司要求打印出来就好了!
看看我有多菜, 非技术问题就找了厂家三遍! 再加上一个系统问题,花了我不少时间.
问题1: 打印机未装碳带.
在另一种纸上,我怎么试验都是只走纸,不打印. 而能打印的纸还是能打印.
我确定了不是软件问题, 只好找卖家咨询, 反正卖家就在我们楼下.
厂家技术人员检验后,对我们说, 能打印的是热敏纸, 不能打印的是铜版纸,需要碳带转印的.
我的同事才惊呼"哦,忘了装碳带了", 是的,我也不知道还有"碳带","转印"之说.
问题2: 打印机默认设置打印不出任何东西.
我们安装了碳带, 再打印,还是只走纸,不出文字和图像, 实在找不到原因,还是找卖家吧, 是不是硬件有问题?
结果发现只要把打印浓度调高就可以了.
默认的浓度是10, 黑色打印的是一片白, 白色也是一片白,总之就是只走纸,不出色.
要把浓度设置到25以上(最大值是30), 才看出效果来,真是shit.
后来换了碳带把浓度调到10,调到3都能打印,其实打印黑度跟碳带,跟纸张,跟浓度设置,跟走纸速度都是有关系的.
问题3: 打印机一走纸就找不到边界,不停的走纸.
赠送的测试纸,基带是半透明的,打一条信息后,会自动走纸到边缘.
新买的标签纸(亞银纸),打一条信息后便无休止的滚动,停不下来,是不是纸不透明影响了感光头找不到边界?
还是别的原因? 电话咨询了厂家说是要把感光头向右拨到底. 靠,又一个shit, 测试纸能停新买纸不行,就差那么一点.
问题4: 打印一会能打,一会不能打,能把你气死.
都是它自己的标准驱动,用笔记本写个测试文本测试, 一会能打,一会不能打.
后来我把斑马的监视程序装上,时刻监视打印机状态,发现一会联机,一会断开, 见了鬼了.
试了试,别人的机器不这样, 可是别人是win10, 我的是虚拟机win7. 我想可能是360在捣乱,
立即卸载了360, 果然可以稳定的联机了, 但是,一张白纸也能打出黑白相间的斑马条纹,这些黑条纹不知道从哪里来的.
别人的机器不这样, 这都是调用的标准驱动,不是我自己的驱动, 果断的决定(也是被逼无耐的决定)重装系统,
并且重装vs2019.
工作任务:
重装系统后,一切恢复了正常, 但公司决定不仅仅只是打一个简单的条码,而是要打印产品标签, 是一个复杂的表格,
并包含条码, 经研究决定,不要用EPL自己写驱动,而是应该调用通用打印机接口,由接口调用打印机厂家给的驱动.
我的任务是首先获得一张底图,上边有公司logo,产品logo及表格等位图信息, 然后由程序在表格中填充需要的文字,
最后把这个合成的图片打印出来, 看起来似乎并不复杂.
下面看看软件走过的弯路: 如何解决图像不清晰问题.
问题1: 需要一个最佳的转换. (这其实是一个弯路的开始)
因为底图往往是绘图人元随便给的一个底图,有好几种底图,构建10几种表格.我需要把它们打印到规定的不同的打印纸上,
由于底图不加变换的直接打印并不能适配纸张大小,所以我需要一个最佳的转换,把它打印到打印纸上,就是在寬高比
基本不变的前提下,填满整个纸张.
搜索了很多打印程序,找不到满足要求的有价值的参考, 是自己查阅了微软文档并结合网上代码,最后拼凑了自适应代码.
调整好比例,无论什么纸张都能自适应打印了.
问题2: 图片显示不完整. (加大源区域范围,这引起了图像不清晰)
适当的缩放后, 发现打印的图片头部和右部显示不出来, 说明原图只简单缩放还是不太理想,
又第二次的进行了图片的伸缩,例如把映射区域起点向左,向上
伸展到负值,把宽度,高度进行加寛加长, 这样才在打印区看到了完整图像.
相当于把图片进行了第二次调整和拉伸.
问题来了,当把图像都调整好后,条码,二维码扫不到了. 文字,图像看起来也不清晰了.
进行图片缩放以及调整都对图片进行了破坏, 图片是点阵的,并不是矢量图, 调整必乱!
例如对于24*24点阵字体, 调整到23点阵, 字体必乱而不是按比例缩放. 条码,二维码也是如此.
若调整不大,纠错能力强的扫描仪还可应付, 一般扫描工具的就不行了.
解决方法就是去除缩放及去除调整. 改用drawImage(image,x,y)即可.并且要主要image的dpi
用户所谓的在指定大小的图纸上完成指定功能的要求不可能十全十美的达到.
换句话说,如果指定了字体, 则字体就决定了图纸的宽度,实际的宽度应该服从计算的宽度
同样,如果先确定了实际宽度,我们就只能找合适的字体. 并且字体可能并不能完美的占满整个宽度.
于是我理解了,为什么条码或者二维码其长度并不是连续变化的,而是跳跃的,
是的,在一个固定的大小,你拉大区域,编码尺寸不变. 只有当你拉大到足够大小时,它才一下子扩充过去.
因为它们自己是有结构的, 当容量足够大时,它们会把整个结构扩大一级.就像字体一样.
它并不是无极放大的.它是有点阵结构的. 这是人们思维的误区!以为可以随意拉伸.
问题3: 小字号字体,汉字打印正常,但字母数字被加粗(当然,加粗的字体会更粗).
查网发现,这个是windows 系统问题, 将所有的windows 特效去掉,改为最佳性能, 能使小字号字母数字显示正常.
从来没有用csharp 创建过工程,至多只是在旧工程上改一改, 现在要被逼上高手之路了.
本贴没有包含什么技术,关键技术也就一两句而已,但记录了不少问题和处理方法.
这仅仅是搞完项目后的一个总结,回望走过的路,默默的为自己加油,因为我有一个完整的经历. 绝知此事要躬行.