最近用RM报表来打印条形码,调试过程非常顺利,扫描枪识别也很正常,唯独斑马打印机的走纸不准确是个问题,正好客户不想用这种纸型,并定制了新纸型,心想等新纸型到后再调试报表的走纸问题不迟。
  几天后,新纸型到,于是在新纸型下进行调试,却发现新纸型的走纸非常正确,一想便明白是传感器的问题,原来的纸型宽,不适用这种斑马打印机,现在好了,走纸问题没有了,可以交付程序了。一个同事说别扫描枪不识别,我心里不以为然,另外一个同事顺手把打出来的条码往扫描枪一靠,我靠,还真没识别出来,又连续打了好几张,都不能识别,这下晕了。换原来的宽纸打印,能识别了。但是客户订的是窄纸型且窄纸无走纸不准确问题,只能用窄纸打印,便琢磨着问题出在哪儿,打印驱动、扫描枪、电脑都换了一遍,还是不行。细心的客户比较了一下两种纸,发现窄纸质量不如宽纸好,但是这也不能解决问题。再仔细看看,总感觉RM打印的条码不是很锐利,感觉模模糊糊的,尤其是细线几乎就没打印出来,放大一看,原本应该是直线的,但是实际上是圆角直线,觉得这就是问题所在。那就换控件吧,从网上找了N多条码控件,并研究了几种条形码的绘制方法与验证码的生成,但是不能嵌入到RM中,就没法用。

  已经夜里十二点了,突然想起RM的条形码也是抄别人的代码,如果找到该代码的升级版,也许可以解决问题,说找就找,经过一番搜索并对比,还真找到了原版代码,再仔细一看,靠,居然版本比RM用的还低,没招,还是研究一下RM的代码,看看能否找出问题所在,仔细看了RM的RM_AsBarCode单元,觉得没有什么问题,无意中发现了还有个RM_AsBarView单元,打开一看,原来RM是在这里通过调用RM_AsBarCode的DrawBarCode方法来绘制自己的画布的,估计应该是这里出问题了,经过研究,RM是采用了TMetafile类来进行绘制并放大的,这个类的好处是放大的失真度比较小,对于处理文字和图形应该是比较好的方案,但是处理条形码估计就不行了,于是换成TBitmap进行绘制,打印出来的条码放大后锯齿状明显,在正常情况下却是非常锐利的,心想这下问题应该解决了。连接打印机,一下打了十几张条形码,十几张条码扫描都非常顺利。

  问题解决,近深夜2点,睡觉。