房屋维修资金收据打印方案
2021-11-15唐俊杰
唐俊杰
(昆山市房屋维修资金管理中心,昆山215300)
0 引言
房屋维修资金是房屋公共部位维修改造的保障资金,因此房屋维修资金的收取至关重要[1-2]。温州市房屋维修资金管理中心李彦[3]科长谈到,收据由管理中心负责打印,新建房屋的维修资金由开发商代缴代收,房屋交付时,开发商再向业主收取,并提供统一的收款收据。房屋维修资金收据有着重要意义,它是业主缴纳房屋维修资金的唯一凭证,红河州住宅专项维修资金管理中心赵群[4]谈到改善房屋维修资金管理的措施中,提到需要做好房屋维修资金收据的日常管理。收据打印作为收据管理的第一环节,尤为重要。通过对江苏、浙江地区的调研,发现收据打印的共性问题,即无法通过现有的系统进行收据打印。近几年来,房屋维修资金在管理中暴露出越来越多的问题,很多政府部门都希望建立新的房屋维修资金信息化系统来解决突出问题[5],构建新的信息化系统或者在原有系统上做功能更新又需要一定的时间成本和金钱成本。本文针对以上问题,使用PHP、二维码[6-9]等技术,以较低的成本,帮助暂时不打算更换现有系统的政府部门实现收据批量打印及信息化管理。
1 相关软件介绍
使用PHP、JavaScript、HTML作为软件开发语言,UltraEdit作为软件开发IDE、文本编辑器,Apache作为Web服务器软件,Lodop作为Web打印控件,通过APPserv实现在Web服务器上一键安装PHP、Apache等软件。
2 打印方案实现思路
打印方案的实现,主要需要考虑如下问题:①打印机的选择;②如何获取打印数据;③如何实现批量打印,避免打印偏移。
2.1 打印机的选择
房屋维修资金收据一般由财政局提供,一式四联,具有复写功能,为此喷墨打印机、激光打印机虽然有着自己的优势,却无法实现多联纸的打印,而针式打印机利用机械原理,在打印时,用打印针撞击色带和多联收据,完成打印任务。针式打印机一般有9针、24针两种规格,9针的针式打印机打印分辨率一般横向小于160 dpi,纵向小于144 dpi,不支持纵向、横向相同分辨率,无法打印二维码[10],而24针的打印机,每一个平方英寸水平、垂直各打印360个点,打印分辨率可以达到360 dpi,由于房屋维修资金收据打印,涉及二维码的打印,而二维码对打印分辨率要求较高,因此选择24针的针式打印机。
2.2 打印数据的获取
目前政府部门使用的房屋维修资金管理软件产品有很多。浙江省75%的城市都使用由杭州安创科技有限公司开发的房屋维修资金管理系统;苏州大市范围内,使用博彦泓智科技(上海)有限公司开发的房屋维修资金管理系统;昆山市2015年之前,使用由杭州安创科技有限公司开发的房屋维修资金管理系统,2015年之后使用由建行软件中心开发的房屋维修资金管理系统。
本文以昆山市为例,实现收据批量打印信息化。昆山市房屋维修资金现有系统支持缴款明细数据的导出,因此打印数据的获取,可以通过系统查询并将数据下载到本地,再通过程序读取本地数据的方式来实现。
2.3 实现批量打印,避免打印偏移
厂家印制的收据与针式打印机兼容性不好,批量打印收据时,往往打印收据数一多,上下偏移现象严重。根据此现象,针对针式打印机实际使用情况,以组为单位,每次打印一组,设计相关打印逻辑,调用相应的打印控件,进行收据打印。如何调用打印控件,实现精准打印,也有很多解决方案。
3 打印方案实现
在硬件方面,需要一台普通的办公电脑,一台针式打印机。本文选择富士通DPK500作为测试机型,该机型打印头上的打印针数量是24根,打印分辨率可达360 dpi。在软件方面,除了Ul⁃traEdit、Lodop是付费软件,其他都是开源软件,总体成本并不高。
程序主要有以下4大功能组成,即数据读取、明细预览、收据二维码生成、收据批量打印。数据读取功能主负责将下载好的数据文件读到内存中;明细预览功能负责将读取到内存中的数据有选择性的显示到网页中,供用户预览、确认;收据二维码生成功能负责将房屋维修资金系统中的房屋ID转换成二维码图片;收据批量打印功能负责将用户需要的信息打印打印到收据上,并与针式打印机联动,实现收据批量打印,同时执行打印优化逻辑,降低打印偏移率。
3.1 数据读取
由用户将明细数据保存到指定的数据文件中print.txt,PHP页面实现数据文件的读取。PHP核心代码如下:
3.2 明细预览
通过数据读取功能,获取相应的字段,通过PHP程序,动态地生成静态HTML网页代码,并将字段内容也一并嵌入的HTML代码中。PHP核心代码如下:
3.3 收据二维码生成
二维码又称二维条码,目前常用的二维码为QR Code(quick response),可以通过多种IT技术生成QR Code。如Google开放的API、PHP类库PHPqrCode、基于jQuery框架的插件Qrcode.js[11]。
本文使用PHPqrCode类库,通过include函数将phpqrcode目录下的phpqrcode.php文件引用到PHP程序中。QRcode::png函数实现将房屋ID转化为二维码并以图片的格式保存到指定的目录中。为了使打印程序便捷的调用收据二维码,文件名设置为房屋ID。
QRcode::png函数中,第一个参数表示待转化的值,第二个参数表示生成图片的目录,如果不想生成,可以设置为false,第三个参数表示二维码的容错率(L表示7%,M表示15%,Q表示25%,H表示30%),表示可被覆盖的区域百分比。第四个参数表示控制生成二维码图片的大小。
考虑到针式打印机的打印分辨率不高,所以因尽量根据实际情况,选择与针式打印机相适应的容错率及二维码图片大小。容错率越高,存储的信息也越多,二维码也越复杂,对打印分辨率要求也越高。图1展示了四张容错率不同,内容相同的二维码图片,供读者参考,内容为“Old_ID=B5226765”。
图1 二维码容错率对比图
为了区分二维码的内容是现有系统的ID,还是以后新系统的ID,在现有系统不变更的情况下,将$ID_value的值设置为“Old_ID=”开头,用以区分新老系统。
PHP核心代码如下:
3.4 收据批量打印
收据打印内容从HTML字段元素以及指定二维码目录中获取。Web打印控件主要有三种:一种是微软的WebBrowser控件,一种是由梦泰尔软件工作室研发的Lodop打印控件,另一种是Java的Applet打 印 控 件。WebBrowser、Applet在 打 印控制方面、使用环境方面等存在一些不足[12-13],因此本文采用Lodop控件实现房屋维修资金收据精准打印。通过两个函数实现收据打印功能。
3.4.1 打印控制函数MyPrint
该函数可以设置打印纸张的大小,设置打印逻辑,通过优化后的打印逻辑,做到了打印效率与打印上下偏移的平衡,用户在网页上点击打印按钮,首先会调用此函数。
本文以昆山市房屋维修资金收据为实验对象,该收据的大小为:长190 mm,宽101 mm。通 过 函 数LODOP.SET_PRINT_PAGESIZE(1,"190 mm","101 mm","CreateCustomPage")设置纸张大小,经测试,始终无法完美匹配打印模板,打印5张收据就会发生向下偏移,经分析,偏移的原因可能是针式打印机、收据孔距之间不兼容,导致即便设置宽度101 mm,但实际打印效果却并不正确。
宽度的设置至关重要,设想如果一张纸上打印字符的高度偏差1 mm,20张纸就要2 cm。通过反复测试,发现无论设置何种收据宽度,当收据打印到一定数量时,都无法避免收据内容上下偏移的现象。为此,根据针式打印机的卡纸频率、线圈发热以及打印效率等因素综合考虑,优化打印逻辑,将宽度参数设置为101.6 mm,12张为一组,进行打印,打印结束,按针式打印机复位按钮,复位第一张待打印的收据位置,复位完成后,继续打印。
函数MyPrint程序流程图图2。
图2 MyPrint程序流程
3.4.2 收据打印函数CreateOnePage
该函数可以实现将指定行打印到收据上。
函数CreateOnePage打印预览效果见图3,实际打印效果见图4,为了保护业主房屋隐私,打印的房屋数据为本文虚构,核心PHP代码如下:
//获取该行的房屋维修资金房屋ID,通过HTML字段元素的值获取
图3 打印预览
图4 实际打印效果
4 结语
房屋维修资金收据打印是维修资金归集业务中必要环节,而有些政府部门的收据打印还处于较原始的阶段。新系统的研发、新功能的升级,会涉及到方方面面,不一定容易推进下去。本文就以上矛盾问题,提出一种打印方案,帮助相关政府部门,在维持现有系统的基础上,实现收据的批量打印,同时在收据上打印二维码,为以后房屋维修资金业务拓展留了入口,对处于信息化系统建设过渡期的政府来说,是一个很好的打印思路。
本文通过PHP、Lodop、PHPqrCode类库等Web技术,针对原有系统支持数据导出的政府部门,实现了房屋维修资金收据的批量打印,节省了政府部门的时间,降低了偏移概率。但是本文提出的收据打印逻辑还需要进一步研究,在实际工作中,发现印刷厂印刷的收据,可能因为生产工艺的问题,批次的不同,收据的宽度、孔距也会有略微的差异,这对预先设定好参数的打印优化逻辑有一定的影响,为此,如何针对不同批次的收据,通过程序识别自动调整,是下一步研究的方向。