摘要:針對實(shí)際應(yīng)用中各種報(bào)表打印的不同需求和諸多不便,對.NET框架打印控制技術(shù)進(jìn)行了深入研究,分析了有關(guān)打印控制的類及其使用方法,結(jié)合對數(shù)據(jù)庫中數(shù)據(jù)的訪問,系統(tǒng)地闡述了.NET平臺上開發(fā)專用報(bào)表的打印控制技術(shù)。實(shí)際運(yùn)用結(jié)果表明,該技術(shù)對打印的控制精確靈活,占用系統(tǒng)資源少,也大大節(jié)約了應(yīng)用成本。
關(guān)鍵詞:.NET框架;報(bào)表打??;打印控制;Printing命名空間;打印邏輯;打印設(shè)置;頁設(shè)置;打印預(yù)覽
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2013)16-3739-05
隨著信息技術(shù)的普及與發(fā)展,計(jì)算機(jī)作為現(xiàn)代社會(huì)不可替代的工具已滲透到我們?nèi)粘I畹拿恳粋€(gè)角落。在計(jì)算機(jī)應(yīng)用中經(jīng)常要進(jìn)行報(bào)表打印或單據(jù)票證的打印,實(shí)現(xiàn)諸如此類的打印功能,對于軟件開發(fā)人員來講,是既繁重又枯燥乏味的工作。盡管可以利用各種傳統(tǒng)的通用報(bào)表工具,例如,水晶報(bào)表(Crystal Report),但這些報(bào)表工具都很龐大而復(fù)雜,即使不考慮使用成本,也存在著占用系統(tǒng)資源較高、難以滿足一些特殊式樣的輸出要求等問題。如果要考慮軟件的使用成本,或者,應(yīng)用程序中需要打印專用格式的報(bào)表,那么就有必要自己開發(fā)打印功能了。
本文要討論的是,如何利用.NET Framework有關(guān)打印的類,對打印輸出進(jìn)行精確及任意的控制。System.Drawing.Printing命名空間中包含各種有關(guān)打印及其控制的類,可用于擴(kuò)展和自定義打印功能。這些類之間的關(guān)系比較復(fù)雜,為便于敘述和理解,現(xiàn)從打印邏輯、打印設(shè)置、頁設(shè)置和打印預(yù)覽等四個(gè)方面來加以闡述。
1 打印邏輯
打印邏輯指的是,對于要打印的文檔,按需要的內(nèi)容與格式提供編排和分頁等基本的打印功能。
本文示例代碼的功能是,從Access的數(shù)據(jù)庫db的表People中,讀出所有人員的記錄,并按圖1的格式進(jìn)行打印或預(yù)覽。作為示例,人員記錄中包含姓名、性別、民族、聯(lián)系地址和照片文件名等信息。
1.3 實(shí)現(xiàn)打印邏輯
打印邏輯的實(shí)現(xiàn)可分為初始設(shè)置、格式化繪制和資源釋放等三個(gè)階段。對于PrintDocument基類,要處理三個(gè)相關(guān)事件;而對于PrintDocument派生類,則要實(shí)現(xiàn)三個(gè)相關(guān)的方法。
1)初始設(shè)置
事件BeginPrint或方法OnBeginPrint,都帶有PrintEventArgs類型的參數(shù)e,其Cancel屬性如果設(shè)為true,可用于取消打印作業(yè)。一般將其賦值為DbDataReader實(shí)例的Read()方法的返回值,表示如果數(shù)據(jù)記錄為空,則立即終止打印。
4 打印預(yù)覽
5 結(jié)束語
運(yùn)行結(jié)果表明,基于.NET框架專用報(bào)表技術(shù)的設(shè)計(jì)方案正確,按照該方案實(shí)現(xiàn)的報(bào)表打印功能也是成功的。當(dāng)然,該方案的目標(biāo)只是討論專用報(bào)表技術(shù),因此它必須針對特定應(yīng)用程序進(jìn)行設(shè)計(jì)和應(yīng)用。
與傳統(tǒng)報(bào)表技術(shù)相比,該報(bào)表技術(shù)性能更好,使用成本很低,可進(jìn)行精確控制,適用性、靈活性非常強(qiáng)。運(yùn)用該報(bào)表技術(shù),可使應(yīng)用軟件實(shí)現(xiàn)結(jié)構(gòu)緊湊、短小精干的目標(biāo)。該技術(shù)可廣泛應(yīng)用在特定行業(yè)、特定應(yīng)用程序上進(jìn)行專用報(bào)表,尤其適用于進(jìn)行單據(jù)、車船機(jī)票、發(fā)票等憑證的打印。
參考文獻(xiàn):
[1] Andrew Troelsen.C#與.NET 3.5高級程序設(shè)計(jì)[M].北京:人民郵電出版社,2009.
[2] Microsoft.MSDN 文檔[EB/OL].http://msdn.microsoft.com/zh-cn/library.
[3] Alex Calvo.利用.NET Printing 命名空間從Windows窗體應(yīng)用程序中進(jìn)行預(yù)覽和打印[EB/OL].(2004-12-13).http://msdn.microsoft.com/zhcn/library /aa686055.aspx.
[4] 梁亞雄,魏維,韓天明.打印監(jiān)控中的關(guān)鍵技術(shù)研究[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(10):314-317.
[5] 張勝蘭,楊朝陽.一種實(shí)現(xiàn)小幅面工程圖拼排打印的方法[J].計(jì)算機(jī)應(yīng)用與軟件,2008,25(9):172-173.
[6] 戚瑋瑋,宋朝輝,宋大雷,等.BS模式下條形碼票證自定義打印的設(shè)計(jì)和實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(12):170-173.
[7] 郭軍軍,劉剛.一種基于J2EE平臺的通用WEB票據(jù)打印服務(wù)技術(shù)[J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(6):163-164,168.
[8] 單煜翔,劉玉.Rave Report中文打印時(shí)亂碼的解決方案[J].計(jì)算機(jī)應(yīng)用與軟件,2006,23(9):73-75.