唐俊杰
(昆山市房屋維修資金管理中心,昆山215300)
房屋維修資金是房屋公共部位維修改造的保障資金,因此房屋維修資金的收取至關(guān)重要[1-2]。溫州市房屋維修資金管理中心李彥[3]科長(zhǎng)談到,收據(jù)由管理中心負(fù)責(zé)打印,新建房屋的維修資金由開(kāi)發(fā)商代繳代收,房屋交付時(shí),開(kāi)發(fā)商再向業(yè)主收取,并提供統(tǒng)一的收款收據(jù)。房屋維修資金收據(jù)有著重要意義,它是業(yè)主繳納房屋維修資金的唯一憑證,紅河州住宅專(zhuān)項(xiàng)維修資金管理中心趙群[4]談到改善房屋維修資金管理的措施中,提到需要做好房屋維修資金收據(jù)的日常管理。收據(jù)打印作為收據(jù)管理的第一環(huán)節(jié),尤為重要。通過(guò)對(duì)江蘇、浙江地區(qū)的調(diào)研,發(fā)現(xiàn)收據(jù)打印的共性問(wèn)題,即無(wú)法通過(guò)現(xiàn)有的系統(tǒng)進(jìn)行收據(jù)打印。近幾年來(lái),房屋維修資金在管理中暴露出越來(lái)越多的問(wèn)題,很多政府部門(mén)都希望建立新的房屋維修資金信息化系統(tǒng)來(lái)解決突出問(wèn)題[5],構(gòu)建新的信息化系統(tǒng)或者在原有系統(tǒng)上做功能更新又需要一定的時(shí)間成本和金錢(qián)成本。本文針對(duì)以上問(wèn)題,使用PHP、二維碼[6-9]等技術(shù),以較低的成本,幫助暫時(shí)不打算更換現(xiàn)有系統(tǒng)的政府部門(mén)實(shí)現(xiàn)收據(jù)批量打印及信息化管理。
使用PHP、JavaScript、HTML作為軟件開(kāi)發(fā)語(yǔ)言,UltraEdit作為軟件開(kāi)發(fā)IDE、文本編輯器,Apache作為Web服務(wù)器軟件,Lodop作為Web打印控件,通過(guò)APPserv實(shí)現(xiàn)在Web服務(wù)器上一鍵安裝PHP、Apache等軟件。
打印方案的實(shí)現(xiàn),主要需要考慮如下問(wèn)題:①打印機(jī)的選擇;②如何獲取打印數(shù)據(jù);③如何實(shí)現(xiàn)批量打印,避免打印偏移。
房屋維修資金收據(jù)一般由財(cái)政局提供,一式四聯(lián),具有復(fù)寫(xiě)功能,為此噴墨打印機(jī)、激光打印機(jī)雖然有著自己的優(yōu)勢(shì),卻無(wú)法實(shí)現(xiàn)多聯(lián)紙的打印,而針式打印機(jī)利用機(jī)械原理,在打印時(shí),用打印針撞擊色帶和多聯(lián)收據(jù),完成打印任務(wù)。針式打印機(jī)一般有9針、24針兩種規(guī)格,9針的針式打印機(jī)打印分辨率一般橫向小于160 dpi,縱向小于144 dpi,不支持縱向、橫向相同分辨率,無(wú)法打印二維碼[10],而24針的打印機(jī),每一個(gè)平方英寸水平、垂直各打印360個(gè)點(diǎn),打印分辨率可以達(dá)到360 dpi,由于房屋維修資金收據(jù)打印,涉及二維碼的打印,而二維碼對(duì)打印分辨率要求較高,因此選擇24針的針式打印機(jī)。
目前政府部門(mén)使用的房屋維修資金管理軟件產(chǎn)品有很多。浙江省75%的城市都使用由杭州安創(chuàng)科技有限公司開(kāi)發(fā)的房屋維修資金管理系統(tǒng);蘇州大市范圍內(nèi),使用博彥泓智科技(上海)有限公司開(kāi)發(fā)的房屋維修資金管理系統(tǒng);昆山市2015年之前,使用由杭州安創(chuàng)科技有限公司開(kāi)發(fā)的房屋維修資金管理系統(tǒng),2015年之后使用由建行軟件中心開(kāi)發(fā)的房屋維修資金管理系統(tǒng)。
本文以昆山市為例,實(shí)現(xiàn)收據(jù)批量打印信息化。昆山市房屋維修資金現(xiàn)有系統(tǒng)支持繳款明細(xì)數(shù)據(jù)的導(dǎo)出,因此打印數(shù)據(jù)的獲取,可以通過(guò)系統(tǒng)查詢(xún)并將數(shù)據(jù)下載到本地,再通過(guò)程序讀取本地?cái)?shù)據(jù)的方式來(lái)實(shí)現(xiàn)。
廠家印制的收據(jù)與針式打印機(jī)兼容性不好,批量打印收據(jù)時(shí),往往打印收據(jù)數(shù)一多,上下偏移現(xiàn)象嚴(yán)重。根據(jù)此現(xiàn)象,針對(duì)針式打印機(jī)實(shí)際使用情況,以組為單位,每次打印一組,設(shè)計(jì)相關(guān)打印邏輯,調(diào)用相應(yīng)的打印控件,進(jìn)行收據(jù)打印。如何調(diào)用打印控件,實(shí)現(xiàn)精準(zhǔn)打印,也有很多解決方案。
在硬件方面,需要一臺(tái)普通的辦公電腦,一臺(tái)針式打印機(jī)。本文選擇富士通DPK500作為測(cè)試機(jī)型,該機(jī)型打印頭上的打印針數(shù)量是24根,打印分辨率可達(dá)360 dpi。在軟件方面,除了Ul?traEdit、Lodop是付費(fèi)軟件,其他都是開(kāi)源軟件,總體成本并不高。
程序主要有以下4大功能組成,即數(shù)據(jù)讀取、明細(xì)預(yù)覽、收據(jù)二維碼生成、收據(jù)批量打印。數(shù)據(jù)讀取功能主負(fù)責(zé)將下載好的數(shù)據(jù)文件讀到內(nèi)存中;明細(xì)預(yù)覽功能負(fù)責(zé)將讀取到內(nèi)存中的數(shù)據(jù)有選擇性的顯示到網(wǎng)頁(yè)中,供用戶(hù)預(yù)覽、確認(rèn);收據(jù)二維碼生成功能負(fù)責(zé)將房屋維修資金系統(tǒng)中的房屋ID轉(zhuǎn)換成二維碼圖片;收據(jù)批量打印功能負(fù)責(zé)將用戶(hù)需要的信息打印打印到收據(jù)上,并與針式打印機(jī)聯(lián)動(dòng),實(shí)現(xiàn)收據(jù)批量打印,同時(shí)執(zhí)行打印優(yōu)化邏輯,降低打印偏移率。
由用戶(hù)將明細(xì)數(shù)據(jù)保存到指定的數(shù)據(jù)文件中print.txt,PHP頁(yè)面實(shí)現(xiàn)數(shù)據(jù)文件的讀取。PHP核心代碼如下:
通過(guò)數(shù)據(jù)讀取功能,獲取相應(yīng)的字段,通過(guò)PHP程序,動(dòng)態(tài)地生成靜態(tài)HTML網(wǎng)頁(yè)代碼,并將字段內(nèi)容也一并嵌入的HTML代碼中。PHP核心代碼如下:
二維碼又稱(chēng)二維條碼,目前常用的二維碼為QR Code(quick response),可以通過(guò)多種IT技術(shù)生成QR Code。如Google開(kāi)放的API、PHP類(lèi)庫(kù)PHPqrCode、基于jQuery框架的插件Qrcode.js[11]。
本文使用PHPqrCode類(lèi)庫(kù),通過(guò)include函數(shù)將phpqrcode目錄下的phpqrcode.php文件引用到PHP程序中。QRcode::png函數(shù)實(shí)現(xiàn)將房屋ID轉(zhuǎn)化為二維碼并以圖片的格式保存到指定的目錄中。為了使打印程序便捷的調(diào)用收據(jù)二維碼,文件名設(shè)置為房屋ID。
QRcode::png函數(shù)中,第一個(gè)參數(shù)表示待轉(zhuǎn)化的值,第二個(gè)參數(shù)表示生成圖片的目錄,如果不想生成,可以設(shè)置為false,第三個(gè)參數(shù)表示二維碼的容錯(cuò)率(L表示7%,M表示15%,Q表示25%,H表示30%),表示可被覆蓋的區(qū)域百分比。第四個(gè)參數(shù)表示控制生成二維碼圖片的大小。
考慮到針式打印機(jī)的打印分辨率不高,所以因盡量根據(jù)實(shí)際情況,選擇與針式打印機(jī)相適應(yīng)的容錯(cuò)率及二維碼圖片大小。容錯(cuò)率越高,存儲(chǔ)的信息也越多,二維碼也越復(fù)雜,對(duì)打印分辨率要求也越高。圖1展示了四張容錯(cuò)率不同,內(nèi)容相同的二維碼圖片,供讀者參考,內(nèi)容為“Old_ID=B5226765”。
圖1 二維碼容錯(cuò)率對(duì)比圖
為了區(qū)分二維碼的內(nèi)容是現(xiàn)有系統(tǒng)的ID,還是以后新系統(tǒng)的ID,在現(xiàn)有系統(tǒng)不變更的情況下,將$ID_value的值設(shè)置為“Old_ID=”開(kāi)頭,用以區(qū)分新老系統(tǒng)。
PHP核心代碼如下:
收據(jù)打印內(nèi)容從HTML字段元素以及指定二維碼目錄中獲取。Web打印控件主要有三種:一種是微軟的WebBrowser控件,一種是由夢(mèng)泰爾軟件工作室研發(fā)的Lodop打印控件,另一種是Java的Applet打 印 控 件。WebBrowser、Applet在 打 印控制方面、使用環(huán)境方面等存在一些不足[12-13],因此本文采用Lodop控件實(shí)現(xiàn)房屋維修資金收據(jù)精準(zhǔn)打印。通過(guò)兩個(gè)函數(shù)實(shí)現(xiàn)收據(jù)打印功能。
3.4.1 打印控制函數(shù)MyPrint
該函數(shù)可以設(shè)置打印紙張的大小,設(shè)置打印邏輯,通過(guò)優(yōu)化后的打印邏輯,做到了打印效率與打印上下偏移的平衡,用戶(hù)在網(wǎng)頁(yè)上點(diǎn)擊打印按鈕,首先會(huì)調(diào)用此函數(shù)。
本文以昆山市房屋維修資金收據(jù)為實(shí)驗(yàn)對(duì)象,該收據(jù)的大小為:長(zhǎng)190 mm,寬101 mm。通 過(guò) 函 數(shù)LODOP.SET_PRINT_PAGESIZE(1,"190 mm","101 mm","CreateCustomPage")設(shè)置紙張大小,經(jīng)測(cè)試,始終無(wú)法完美匹配打印模板,打印5張收據(jù)就會(huì)發(fā)生向下偏移,經(jīng)分析,偏移的原因可能是針式打印機(jī)、收據(jù)孔距之間不兼容,導(dǎo)致即便設(shè)置寬度101 mm,但實(shí)際打印效果卻并不正確。
寬度的設(shè)置至關(guān)重要,設(shè)想如果一張紙上打印字符的高度偏差1 mm,20張紙就要2 cm。通過(guò)反復(fù)測(cè)試,發(fā)現(xiàn)無(wú)論設(shè)置何種收據(jù)寬度,當(dāng)收據(jù)打印到一定數(shù)量時(shí),都無(wú)法避免收據(jù)內(nèi)容上下偏移的現(xiàn)象。為此,根據(jù)針式打印機(jī)的卡紙頻率、線圈發(fā)熱以及打印效率等因素綜合考慮,優(yōu)化打印邏輯,將寬度參數(shù)設(shè)置為101.6 mm,12張為一組,進(jìn)行打印,打印結(jié)束,按針式打印機(jī)復(fù)位按鈕,復(fù)位第一張待打印的收據(jù)位置,復(fù)位完成后,繼續(xù)打印。
函數(shù)MyPrint程序流程圖圖2。
圖2 MyPrint程序流程
3.4.2 收據(jù)打印函數(shù)CreateOnePage
該函數(shù)可以實(shí)現(xiàn)將指定行打印到收據(jù)上。
函數(shù)CreateOnePage打印預(yù)覽效果見(jiàn)圖3,實(shí)際打印效果見(jiàn)圖4,為了保護(hù)業(yè)主房屋隱私,打印的房屋數(shù)據(jù)為本文虛構(gòu),核心PHP代碼如下:
//獲取該行的房屋維修資金房屋ID,通過(guò)HTML字段元素的值獲取
圖3 打印預(yù)覽
圖4 實(shí)際打印效果
房屋維修資金收據(jù)打印是維修資金歸集業(yè)務(wù)中必要環(huán)節(jié),而有些政府部門(mén)的收據(jù)打印還處于較原始的階段。新系統(tǒng)的研發(fā)、新功能的升級(jí),會(huì)涉及到方方面面,不一定容易推進(jìn)下去。本文就以上矛盾問(wèn)題,提出一種打印方案,幫助相關(guān)政府部門(mén),在維持現(xiàn)有系統(tǒng)的基礎(chǔ)上,實(shí)現(xiàn)收據(jù)的批量打印,同時(shí)在收據(jù)上打印二維碼,為以后房屋維修資金業(yè)務(wù)拓展留了入口,對(duì)處于信息化系統(tǒng)建設(shè)過(guò)渡期的政府來(lái)說(shuō),是一個(gè)很好的打印思路。
本文通過(guò)PHP、Lodop、PHPqrCode類(lèi)庫(kù)等Web技術(shù),針對(duì)原有系統(tǒng)支持?jǐn)?shù)據(jù)導(dǎo)出的政府部門(mén),實(shí)現(xiàn)了房屋維修資金收據(jù)的批量打印,節(jié)省了政府部門(mén)的時(shí)間,降低了偏移概率。但是本文提出的收據(jù)打印邏輯還需要進(jìn)一步研究,在實(shí)際工作中,發(fā)現(xiàn)印刷廠印刷的收據(jù),可能因?yàn)樯a(chǎn)工藝的問(wèn)題,批次的不同,收據(jù)的寬度、孔距也會(huì)有略微的差異,這對(duì)預(yù)先設(shè)定好參數(shù)的打印優(yōu)化邏輯有一定的影響,為此,如何針對(duì)不同批次的收據(jù),通過(guò)程序識(shí)別自動(dòng)調(diào)整,是下一步研究的方向。