web套打中内容偏移的成因及一点小小的解决方法
以下摘自某个打印论坛,网友出现了因连续打印出现套打偏移的问题后,与专业技术人员的对话:
?
网友问:“打印的时候第一张单据的打印位置是准确的,到第十张以后的位置就不正确了。这是怎么回事,能不能详细说明一下?”
?
专家答:“有时按测量的纸张尺寸精确设置报表的纸张页面大小后,用打印机进行实际输出多页时会发生位置偏移,一般都是因为打印机走纸不准造成的。要修正这样的走纸误差,可以一次性连续多打印几页(如3-5页),量出最后一页的位置误差值,据此求出每页的平均误差,然后根据这个平均误差值调整报表中的页面高度值。?”
?
网友再问:“好的,谢谢了。但是现在有一个问题是,我如果将页面的高度设置为7.6149cm时在打印的时候就会出现上偏移的情况。将页面设置为7.6150的时候打印就出现下偏移情况。在7.6149和7.6150之间不能再增加一位小数了,不知道在这种情况下是怎么解决的。”
?
专家:(雷翻!无语…)
?
上面网友的问题,看似无厘头,但如果你是套打软件的设计者,或者是套打软件的使用者,遇到这种套打偏移的问题,应该说,还是不少的。如果连续按固定高度打印50张,有可能会出现向下或向上偏移,如下图所示:
?
?
偏移的原因是什么??一种原因,正如上面专家分析的那样,是打印纸张高度设置得不对,只要根据误差,调整纸张高度就行了。另一种原因,是打印机走纸不够精准,少打几页还看不出有啥问题,但连续打印后,因为误差累积起来,打印到10几张时,就很明显了,如果打印到100多张,上千张,呵,必须谬之毫里,差之千里了。
?
打印机走纸不准,原因是啥呢?要不就是打印机质量不过关,要不就是打印机老化引起针孔传动机构精度下降,还有啥?我不是打印机的硬件专家,我只知道这些。
?
碰到这种纸张调高一点,向下偏,调矮一点向上偏,因为纸张设置精度有限以致无法再取一个中间高度的情况,我们做程序的,也只能建议用户,换一台精度高一点的打印机,或者建议一次不要打印太多。
?
有没有更好的办法,在走纸不那么精准的打印机上,来解决套打偏移的问题呢?我提一个想法,希望对各位做套打程序的朋友们一点启发:就是在一个打印任务中,当打印完几张正常高度的票据后,打印一张用来纠偏的、特别高度的票据(以下称之为校正页),这样可以降低对打印机走纸精度的要求,也达到了纠偏的目的,此方法可图标如下:
?
?
?
以网上流行的JatoolsPrinter?web打印控件为例,它已经引入了这个方法,而且被证明非常有效。下面我简单说说,jatoolsPrinter如何实现这个连续套打的纠偏功能:1.?先测量出,票据的实际高度,比如120mm(宽)*100mm(高);
2.?按所得票据大小,设置自定义纸张,jatoolsPrinter可以自动创建自定义纸张类型,不必手动在控制面板/打印机、传真机中设置纸张类型。
3.?按所设纸张,试着连续打印票据,尽量多些,比如50张,假设测得最后一张向下偏移10cm。
在打印控件里,加入如下纠偏代码:
settings:{paperWidth:1200,???????//?以1/10mm为单位,下同
???????paperHeight:1000,
???????normalOffset:{
??????????????????offsetPages:50,
??????????????????offset:120,
??????????????????normalPages:5
??????????????????}
}
?
以上代码告诉控件,这个打印机,每打印50张票据会产生10mm的向下偏移,请在每打印5张票据后,打印一张校正页,本例中,控件将以98.8?(mm)的纸张高度打印该票据。因为,是向下偏移,所以要插入一个高度略小于正常纸张的校正页。
?
每个校正页的高度计算公式如下:
paperHeight?–?(normalPages?*?offset?/?offsetPages?)
=?100.0mm-?5?*?12.0mm/?50?=?98.8mm
?
?
如果你正在开发web?应用,想解决连续套打偏移的问题或需要更灵活地控制打印机,jatoolsPrinter会是一个比较好的选择。如果你有兴趣自已实现套打纠偏的问题,根据本文提供的思路,也是可以做到的。
?
?