摘 要:Web列印是在開發B/S結構應用程式時一項比較複雜但又應用廣泛、非常實用的一種技術。本文主要針對ASP.NET 2.0實現WEB列印的幾種方法進行了初步探討,對每種方法的實現、各自特點進行了闡述。
關鍵詞: ASP.NET 2.0 ;B/S模式 ;WEB 列印
中圖分類號:TP393.092 文獻標識碼:A
Study on Implementation of WEB Print Method Based on ASP.NET 2.0
ZHU Xiao-dong
(Tianjin Railway Technical and Vocational College,Tianjin 300240 )
Key words: ASP.NET 2.0 ;B / S mode ;WEB print
目前,由於B/S模式擴充性好、資料安全性高、無須考慮用戶端的相容性等優點,在軟體開發實踐中得到了廣泛的應用,而WEB 列印則是B/S模式應用程式中必需考慮的問題。雖然用戶端的規則很簡單,容易學習,容易維護,容易發布,但由於只能採用瀏覽器作為使用者介面與伺服器進行互動,不能精確地控制用戶端的印表機,使WEB報表格式控制、定製等複雜的列印難以處理,其結構的特殊性和一般程式上的列印功能有所不同,而軟體開發人員總是力求使B/S系統具有C/S系統相類似的列印功能,這是開發人員所面臨的一個共同難題。
WEB 列印通常分為用戶端指令碼方式和伺服器端程式方式,在用戶端指令碼方式中,主要使用JS 可以分析源頁面的內容,將欲列印的頁面元素提取出來,實現列印。通過分析來源文件的內容,可以產生列印目的文件。這種方式用戶端獨立完成列印目的文件的產生,減輕伺服器負荷;但來源文件的分析操作複雜,並且來源文件中的列印內容要有約定。通常採用伺服器端程式方式,利用後台代碼從資料庫中讀取列印源,產生列印目的文件。當的頁面產生時,還應適當考慮使用CSS 來實現強制分頁控制。這種方式可以產生內容非常豐富的列印目的文件,目的文件的內容的可控性強。由於列印內容是從資料庫中擷取的,所以產生操作相對簡單;但伺服器端負載比較大。
ASP.NET 2.0是微軟公司推出新型體繫結構.NET Framework 2.0的一個主要組成部分,在開發人員的效率、管理、效能和延展性等方面得到了極大的提高。 其新開發的IDE--Visual Studio 2005是目前B/S模式應用程式的主要開發工具。針對ASP.NET 2.0的WEB列印方法主要有以下幾種解決方案:
①利用IE瀏覽器直接實現WEB列印;
②調用Office實現WEB列印;
③利用第三方控制項實現WEB列印;
④利用.NET 2.0組件水晶報表實現WEB列印。
1 利用IE瀏覽器直接實現WEB列印
1.1調用windows.print()方法實現列印
在頁面上添加“列印”按鈕,然後增加如下代碼:
<input type="button"onclick="window.print()"value="print">
這種方法代碼簡單、方便快捷、無需任何設定,但頁面上別的元素也會被列印處理,頁頭和頁尾的格式難以控制,無法實現“列印設定”和“預覽列印”等功能,可以利用css中的Media 屬性來設定列印和顯示的格式,代碼如下:
<style media="print" type="text/css">
.Noprint{display:none;}
.PageNext{page-break-after: always;}
</style>
在不想列印的頁面元素添加: class="Noprint" ,那就不會出現在列印和預覽列印中了。如:
<table width="757" height="174" border="0" align="center" cellpadding="0" cellspacing="0">
<tr class="noprint">
<td height="133" align="center" valign="top">
<img src="Images/test.jpg" width="757" height="133"></td>
</tr>
</table>
此時<tr class="noprint">是不列印的tr。
1.2調用WebBrowser控制項實現列印
WebBrowser控制項是IE內建的瀏覽器控制項,它是ActiveX控制項,無需使用者下載,可以通過調用WebBrowser控制項的ExecWB方法實現列印,首先在HTML源碼中建立Object對象,Object對象主要向HTML頁面中插入對象,代碼如下:
//加入ID為WebBrowser的WebBrowser控制項
<object ID=''WebBrowser'' WIDTH=''0'' HEIGHT=''0''
CLASSID=''CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'' VIEWASTEXT></object>
CLASSID屬性主要用來擷取或設定對象的類別識別項。最後在用戶端控制項的onclick事件中調用WebBrowser組件的相關方法進行列印、預覽列印等操作,代碼如下:
<input type=button value=直接列印 onclick=document.all.WebBrowser.ExecWB(6,6)>
<input type=button value=版面設定 onclick=document.all.WebBrowser.ExecWB(8,1)>
<input type=button value=預覽列印 onclick=document.all.WebBrowser.ExecWB(7,1)>
此種方法優點是可以輕鬆實現列印、版面設定和預覽列印等功能,用戶端能獨立列印目的文件,減輕伺服器端負荷;缺點是來源文件的分析操作複雜,並且來源文件中的列印內容要有約束。
2 調用Office實現WEB列印
在瀏覽網頁時,經常需要將Web頁面中的內容通過Word或Excel文檔列印出來,藉助功能強大的Office辦公軟體,可以完成非常複雜的文檔格式,進行精細的控制,可適應性強、易於控制。下面以將資料匯出到Word文檔為例進行介紹,Excel與此類似,不再贅述。
Word作為文檔處理軟體,它在處理文檔和資料的過程中顯示出了強大的功能。將資料匯出到Word,主要通過設定Response對象的ContentType屬性為輸出檔案的類型來實現的。代碼如下:
Response.AppendHeader("Content-Disposition","attachment;filename=test.doc")
Response.ContentType="application/ms-word";
//如果輸出為excel,修改為以下代碼
//Response.AppendHeader("Content-Disposition","attachment;filename=test.xls");
// Response.ContentType="application/ms-excel";
this.EnableViewState=false;
String Write tw=new String Writer();
HtmlTextWriter hw=new HtmlTextWriter(tw);
GridView1.RenderControl(hw);
Response.Writer(tw.ToString());
Response.End();
匯出成Word或Excel後使用者可以自訂列印的內容和格式,開發週期短、維護成本低,使用者使用方便,並且可以跨平台運行。但資料匯出前難以產生預覽列印,在伺服器端或用戶端使用時,要保證安裝有office軟體,在用戶端使用時要求用戶端在IE的安全設定上有一定的要求。
3 利用第三方控制項實現列印
目前有不少開發商提供的相關控制項,可以實現Web列印功能,如MAX Reports、如意報表、ScriptX等。優秀的第三方控制項,列印方式靈活,基本上程式能做到的web也能做得到,並且開發週期短,系統維護性好。但列印功能受控制項本身限制,一般無法做到跨平台,並需支付相關費用,提高了系統的開發成本。
也可以自行開發實現Web列印,一般可以通過自行開發ActiveX控制項、Java Applet或動態產生PDF檔案等方式來完成。這種方式可定製性強,可以完全按照使用者的要求進行設計Web頁面,但開發週期長,開發和維護成本較高。
目前有一些軟體公司使用JAVA開發基於WEB的報表組建,使用這些組建時先要在用戶端安裝,然後,由伺服器端來產生VBscript指令碼,在用戶端運行、建立相應的組件對象;利用組件對象來進行列印操作。這種方法只要用戶端的com組件開發完成。使用者只要熟悉vbscript或lavascript指令碼語言就可能方便的調用。這種方法列印效率高、功能豐富、能做到精確定位列印以及批量列印另外安裝成本低廉。ACtiveX只有1M多,在用戶端首次使用時需要安裝一次,無需再次安裝。但用戶端畢竟需要安裝組件,部署不是很方便。另外對瀏覽器版本也有一定的要求。
4 利用水晶報表實現列印
水晶報表(Crystal Reports)是一個優秀的報表開發工具,水晶報表以其簡單、易用和強大的功能令開發人員倍受青睞。Crystal Reports for Visual Studio.NET 2005具有以下特點:
①針對所有以.NET為目標的程式語言提供高度的整合,可以在Windows應用程式或ASP.NET Web應用程式的項目中使用本身所專長的程式語言來設計報表。
②提供強大的報表設計工具CrystalReportDesigner,可以通過其定義報表的資料來源,定位各個控制項,輕易製作出各種複雜格式的報表。
③通過報表檢視器控制項(CrystalReportViewer)設定報表的格式和自訂匯出選項等,將報表展現在Web Form網頁上。
④使用者僅需要Web瀏覽器就可以查看報表。
水晶報表列印非常靈活、方便,列印的內容豐富多彩,使用者僅需要網頁瀏覽器就可以查看報表,使用者可將報表匯出各種格式的檔案,如.pdf,.doc,.xls,.html,.rpt等,使用者不僅與報表可以輕鬆互動,而且具有內容建立、計算、分組、查詢等強大功能。
Crystal Reports for Visual Studio.NET 2005的執行模式有兩種:Pull Model(拉模型)和Push Model (推模型),執行任一種模式均可擷取Crystal Reports資料。在拉模型中,驅動程式將串連到資料庫並根據需要將資料“拉”進來。使用這種模型時,與資料庫的串連和為了擷取資料而執行的SQL命令都同時由Crystal Report本身處理,不需要開發人員編寫代碼。因此,在運行時如無須編寫任何特殊代碼,則使用拉模型。相反,推模型需要開發人員編寫代碼以串連到資料庫,執行SQL命令以建立與報表中的欄位匹配的記錄集或資料集,並且將該對象傳遞給報表。該方法可以將串連共用置入應用程式中,並在Crystal Reports收到資料之前先將資料篩選出來。
在Visual Studio 2005中通過CrystalReportViewer控制項來查看報表源中的資料,並對報表進行設計,使報表更加美觀。
5 結束語
綜上所述,本文對ASP.NET的Web列印技術作了初步的探討,對每種實現方法優點及不足進行了簡要介紹,在開發過程中使用者應根據項目的實際需求進行選擇,靈活處理WEB列印所遇到的各種問題,以達到較理想的應用效果。
參考文獻:
[1]張躍廷.ASP.NET 程式開發範例寶典[M].北京:人民郵電出版社,2007:572-599.
[2]李明剛,肖健.ASP.NET(c#)基礎教程[M].北京:清華大學出版社,2006:294-392.