吳 迪,張潤久
(1.天津市市容和園林管理委員會信息中心,天津 300381;2.天津凱舜科技發(fā)展有限公司,天津 300384)
依據(jù)《天津市戶外廣告設置管理規(guī)定》,除有固定線路運營的公交車輛可以設置車體廣告外,其他車輛禁止設置車體廣告。企事業(yè)單位需要在本單位車輛上設置單位名稱和標識的,應按照有關規(guī)定提交相關資料報天津市行政許可服務中心市容委窗口辦理行政許可手續(xù)。
為貫徹這一規(guī)定,加強對各企事業(yè)單位車輛在車身上設置廣告和單位名稱(標識)的管理,開發(fā)制作了非接觸式《天津市車體廣告(單位名稱、標識)行政許可證》卡。
XID580ie是一款功能強大的證卡打印機,具有雙面打印、紫外線防偽打印等功能。車身廣告管理卡由1張IC卡和1張ID卡組成,采用此打印機進行手工雙面防偽打印。在CardFive軟件中設置打印機狀態(tài),每套卡需要分別打印2張卡4面共4次,不但工作量大,并且經(jīng)常出現(xiàn)錯打、重打的問題,造成了卡片和人力的浪費。實現(xiàn)自動雙面防偽打印成為了迫切的需求。
XID580ie在Windows系統(tǒng)中安裝驅動程序后,成為標準的Windows打印機。在打印機屬性選項卡中可以設置防偽圖片、打印方向等狀態(tài),如圖1所示。
通過對打印過程的分析,發(fā)現(xiàn)在打印過程啟動后,打印隊列中的內容很快消失,在XID580ie的打印隊列控制中有打印內容的顯示,并可觀察到打印的數(shù)量和當前打印的狀態(tài),如圖2所示。
首先,采用C#設計了Windows打印程序。在Windows API中找到了系統(tǒng)調用DocumentProperties和EnumPrinterData用來獲取和設置防偽和打印方向。但是,通過對這些項目的設置,只能打印出無防偽的單面卡片,無法得到雙面防偽打印的效果。
然后,通過觀察其他的Windows程序,如記事本、寫字板也無法在設置了雙面防偽的情況下得到正常的結果。觀察了CardFive的正常打印過程,但CardFive無法進行二次開發(fā),采用Windows消息的方法可以控制窗口的行為,但是,過程復雜,實現(xiàn)自動打印難度較大。
最后,經(jīng)過對其他軟件的實驗,發(fā)現(xiàn)使用Word也可以得到正常的打印效果,采用C#重新設計了打印程序,在程序中通過VSTO(Visual Studio to Office)技術自動生成Word文件,并打印該Word文件,經(jīng)過測試,C#采用VSTO技術的打印程序無法將內容正常發(fā)送到打印機。但是,在Word中進行打印總能得到正確的結果,能夠在Word中進行編程控制的方法,只有Word宏可以用,至此,采用Word宏生成文件并進行打印成為了最終惟一的選擇。
宏在Microsoft Office系列軟件中有著廣泛的應用,使用Word宏可以調用幾乎全部的Windows API函數(shù),宏編程的語言稱為VBA(Visual Basic for Applications),宏的開發(fā)也使用了與Visual Basic的界面和格式。Word宏可以調用Word中的全部文字處理功能,同時,也可以對操作系統(tǒng)進行操作,具有強大的功能。Word宏編程簡單,通過錄制宏即可直接生成宏代碼,不需要專門記憶。
程序流程如圖3所示。
程序啟動,開始錄入信息,并在屏幕上實現(xiàn)類似所見即所得的效果,IC卡正面屏幕截圖如圖4所示。
用戶確認后,屏幕的內容與屏幕底紋圖片被保存為jpg格式的圖形文件。
設計Word模版文件用來對IC卡和ID卡分開處理,并保存打印機和頁面設置等信息。
在C#中采用Process.Start方法啟動Word并打開指定的模版文件。Word啟動后,會自動執(zhí)行AutoOpen宏,后續(xù)的程序都在這個宏中運行。使用宏Selection.InlineShapes.Addpicture裝載生成的圖片文件,并使之充滿頁面,使用ActiveDocument.SaveAs另存為指定的文件名留作備份,另存的另外一個目的是防止在窗口關閉時出現(xiàn)確認對話框。而后,調用Application.PrintOut宏進行打印。打印必須使用后臺方式進行,命令發(fā)出后,打印隊列中的數(shù)據(jù)需要發(fā)送到打印機,此時需要主程序繼續(xù)等待一段時間,否則將導致無法打印。打印內容發(fā)出后,主程序通過向Word發(fā)出WM_QUIT消息關閉Word,繼續(xù)下一張卡的錄入。
采用Word宏,需要在Word宏安全性中進行設置,如圖5所示。
采用Word宏會降低系統(tǒng)的安全性,但是,在沒有外網(wǎng)的環(huán)境中,這個設置還是可以接受的。
鍵盤輸入控制。在程序中對全部的文本框(TextBox)的按鍵事件進行了處理,按回車鍵可以將光標自動跳轉到下一個文本框。實現(xiàn)了無鼠標操作。
輸入法控制。車輛類型、標識內容等項目,不需要輸入數(shù)字,只能輸入漢字。在這些輸入項目中,程序控制自動啟動漢字輸入法。標識規(guī)格聯(lián)系電話等需要輸入的內容全部是數(shù)字,在光標進入標識規(guī)格文本框時,自動切換到英文鍵盤輸入狀態(tài)。
輸入內容控制。在批量錄入的情況下,大部分輸入內容是相同的,針對可能重復錄入的內容,在該項目錄入完畢后自動保存到注冊表。下次錄入的時候,仍然會顯示前面的結果。這樣也減少了程序意外終止造成的重復錄入。
流程控制。按照上報的順序設計了輸入流程,卡片每一面作為1個對話框輸入,每個對話框都提供了預覽功能,使用者可以隨時看到最終打印的結果。
文字位置控制。程序可以根據(jù)輸入內容的多少在一定范圍內自動調整位置和字體大小,盡可能保證文本的均勻分布。
采用Word宏進行打印的方法,具有一定的普遍性,隨著軟件功能的豐富,經(jīng)常會出現(xiàn)某個功能很好用,但是,自己的程序中卻無法調用的情況,并且,在沒有開發(fā)文檔的情況下,采用程序調用另外程序的方法得到最終的結果,應當是最現(xiàn)實并且最可能實現(xiàn)的途經(jīng)。
通過以上方法設計的程序,從2012年3月試用,經(jīng)過不斷修改,7月正式使用。至今運行超過1 a,在Word 2003和Word 2007下都取得了同樣的效果。程序運行穩(wěn)定,差錯明顯減少,極大提高了打印速度和正確率。在城市車體廣告管理方面,節(jié)省大量成本,提高工作效率。
[1]Schildt H.C#完全手冊[M].朱德爽,胡鳳燕,胡復明,譯.北京:電子工業(yè)出版社,2002.
[2]何振林,胡綠慧.MS Office與VBA高級應用案例教程[M].北京:中國水利水電出版社,2010.