基於信封套打以及批量列印的實現過程

来源:http://www.cnblogs.com/wuhuacong/archive/2017/12/01/7943648.html
-Advertisement-
Play Games

最近需要向客戶發送一些宣傳資料,Excel列表裡面有一兩百個記錄,本來想手寫就算了,估摸著也花不了多少時間,不過寫完一個信封我就後悔了,整天敲著鍵盤,書寫的字太難看了,而且感覺手還是有點累。才第一個啊,想著後面還有那麼多,感覺整個人頭都大了,只好放棄,太沒技術含量了。然後尋找有無一些套打的的軟體,不... ...


最近需要向客戶發送一些宣傳資料,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控制項實現的信封套打整個思路和實現方式,對於我們技術人來說,做一個這樣的軟體所花費的時間,比手寫幾百個信封浪費的時間更有意義,所獲得的成就感也是有那麼一些的。

總之,技術就是為生活服務。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近學習數據驅動UI,瞭解到INotifyPropertyChanged這個介面的用法,看了很多網上的文章,自己作了一個總結。 INotifyPropertyChanged這個介面其實非常簡單,只有一個PropertyChanged事件,如果類繼承了這個介面,就必須實現介面。用VS的提示,就是補充了 ...
  • RoutData.values[Key] 只能獲取路由定義中的數據,url參數的數據不包含在裡面 https://i.cnblogs.com/EditPosts.aspx?opt=1 路由:功能變數名稱到?之間 -->EditPosts.aspx URL參數:?之後 -->opt=1 修改路由規則後 ...
  • 鏈接的地址,可以根據路由規則動態生成,不用寫死,文檔結構有變化時,依然可以找到正確的路徑 1.url.Action(只生成URL) 有很多重載方法,可以根據需要選擇,生成URL時,會根據路由規則生成,不過調用時也是根據路由規則定址,所以OK 2.Html.ActionLink(生成整個Link標簽) ...
  • 你有一個函數,其中完全取決於參數值而採取不同行為。針對該參數的每個可能值,建立一個獨立的函數。 ...
  • Nginx集群可以實現基於Http Basic身份驗證,通過輸入用戶、密碼,經過SSL協議的HTTPS,從而實現有效的身份驗證並訪問相應的WebApi。當然,訪問的方式不僅僅基於Http Basic一種,還可以通過令牌token的方式進行訪問,又或者基於redis實現單點登錄的訪問,本文主要講述的是... ...
  • 先看下麵的這組字元,如果輸出來,它是無法靠右對齊: string[] s1 = { "300", "5", "54210", "6300", "88" }; foreach (string s in s1) { string s2 = s; Console.WriteLine(s2); } C#的處 ...
  • 本人多年來一直在獨自設計並開發一種“面向表達”的編程語言——S#,以求達到數據即程式、程式即數據的最高境界,可以包容大多數慣用的語言特性。直至今天初步成形,特此在博客園上開篇介紹,通過分享和交流進一步發揚光大。 ...
  • 一 抽象類 描述一個事物,由於沒有足夠的信息,這時就將這個事物稱為抽象事物。abstract為抽象關鍵字,被其聲明的類稱為抽象類,其聲明的方法稱為抽象方法。 抽象屬性聲明不提供屬性訪問器的實現,它只聲明該類支持的屬性,而訪問器的實現留給派生類。 抽象方法聲明不提供方法的實現,他必須是一個空方法,而將 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...