最近需要向客戶發(fā)送一些宣傳資料集畅,Excel列表里面有一兩百個記錄园担,本來想手寫就算了届谈,估摸著也花不了多少時間,不過寫完一個信封我就后悔了弯汰,整天敲著鍵盤艰山,書寫的字太難看了,而且感覺手還是有點累咏闪。才第一個啊曙搬,想著后面還有那么多,感覺整個人頭都大了鸽嫂,只好放棄纵装,太沒技術(shù)含量了。然后尋找有無一些套打的的軟件据某,不過找來找去還是沒有滿意的橡娄,還是自己寫一個套打的軟件好了,這個小小的還是有點技術(shù)含量癣籽,呵呵挽唉。本篇隨筆基于這個困惑,整理了一個信封套打以及批量打印的實現(xiàn)過程才避,軟件可以實現(xiàn)自動批量的信封套打橱夭,一兩百個的信封地址,也是一陣子的功夫就打印完成了桑逝,感覺小有成就棘劣,而且以后就基于這個模式來批量打印信封,方便了很多楞遏。
1茬暇、信封套打的實現(xiàn)思路
基于套打的處理,我在幾年前的隨筆都有一些隨筆介紹寡喝,如《Web打印的解決方案之證件套打》糙俗、《基于MVC4+EasyUI的Web開發(fā)框架經(jīng)驗總結(jié)(16)--使用云打印控件C-Lodop打印頁面或套打報關(guān)運單信息》這兩篇隨筆基本思路還是采用打印控件C-Lodop(http://www.lodop.net/)來進行打印的,我這樣的套打小程序预鬓,最好還是做成Winform程序比較方便巧骚,因此在Winform里面整合網(wǎng)頁瀏覽就可以實現(xiàn)這個控件的打印處理了。
另外,我們根據(jù)打印的地址信息劈彪,動態(tài)的生成HTML內(nèi)容即可竣蹦,基于這樣的理念,我們動態(tài)生成HTML可以考慮使用NVelocity的模板化處理技術(shù)沧奴,這個可以參考下我的隨筆《使用NVelocity生成內(nèi)容的幾種方式》進行了解痘括,這個NVelocity用來處理模板化的內(nèi)容生成還是非常方便的。
前面介紹的這些內(nèi)容滔吠,其實就是基于C-Lodop 和 NVelocity進行一個信封批量套打的處理實現(xiàn)技術(shù)纲菌。
這些技術(shù)都是之前研究實現(xiàn)過的東西,用起來應(yīng)該駕輕就熟了疮绷,也就不枉費精力去找其他信封套打軟件了翰舌。
我們先來介紹一下整體的打印效果,首先我們要有一些特制的信封或者普通信封冬骚,這樣才能基于這個基礎(chǔ)上進行套打灶芝,把郵政編碼、地址和聯(lián)系人等信息打印上去唉韭。
然后你需要有一個打印設(shè)備,我這里采用了一個佳能的噴墨打印機(當(dāng)然其他的也沒問題)犯犁。
最后就是基于軟件的基礎(chǔ)上進行套打了属愤,軟件可以單個打印,也可以導(dǎo)入Excel進行套打才可以解決實際問題酸役。
一般是在單個打印沒問題后住诸,進行批量打印,可以省卻大量的時間涣澡,下面是基于這個套打軟件打印的信封贱呐,如果手寫的話,不知道寫到何年何月了入桂。
2奄薇、信封套打的實現(xiàn)過程
下面我們來介紹這個信封套打的實現(xiàn)過程。
首先我們先做一個測試頁面抗愁,啟動C-Lodop的設(shè)計界面馁蒂,我們往里面添加一些信封所需要的元素,如套打的背景圖片蜘腌、郵政編碼的文本沫屡、地址文本、人名稱呼等信息后撮珠,大致調(diào)整到合適的位置即完成了相關(guān)的設(shè)計沮脖,界面設(shè)計效果如下所示。
然后我們通過獲取設(shè)計樣式下的代碼
生成代碼里面就可以看到具體的內(nèi)容了。
有了這些信息勺届,我們就可以創(chuàng)建一個HTML模板驶俊,然后利用NVelocity來動態(tài)生成相關(guān)的變量信息即可,HTML模板文件中的邏輯代碼(JS代碼)如下所示涮因。
接著在我們模板文件中的打印預(yù)覽函數(shù)編寫如下所示废睦。
這樣就可以實現(xiàn)標(biāo)準(zhǔn)格式的瀏覽了,文本顯示位置不一定和背景完全吻合养泡,背景只是作為參考處理而已嗜湃。
完成這些就基本上是大功告成了,但是我們打印的時候澜掩,我們需要注意在打印設(shè)置中采用的紙張购披,如果采用A4的卡紙寬度和自定義的卡紙寬度的設(shè)置是不同的,我們建議根據(jù)信封的尺寸自定義格式設(shè)置肩榕,卡紙的位置就和信封寬度一致即可刚陡,防止信封進紙的時候晃動導(dǎo)致位置發(fā)生偏差。下面的是我對打印信封的用戶自定義設(shè)置對話框株汉,采用實際的尺寸(毫米)進行設(shè)置即可筐乳。
前面介紹的是當(dāng)個信封打印預(yù)覽然后進行打印,打印的按鈕事件處理代碼如下所示乔妈。
傳入相關(guān)的鍵值參數(shù)后蝙云,可以實現(xiàn)相關(guān)的數(shù)據(jù)綁定,然后打開HTML后路召,就可以執(zhí)行相關(guān)的腳本進行信封打印了勃刨。
而對于批量打印,處理方式和單個打印有所差異股淡,就是不會每個都介入預(yù)覽操作身隐,我們是需要把一批對象進行打印。
那么我們?nèi)绻獙崿F(xiàn)批量的數(shù)據(jù)打印唯灵,就需要利用JS里面的數(shù)組操作贾铝,把對應(yīng)的對象放到里面,然后批量進行打印就可以了埠帕。
而這個數(shù)據(jù)的生成忌傻,我們就是利用NVelocity的模板函數(shù)進行處理即可。
完成這些搞监,我們就可以傳入對應(yīng)的打印集合水孩,讓其在NVelocity模板里面生成對應(yīng)的HTML代碼,生成對應(yīng)的對象加入到打印的數(shù)組里面琐驴,從而完成批量的數(shù)據(jù)打印了俘种。
批量套打是在我們確認單個打印格式吻合已有信封的位置情況下秤标,進行批量的打印處理。
一旦開啟批量打印宙刘,我們的剩下的工作就是不斷的往打印機上面放置足夠的信封即可苍姜,可以邊喝茶邊等待完成,悠然自得的了悬包。
以上就是基于NVelocity+C-LODOP控件實現(xiàn)的信封套打整個思路和實現(xiàn)方式衙猪,對于我們技術(shù)人來說,做一個這樣的軟件所花費的時間布近,比手寫幾百個信封浪費的時間更有意義垫释,所獲得的成就感也是有那么一些的。
總之撑瞧,技術(shù)就是為生活服務(wù)棵譬。