今天在论坛中看到有人在讨论关于票据打印的问题
在DOS年代,我们是直接用控制打印机对象的方法进行单字打印。
在现在图形界面开发的程序中,仍有很多人在使用这种方法。
当然这种方法的好处是显而易见的,打印位置准确,容易控制走纸,
而且比其他的打印方式相对能延长打印机寿命,节约打印成本。
使用printer对象控制打印的唯一问题是开发时调整位置需要相当长的时间。
在现在的很多项目中,我们使用的是可视化的编程工具,相应的打印方法又增加了很多。
有人采用的是使用Excel模板的方法,将输入写入到Excel模板来控制打印。
这个方法固然有好处,但是其问题是在打印时需要启动一个Excel应用。
在进行大量快速打印的时候,这个问题就更为突出。
现在我们来切入正题,票据类的套打一般就是打印细目,金额等信息
打印前可能需要进行预览,然后进行打印,打印时不需要打印发票上已经有的内容
如文字,边线。
部分单位可能需要在打印内容的基础上需要打印一个公章类的印记。
在实际的操作中,我们用扫描仪扫描该发票,
使用图形处理工具处理成灰度,注意扫描的时候可能会导致大小有些变形,需要调整大小。
然后打印出来与实际票据对比,直到大小一致。
这个过程很快的,大概只要几分钟的时间,如果开发时使用15寸显示器(1024*768),
那么票据大小与屏幕上显示的比例基本就是1:1
如果是17寸显示器(1024*768),屏幕上的显示就比实际打印出来的大。
在开发时,选定一个Form,将Form的底色设置成白色,把处理好后的图设置为底图。
将Form调整为与图片一样大小。
然后将Label控件拖到对应的位置(或者用),在程序中只要更改这些Label的值就可以了。
这样根本就不用在去在界面上画线,还要一遍一遍地去对应位置,基本是一次成功
设置完毕后就可以直接打印,打印前将Form的底图取消掉即可。
这样的好处是在打印前可以直接预览而不用再进行特别处理。
代码大致如下:
'---------------------------------
'假设我们打印2004年9月的固话帐单
'基本信息
lblYear.caption="2004"
lblMonth.caption="09"
lblUserName.caption="Babyt(阿泰)"
lblUserID.caption="12345678"
'话费条目
lblItem(0).caption="市话月租费" '项目
lblTimes(0).caption="" '次数
lblFee(0).caption="25.00元" '费用
lblItem(1).caption="区间通话费" '项目
lblTimes(1).caption="800次" '次数
lblFee(1).caption="80.00元" '费用
.....
lblMoneyCN.caption="壹佰贰拾元整"
lblMoneyEN.caption="¥120.00"
'设置完毕
'---------------------------------
'界面上不要出现按钮之类的
'Form上增加KeyDown事件,如果按下回车键,进行提示打印
'如果确定打印,使用以下语句取消掉背景图片
frm.Picture=LoadPicture("")
'然后进行窗体打印即可
Me.PrintForm
在后面的文章中,我将讲解如何进行走纸张控制和条形码打印的一些注意事项