淺析C#打印和C#打印預(yù)覽的實(shí)現(xiàn)
我們談到C#打印和C#打印預(yù)覽的實(shí)現(xiàn)其中主要就是包括:頁(yè)面設(shè)置、打印預(yù)覽、打印三大部分。打印的原理是:生成mdi文件,系統(tǒng)碰到mdi的時(shí)候會(huì)自動(dòng)以打印的方式處理。所以,不管用什么模板,什么方式;能在PrintPage事件處理中,生成一張要打印內(nèi)容的圖片就OK了!主要的支持類都包括在命名空間System.Drawing.Printing中,在程序集System.Drawing.dll中實(shí)現(xiàn)。C#打印和C#打印預(yù)覽的實(shí)現(xiàn)主要通過(guò)PrintDocument類來(lái)完成,另外還包括幾個(gè)輔助類:PrintDialog(打印對(duì)話框)、PrintPreviewDialog(打印預(yù)覽對(duì)話框)、PageSetupDialog。
PrintDocument類是實(shí)現(xiàn)打印和打印預(yù)覽的中心類,實(shí)際的打印操作是通過(guò)這個(gè)類來(lái)完成的。 使用這個(gè)類進(jìn)行打印的操作過(guò)程:
1)創(chuàng)建類實(shí)例 PrintDocument printDt = new PrintDocument();
2)設(shè)置類實(shí)例的屬性
3)為該類的打印事件添加事件處理函數(shù)
4)調(diào)用該類的Print函數(shù)進(jìn)行打印。
打?。簆rintDt.Print();
共有三個(gè)與C#打印和C#打印預(yù)覽的實(shí)現(xiàn)有關(guān)的屬性:
◆DefaultPageSettings:保存了打印文檔的默認(rèn)頁(yè)面設(shè)置,如大小、打印方向,它是一個(gè)PageSettings類型的變量。
◆DocumentName:用于設(shè)置PrintDocument類實(shí)例的名字。是一個(gè)string類型的變量。
◆PrinterSettings:包含了打印機(jī)的設(shè)置信息,可以通過(guò)“打印”通用對(duì)話框?qū)ζ溥M(jìn)行設(shè)置。
在執(zhí)行打印操作之前,應(yīng)該對(duì)這3個(gè)屬性進(jìn)行正確的設(shè)置。 PageSettings類和PrinterSettings類 與 PrintDocument類的屬性設(shè)置相關(guān)的類。
PageSettings類指定單個(gè)打印頁(yè)面的設(shè)置。
PrinterSettings類包含打印機(jī)的設(shè)置信息。 這兩個(gè)類,用戶可以對(duì)打印機(jī)和打印頁(yè)面進(jìn)行充分的控制。
C#打印和C#打印預(yù)覽的實(shí)現(xiàn)之處理打印事件PrintDocument類提供了4個(gè)事件用來(lái)處理打印操作。
◆BeginPrint事件
這個(gè)事件在調(diào)用Print方法之后,并且在打印第1個(gè)頁(yè)面之前被觸發(fā)??梢栽谶@個(gè)事件中設(shè)置應(yīng)用于所有頁(yè)面的打印機(jī)屬性和頁(yè)面屬性,以及使用的字體等參數(shù)。
事件代理為PrintEventHandler,事件參數(shù)類型為PrintEvnetArgs。在PrintEvnetArgs中包含一個(gè)Cancel屬性,可以通過(guò)這個(gè)屬性設(shè)置為True來(lái)禁用打印操作。
- This.printDt.BeginPrint +=
- new PrintEventHandler(this.BeginPrinting);
- Private void BeginPrinting(object sender, PrintEvnetArgs e)
- {//針對(duì)開(kāi)始打印事件進(jìn)行相應(yīng)的處理
- }
◆EndPrint事件
這個(gè)事件在打印完***一個(gè)頁(yè)面時(shí)被觸發(fā)??梢栽谶@個(gè)事件中完成一些資源清理工作。事件代理為PrintEventHandler,事件參數(shù)類型為PrintEvnetArgs。
◆PrintPage事件
這個(gè)事件在開(kāi)始打印每一頁(yè)時(shí)被觸發(fā),每頁(yè)的打印都是在這個(gè)事件中完成的。用戶必須為這個(gè)事件提供處理函數(shù),以完成實(shí)際的打印操作。
事件代理類型為 PrintPageEvnetHandler,事件參數(shù)的類型為PrintPageEventArgs。
- printDt.PrintPage +=
- new PrintPageEvnetHandler(this.PrintEveryPage);
- private void PrintEveryPage(object sender, PrintPageEventArgs)
- {
- Graphics gh = e.Graphics;//獲取繪圖對(duì)象
- //進(jìn)行具體的繪畫操作
- //如 gh.DrawingString(..);
- ..
- If (仍有頁(yè)面未打印)
- e.HasMorePages = true;
- else
- e.HasMorePages = false;
- }
◆QueryPageSettings事件
這個(gè)事件在每個(gè)PrintPage事件之前被觸發(fā),可以使用這個(gè)事件來(lái)設(shè)置打印每一個(gè)頁(yè)面的頁(yè)面設(shè)置。
事件代理類型為 QueryPageSettingsEventHandler,事件參數(shù)的類型為QueryPageSettingsEventArgs。事件參數(shù)中包含一個(gè)PageSettings屬性。
- printDt.QueryPageSettings +=
- new QueryPageSettingsEventHandler(this.SetEveryPage);
- private void SetEveryPage(object sneder, QueryPageSettingsEventArgs e)
- {
- //根據(jù)不同的頁(yè)面來(lái)設(shè)置e.PageSettings屬性
- …
- }
- PrintDialog對(duì)話框 為了獲取打印機(jī)的設(shè)置信息,.Net框架未用戶提供了PrintDialog類。
- PrintDialog printDlg = new PrintDialog();
在顯示“打印”對(duì)話框之前,還需要設(shè)置它的屬性。
其中最重要的一個(gè)屬性就是Document屬性,類型為PrintDocument.,在對(duì)話框中所做的任何設(shè)置都將保存在這個(gè)屬性中。
PrinterSettings屬性也用來(lái)保存用戶在對(duì)話框中所做的設(shè)置。
在顯示“打印”對(duì)話框之前,必須設(shè)置Document和PrinterSettings屬性中的一個(gè)。
對(duì)話框中顯示“打印到文件”按鈕 AllowPrintToFile屬性
顯示選擇頁(yè)面范圍的控件 AllowSelection屬性
是否顯示幫助按鈕ShowHelp屬性
- //打印預(yù)覽
- //PrintPreviewDialog ppd = new PrintPreviewDialog();
- PrintDocument pd = new PrintDocument();
- //設(shè)置邊距
- Margins margin = new Margins(20, 20, 20, 20);
- pd.DefaultPageSettings.Margins = margin;
- ////紙張?jiān)O(shè)置默認(rèn)
- //PaperSize pageSize = new PaperSize("First custom size", 800, 600);
- //pd.DefaultPageSettings.PaperSize = pageSize;
- //打印事件設(shè)置
- pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
C#打印和C#打印預(yù)覽的實(shí)現(xiàn)的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#打印和C#打印預(yù)覽的實(shí)現(xiàn)方面的編程有所幫助。
【編輯推薦】