C((zhi)印刷とプレビュー機能の構想とコードを印刷することを実現します。


windowsアプリケーションでは、ドキュメントの印刷は非常に重要な機能であり、以前は非常に複雑な作業でした。Microsoft.Net Fraamewarkの印刷機能はコンポーネントとして提供されています。プログラマにとっては非常に便利ですが、これらのコンポーネントの使用はまだ複雑です。説明する必要があります。印刷操作には通常、プリンタドライバの変更などのプリンタのパラメータを設定する4つの機能が含まれています。2ページ設定ページサイズ用紙タイプなど3印刷プレビューはwordの印刷プレビュー4と似ています。
印刷機能を実現するコアはPrintDcument類であり、このクラスはSystem.Drawing.Printing名前空間に属しています。このクラスは現在の印刷設定ページをカプセル化しています。また、印刷に関するイベントと方法は以下のいくつかの属性が含まれています。イベントと方法1、PrinterSettings属性はプリンタの設定情報を保存しています。印刷ダイアログで取得したものです。2、PrintCountroller属性制御印刷プロセス3、DefaultPageSettings属性保存ページ設定情報、印刷用紙のサイズ方向などは、ページ設定ダイアログで取得したものです。4、DocmentName属性指定ドキュメント名は、プリンタ状態ウィンドウに表示されます。
1ですBeginPrintイベントは、印刷前に発行された2.PrintPageイベントの各ページに発行され、イベントは、印刷に関する情報をパッケージ化したPrintPageeventArgsパラメータを受け取る。
PrintPageeventArgsパラメータには多くの重要な属性があります。1 Carcelは2 Graphicsページをプリントアウトした図形描画オブジェクト3 Has MorePagesはまだプリントするページがありますか?
Print方法:この方法はパラメータ呼び出しがないので、現在の設定に従って印刷を開始します。印刷機能が実現されれば、まずPrintDcumentオブジェクト追加印刷イベント

PrintDocument printDocument;
 private void InitializeComponent()
 {
 ...
// printDocument PrintDocument , PrintPage 。
 printDocument=new PrintDocument();
 printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage);
 ...
 }
を作成します。
印刷イベントの機能を実現するための印刷と図形描画は、いずれもGraphicsクラスを呼び出す方法であり、異なるのは、ディスプレイの前の印刷用紙であり、印刷は、改行、改ページなどの複雑な計算が必要である。

 private void printDocument_PrintPage(object sender,PrintPageEventArgs e)
 {
 Graphics g = e.Graphics; //
 float linesPerPage = 0; //
 float yPosition = 0; //
 int count = 0; //
 float leftMargin = e.MarginBounds.Left; //
 float topMargin = e.MarginBounds.Top; //
 string line = null;
 Font printFont = this.textBox.Font; //
 SolidBrush myBrush = new SolidBrush(Color.Black);//
 linesPerPage = e.MarginBounds.Height / printFont.GetHeight(g);//
//
 while(count < linesPerPage && ((line=lineReader.ReadLine()) != null))
 {
yPosition = topMargin + (count * printFont.GetHeight(g));
g.DrawString(line, printFont, myBrush, leftMargin, yPosition, new StringFormat());
count++;
 }
// : , lineReader :
// StringReader lineReader = null;
 // line , , 。 lineReader
 // , lineReader ,
 if(line != null)
 e.HasMorePages = true;
 else
{
 e.HasMorePages = false;
 // lineReader ,
 lineReader = new StringReader(textBox.Text); // textBox
}
}
印刷設定、印刷ダイアログを構成して、ダイアログで設定されたDockment属性をprint Dcumentに割り当てると、ユーザの設定をprint DcumentのPrinterSettings属性に自動的に保存します。

protected  void FileMenuItem_PrintSet_Click(object sender,EventArgs e)
{
    PrintDialog printDialog = new PrintDialog();
    printDialog.Document = printDocument;
    printDialog.ShowDialog();
}
ページ設定と印刷プレビューは、印刷設定の原理と同じ構造ダイアログでユーザのダイアログの設定を対応するクラスの属性に保存します。
印刷プレビュー

protected  void FileMenuItem_PageSet_Click(object sender,EventArgs e)
{
    PageSetupDialog pageSetupDialog = new PageSetupDialog();
    pageSetupDialog.Document = printDocument;
    pageSetupDialog.ShowDialog();
}
印刷は、print DockmentのPrint()を直接呼び出すことができます。印刷設定ダイアログ

protected void FileMenuItem_PrintView_Click(object sender,EventArgs e)
{
   PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
   printPreviewDialog.Document = printDocument;
   lineReader = new StringReader(textBox.Text);
   try
   {
        printPreviewDialog.ShowDialog();
   }
   catch(Exception excep)
   {
        MessageBox.Show(excep.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
}
が表示されます。印刷のまとめは、アプリケーションフォームの初期化時にPrintDcumentオブジェクトを作成します。print Dcumentを追加するPrintPage方法2 PrintPage方法3は、ユーザのクリックイベントでprint Dcumentを呼び出すPrint方法で印刷機能を実現するために、この中で使用される可能性があります。  PrintDialog PrintPreview Dialog PageSetupDialogの設定と印刷効果の表示は、通常メニューのクリックによってトリガされます。