最近需要向客户发送一些宣传资料,Excel列表里面有一两百个记录,本来想手写就算了,估摸着也花不了多少时间,不过写完一个信封我就后悔了,整天敲着键盘,书写的字太难看了,而且感觉手还是有点累。才第一个啊,想着后面还有那么多,感觉整个人头都大了,只好放弃,太没技术含量了。然后寻找有无一些套打的的软件,不过找来找去还是没有满意的,还是自己写一个套打的软件好了,这个小小的还是有点技术含量,呵呵。本篇随笔基于这个困惑,整理了一个信封套打以及批量打印的实现过程,软件可以实现自动批量的信封套打,一两百个的信封地址,也是一阵子的功夫就打印完成了,感觉小有成就,而且以后就基于这个模式来批量打印信封,方便了很多。
1、信封套打的实现思路
基于套打的处理,我在几年前的随笔都有一些随笔介绍,如《Web打印的解决方案之证件套打》、《基于MVC4+EasyUI的Web开发框架经验总结(16)--使用云打印控件C-Lodop打印页面或套打报关运单信息》这两篇随笔基本思路还是采用打印控件C-Lodop(http://www.lodop.net/)来进行打印的,我这样的套打小程序,最好还是做成Winform程序比较方便,因此在Winform里面整合网页浏览就可以实现这个控件的打印处理了。
另外,我们根据打印的地址信息,动态的生成HTML内容即可,基于这样的理念,我们动态生成HTML可以考虑使用NVelocity的模板化处理技术,这个可以参考下我的随笔《使用NVelocity生成内容的几种方式》进行了解,这个NVelocity用来处理模板化的内容生成还是非常方便的。
前面介绍的这些内容,其实就是基于C-Lodop 和 NVelocity进行一个信封批量套打的处理实现技术。
这些技术都是之前研究实现过的东西,用起来应该驾轻就熟了,也就不枉费精力去找其他信封套打软件了。
我们先来介绍一下整体的打印效果,首先我们要有一些特制的信封或者普通信封,这样才能基于这个基础上进行套打,把邮政编码、地址和联系人等信息打印上去。
![](https://i-blog.csdnimg.cn/blog_migrate/e9795d56ae5d47b24e52c68aa33b78a8.webp?x-image-process=image/format,png)
然后你需要有一个打印设备,我这里采用了一个佳能的喷墨打印机(当然其他的也没问题)。
![](https://i-blog.csdnimg.cn/blog_migrate/45a10527497fae6938bd2382cf1f3be8.webp?x-image-process=image/format,png)
最后就是基于软件的基础上进行套打了,软件可以单个打印,也可以导入Excel进行套打才可以解决实际问题。
![](https://i-blog.csdnimg.cn/blog_migrate/486a89fcb92980ff50c96ba08c50edff.webp?x-image-process=image/format,png)
一般是在单个打印没问题后,进行批量打印,可以省却大量的时间,下面是基于这个套打软件打印的信封,如果手写的话,不知道写到何年何月了。
![](https://i-blog.csdnimg.cn/blog_migrate/e998ad0bc6149cba91fbc049d842567d.webp?x-image-process=image/format,png)
2、信封套打的实现过程
下面我们来介绍这个信封套打的实现过程。
首先我们先做一个测试页面,启动C-Lodop的设计界面,我们往里面添加一些信封所需要的元素,如套打的背景图片、邮政编码的文本、地址文本、人名称呼等信息后,大致调整到合适的位置即完成了相关的设计,界面设计效果如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/979966e1061cb1170042e88b1bb686af.webp?x-image-process=image/format,png)
然后我们通过获取设计样式下的代码
![](https://i-blog.csdnimg.cn/blog_migrate/322bd5ddae23988a1b6aac5bb7d55390.webp?x-image-process=image/format,png)
生成代码里面就可以看到具体的内容了。
![](https://i-blog.csdnimg.cn/blog_migrate/2c01d9602f95e14cc23864ae7fb281b5.webp?x-image-process=image/format,png)
有了这些信息,我们就可以创建一个HTML模板,然后利用NVelocity来动态生成相关的变量信息即可,HTML模板文件中的逻辑代码(JS代码)如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/fd2ef35dc3c4fccd89c2f7d97e8db16a.webp?x-image-process=image/format,png)
接着在我们模板文件中的打印预览函数编写如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/bc3b7c49d7bf18e63e736130a44d8909.webp?x-image-process=image/format,png)
这样就可以实现标准格式的浏览了,文本显示位置不一定和背景完全吻合,背景只是作为参考处理而已。
![](https://i-blog.csdnimg.cn/blog_migrate/663197898102851a6e1a0de1f03fca9e.webp?x-image-process=image/format,png)
完成这些就基本上是大功告成了,但是我们打印的时候,我们需要注意在打印设置中采用的纸张,如果采用A4的卡纸宽度和自定义的卡纸宽度的设置是不同的,我们建议根据信封的尺寸自定义格式设置,卡纸的位置就和信封宽度一致即可,防止信封进纸的时候晃动导致位置发生偏差。下面的是我对打印信封的用户自定义设置对话框,采用实际的尺寸(毫米)进行设置即可。
![](https://i-blog.csdnimg.cn/blog_migrate/232f906f5ffc3636e4236d0a2074434f.webp?x-image-process=image/format,png)
前面介绍的是当个信封打印预览然后进行打印,打印的按钮事件处理代码如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/f55141372d68964fb2c0b64710fa5edf.webp?x-image-process=image/format,png)
传入相关的键值参数后,可以实现相关的数据绑定,然后打开HTML后,就可以执行相关的脚本进行信封打印了。
而对于批量打印,处理方式和单个打印有所差异,就是不会每个都介入预览操作,我们是需要把一批对象进行打印。
那么我们如果要实现批量的数据打印,就需要利用JS里面的数组操作,把对应的对象放到里面,然后批量进行打印就可以了。
![](https://i-blog.csdnimg.cn/blog_migrate/ec924f538e77bc82c0d508a49e04fdcf.webp?x-image-process=image/format,png)
而这个数据的生成,我们就是利用NVelocity的模板函数进行处理即可。
![](https://i-blog.csdnimg.cn/blog_migrate/ddb7a50e9f06e1862c85edc38137baeb.webp?x-image-process=image/format,png)
完成这些,我们就可以传入对应的打印集合,让其在NVelocity模板里面生成对应的HTML代码,生成对应的对象加入到打印的数组里面,从而完成批量的数据打印了。
批量套打是在我们确认单个打印格式吻合已有信封的位置情况下,进行批量的打印处理。
![](https://i-blog.csdnimg.cn/blog_migrate/953b1d4ca5d0612b41201a5c21fd5b84.webp?x-image-process=image/format,png)
一旦开启批量打印,我们的剩下的工作就是不断的往打印机上面放置足够的信封即可,可以边喝茶边等待完成,悠然自得的了。
![](https://i-blog.csdnimg.cn/blog_migrate/4fa5e2df3e6c2056ab20cd198a57a050.webp?x-image-process=image/format,png)
以上就是基于NVelocity+C-LODOP控件实现的信封套打整个思路和实现方式,对于我们技术人来说,做一个这样的软件所花费的时间,比手写几百个信封浪费的时间更有意义,所获得的成就感也是有那么一些的。