轉帖|其它|編輯:郝浩|2010-12-20 15:02:35.000|閱讀 1469 次
概述:對于一個Silverlight來說,需要打印的內容往往可能是整個網頁的一部頁,或是整個Silverlight應用程序的某個局部內容,如果僅僅使用JavaScript的網頁打印的話,是無法滿足Silverlight應用程序中打印的需求,不過這個問題終于在Silverlight 4.0中得到了比較完美的解決。本文主要介紹如何在Silverlight 4.0中完美地打印報表和圖形。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在Silverlight4之前我們通??梢杂迷赟ilverlight中CALL一下JavaScript腳本來進行基于普通網頁的打印方法,但是這種無論是打印方式效果還是精確度控制上都不能讓人十分滿意。
對于一個Silverlight來說,需要打印的內容往往可能是整個網頁的一部頁,或是整個Silverlight應用程序的某個局部內容,如果僅僅使用JavaScript的網頁打印的話,是無法滿足Silverlight應用程序中打印的需求,不過這個問題終于在Silverlight 4.0中得到了比較完美的解決。Silverlight 4運行時中引入了System.Windows.Printing命名空間,這個命名空間中包含一個名為PrintDocument的類,它可以完成Silverlight應用程序中有"針對性"的打印任務。
下面我們用GRID制作一個簡單的報表。
如圖所示:
C#:
1 public PrintSample()
2 {
3 InitializeComponent();
4 this.Loaded += new RoutedEventHandler(PrintSample_Loaded);
5 }
6
7 void PrintSample_Loaded(object sender, RoutedEventArgs e)
8 {
9 //創建打印文檔對象
10 pd = new System.Windows.Printing.PrintDocument();
11 //創建打印事件,用于指定打印的文檔對象作用的對象
12 pd.PrintPage += new EventHandler(pd_PrintPage);
13 }
14
15 void pd_PrintPage(object sender, System.Windows.Printing.PrintPageEventArgs e)
16 {
17 //指定打印文檔對象的頁面
18 e.PageVisual = reportGrid;
19 }
20 private System.Windows.Printing.PrintDocument pd;
21 private void btnPrint_Click(object sender, RoutedEventArgs e)
22 {
23 //定義打印的文檔名稱
24 pd.DocumentName = "產品報表";
25 //調用打印方法,開始打印
26 pd.Print();
27 }
運行結果如圖所示:
使用后臺代碼來實現打印方法,主要依靠System.Windows.Printing.PrintDocument這個類來完成,PrintDocument具有PrintPage事件,你需要創建這個事件的事件處理方法,并在這個事件里指定打印文檔的對象頁面,在這里就是reportGrid的GRID控件,其中DocumentName是你要打印文檔的名稱,最終調用Print方法開始打印,并顯示打印窗口,如果你沒有安裝打印機,系統會提示你先安裝打印機,如圖所示:
PrintPage事件中具有StartPrint、EndPrint事件和HasMorePages屬性,StartPrint和EndPrint事件是在打印開始前和打印結束后引發,而HasMorePages屬性是一個bool類型的屬性,當PrintPage事件多次運行時,如果值為true情況下,事件將等待至HasMorePages為false時才繼續引發下一次事件。這里需要說明的是,PrintDocument不僅支持GRID對象,連Image對象也可以通過PrintDocument打印出來。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網