學習.Net(c#)打印--打印結構


System.Drawing.Printing;命名空間中的類可以幫助在應用程序中打印文檔。
打印的基類是
PrintDocument,方法Print()會啟動一系列調用,最后調用OnPrintPage(),把輸出結果傳送給打印機。打印結構:
下圖顯示了打印結構的主要部分

說明:
PrintDocument
: 是最重要的類。幾乎所有的打印類都與這個類有關係。要打印一個文檔,需要PrintDocument的一個實例。
PrintController:
 類控製打印任務流。提供了打印開始、打印每個頁面和打印結束的事件。派生於PrintController的具體類有StandardPrintControllerPreviewPrintController
PrintSettings
: 類可以獲取打印和設置打印機配置。這個類配置由PageSetupDialog類進行。
PrintDialog
:  類確定使用哪個打印機進行打印和如何配置PrinterSettings
Graphics
:   可以訪問打印機的設備內容,給打印機發送字符串、線條和曲線。
PageSetupDialog
:設置打印頁面。
PrintPreviewDialg:打印預覽頁面。

其中:

PrintDialog頁面樣式如下圖:

PrintSetupDialog頁面格式如下圖:

PrintPreviewDialog頁面樣式如下圖:

打印流程:
以下圖為例:

應用程序必須調用PrintDocumentPrint()方法,啟動調用序列。因為PrintDocument本身並不負責打印流,所以由PrintController通過調用這個類的Print()方法完成打印。 打印控制器現在執行操作,通知PrintDocument,通過調用OnBeginPrint()開始打印。如果應用程序在打印任務的開始執行某些操作,就必須在PrintDocument中註冊一個事件處理程序,這樣才會在應用程序類中接到通知。如上圖中,假定註冊了處理程序OnBeginPrint(),所以這個處理程序應在PrintDocument類中調用。
在開始階段完成后,PrintController就進入PrintLoop(),為每個要打印的頁面調用PrintDocument類中的OnPrintPage()方法。OnPrintPage()調用所有的PrintPage事件處理程序。必須對每個頁面執行這個處理程序,否則就不會打印任何內容。
可以在
PrintDocument.PrintPage處理程序中執行打印代碼。每個打印頁面都要調用該處理程序。如果打印任務只需要執行一次打印代碼,就必須執行BeginPrintEndprint事件和處理程序。
在打印完成最后一頁后,PrintController就調用PrintDocument類中的OnEndPrint()。也可以執行要在這里調用的處理程序。


如何打印(簡單打印方法)?

要實現打印必須有如下內容:
1
、打印文件檔,用於打印機印機。此用PrintDocument類實例化
2
、被打印的內容。處理用PintDocumentPrintPage事件方法得到被打印內容。

其方法如下:
1、實例化
PrintDocument類。聲明需要打印的文檔
2、增加
PrintDocument.PrintPage事件,此事件的方法用於得到被打印的內容
3、調用
PrintDocument.Print()方法打印內容,在打印之前,此方法會在PrntController類的幫助下先呼叫PrintPage事件的方法
4、在
PrintPage事件中繪製打印文本,用於得到打印內容,此方法結束后會回到PrintDocument.Print()方法中,執行打印

代碼如下:
注:界面中一個多行的
TextBox textBoxEdit
和一個打印菜單:MiFilePrint

usingSystem.IO;
usingSystem.Drawing.Printing;

namespaceSimpleEditor
{
publicpartialclassSimpleEditorForm:Form
{
/*
窗體中一個打印菜單:名稱為:MiFilePrint
一個多行TextBoxG:名稱為:textBoxEdit
*/

//1、 實例化PrintDocument類
PrintDocumentpdDocument=newPrintDocument();

publicSimpleEditorForm()
{
InitializeComponent();
//2、 訂閱PrintDocument.PrintPage事件
pdDocument.PrintPage+=newPrintPageEventHandler(OnPrintPage);
}

/// <summary>
///
當按下打印時,此為界面中的打印按鈕事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

privatevoidOnFilePrint(objectsender,EventArgse)
{
try
{
/*
*PrintDocument對象的Print()方法在PrintController類的幫助下,執行PrintPage事件。
*/

//3、調用PrintDocument.Print()方法
pdDocument.Print();

}
catch(InvalidPrinterExceptionex)
{
MessageBox.Show(ex.Message,
"SimpleEditor",MessageBoxButtons.OK,MessageBoxIcon.Error);
throw;
}
}


///<summary>
///printDocument的PrintPage事件
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidOnPrintPage(objectsender,PrintPageEventArgse)
{
/*
*得到TextBox中每行的字符串數組
*\n換行
*\r回車
*/
char[]param={'\n'};
string[]lines=textBoxEdit.Text.Split(param);

inti=0;
char[]trimParam={'\r'};
foreach(stringsinlines)
{
//刪除每行中的\r
lines[i++]=s.TrimEnd(trimParam);
}

intx=20;
inty=20;
foreach(stringlineinlines)
{
/*
* 4、把文本行發送給打印機,其中e是PrintPageEventArgs類型的一個變量,其屬性連接到打印機關聯文本中。
*打印機關聯文本可以寫到打印機設備上。
*輸出結果的位置用變更X和Y定義。
*/
e.Graphics.DrawString(line,
newFont("Arial",10),Brushes.Black,x,y);
y
+=15;
}
}
}
}


這樣就學習了簡單的打印功能。

雖然我們實現了打功能,可是你在打印時會發現,當打印內容超過一頁時,我們如何實現多頁打印呢?
請看下頁:學習.Net(c#)打印--多頁打印

优质内容筛选与推荐>>
1、cocos2d-js 学习笔记 --安装调试(1)
2、Little Xor
3、双线性过滤
4、Eclipse下快速打开本地文件插件EasyExplorer(转)
5、C# .ToString() 格式化


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn