最近需要向客戶發送一些宣傳資料,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進行一個信封批量套打的處理實現技術。
這些技術都是之前研究實現過的東西,用起來應該駕輕就熟了,也就不枉費精力去找其他信封套打軟件了。
我們先來介紹一下整體的打印效果,首先我們要有一些特制的信封或者普通信封,這樣才能基於這個基礎上進行套打,把郵政編碼、地址和聯系人等信息打印上去。
然后你需要有一個打印設備,我這里采用了一個佳能的噴墨打印機(當然其他的也沒問題)。
最后就是基於軟件的基礎上進行套打了,軟件可以單個打印,也可以導入Excel進行套打才可以解決實際問題。
一般是在單個打印沒問題后,進行批量打印,可以省卻大量的時間,下面是基於這個套打軟件打印的信封,如果手寫的話,不知道寫到何年何月了。
2、信封套打的實現過程
下面我們來介紹這個信封套打的實現過程。
首先我們先做一個測試頁面,啟動C-Lodop的設計界面,我們往里面添加一些信封所需要的元素,如套打的背景圖片、郵政編碼的文本、地址文本、人名稱呼等信息后,大致調整到合適的位置即完成了相關的設計,界面設計效果如下所示。
然后我們通過獲取設計樣式下的代碼
生成代碼里面就可以看到具體的內容了。
有了這些信息,我們就可以創建一個HTML模板,然后利用NVelocity來動態生成相關的變量信息即可,HTML模板文件中的邏輯代碼(JS代碼)如下所示。
接着在我們模板文件中的打印預覽函數編寫如下所示。
這樣就可以實現標准格式的瀏覽了,文本顯示位置不一定和背景完全吻合,背景只是作為參考處理而已。
完成這些就基本上是大功告成了,但是我們打印的時候,我們需要注意在打印設置中采用的紙張,如果采用A4的卡紙寬度和自定義的卡紙寬度的設置是不同的,我們建議根據信封的尺寸自定義格式設置,卡紙的位置就和信封寬度一致即可,防止信封進紙的時候晃動導致位置發生偏差。下面的是我對打印信封的用戶自定義設置對話框,采用實際的尺寸(毫米)進行設置即可。
前面介紹的是當個信封打印預覽然后進行打印,打印的按鈕事件處理代碼如下所示。
傳入相關的鍵值參數后,可以實現相關的數據綁定,然后打開HTML后,就可以執行相關的腳本進行信封打印了。
而對於批量打印,處理方式和單個打印有所差異,就是不會每個都介入預覽操作,我們是需要把一批對象進行打印。
那么我們如果要實現批量的數據打印,就需要利用JS里面的數組操作,把對應的對象放到里面,然后批量進行打印就可以了。
而這個數據的生成,我們就是利用NVelocity的模板函數進行處理即可。
完成這些,我們就可以傳入對應的打印集合,讓其在NVelocity模板里面生成對應的HTML代碼,生成對應的對象加入到打印的數組里面,從而完成批量的數據打印了。
批量套打是在我們確認單個打印格式吻合已有信封的位置情況下,進行批量的打印處理。
一旦開啟批量打印,我們的剩下的工作就是不斷的往打印機上面放置足夠的信封即可,可以邊喝茶邊等待完成,悠然自得的了。
以上就是基於NVelocity+C-LODOP控件實現的信封套打整個思路和實現方式,對於我們技術人來說,做一個這樣的軟件所花費的時間,比手寫幾百個信封浪費的時間更有意義,所獲得的成就感也是有那么一些的。
總之,技術就是為生活服務。