程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 在C#中實現打印功能(C#中PrintDialog,PrintDocument的使用)

在C#中實現打印功能(C#中PrintDialog,PrintDocument的使用)

編輯:.NET實例教程

在C#中使用PrintDialog可以很方便的實現程序的打印功能。

其步驟如下:

創建一個PrintDialog的實例。如下:
System.Windows.Forms.PrintDialog PrintDialog1=new PrintDialog ();
創建一個PrintDocument的實例.如下:
System.Drawing.Printing.PrintDocument docToPrint =
new System.Drawing.Printing.PrintDocument();
設置打印機開始打印的事件處理函數.函數原形如下:
void docToPrint_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
將事件處理函數添加到PrintDocument的PrintPage事件中。
docToPrint.PrintPage+=new PrintPageEventHandler(docToPrint_PrintPage);
設置PrintDocument的相關屬性,如:
PrintDialog1.AllowSomePages = true;PrintDialog1.ShowHelp = true;
把PrintDialog的Document屬性設為上面配置好的PrintDocument的實例:
PrintDialog1.Document = docToPrint;
調用PrintDialog的ShowDialog函數顯示打印對話框:
DialogResult result = PrintDialog1.ShowDialog();
根據用戶的選擇,開始打印:
if (result==DialogResult.OK)
{
docToPrint.Print();
}

例子如下:

使用時先創建PrintService類的實例,然後調用void StartPrint(Stream streamToPrint,string streamType)函數開始打印。其中streamToPrint是要打印的內容(字節流),streamType是流的類型(txt表示普通文本,image表示圖像);




--------------------------------------------------------------------------------



using System;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.IO;

namespace EDImageSystem
{
/// <summary>
/// PrintService 的摘要說明。
/// </summary>
public class PrintService
{
public PrintService()
{
//
// TODO: 在此處添加構造函數邏輯
//
this.docToPrint.PrintPage+=new PrintPageEventHandler(docToPrint_PrintPage);
}//將事件處理函數添加到PrintDocument的PrintPage中

// Declare the PrintDocument object.
private System.Drawing.Printing.PrintDocument docToPrint =
new System.Drawing.Printing.PrintDocument();//創建一個PrintDocument的實例

private System.IO.Stream streamToPrint;
string streamType;

// This method will set propertIEs on the PrintDialog object and
// then display the dialog.
public void StartPrint(Stream streamToPrint,string streamType)
{

this.streamToPrint=streamToPrint;
this.streamType=streamType; // Allow the user to choose the page range he or she would
// like to print.
System.Windows.Forms.PrintDialog PrintDialog1=new PrintDialog ();//創建一個PrintDialog的實例。
PrintDialog1.AllowSomePages = true;

// Show the help button.
PrintDialog1.ShowHelp = true;

// Set the Document property to the PrintDocument for
// which the PrintPage Event has been handled. To display the
// dialog, either this property or the PrinterSettings property
// must be set
PrintDialog1.Document = docToPrint;//把PrintDialog的Document屬性設為上面配置好的PrintDocument的實例

DialogResult result = PrintDialog1.ShowDialog();//調用PrintDialog的ShowDialog函數顯示打印對話框

// If the result is OK then print the document.
if (result==DialogResult.OK)
{
docToPrint.Print();//開始打印
}

}

// The PrintDialog will print the document
// by handling the document’s PrintPage event.
private void docToPrint_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)//設置打印機開始打印的事件處理函數
{

// Insert code to render the page here.
// This code will be called when the control is drawn.

// The following code will render a simple
// message on the printed document
switch(this.streamType)
{
case "txt":
string text = null;
System.Drawing.Font printFont = new System.Drawing.Font
("Arial", 35, System.Drawing.FontStyle.Regular);

// Draw the content.
System.IO.StreamReader streamReader=new StreamReader(this.streamToPrint);
text=streamReader.ReadToEnd();
e.Graphics.DrawString(text,printFont,System.Drawing.Brushes.Black,e.MarginBounds.X,e.MarginBounds.Y);
break;
case "image":
System.Drawing.Image image=System.Drawing.Image.FromStream(this.streamToPrint);
int x=e.MarginBounds.X;
int y=e.MarginBounds.Y;
int width=image.Width;
int height=image.Height;
if((width/e.MarginBounds.Width)>(height/e.MarginBounds.Height))
{
width=e.MarginBounds.Width;
height=image.Height*e.MarginBounds.Width/image.Width;
}
else
{
height=e.MarginBounds.Height;
width=image.Width*e.MarginBounds.Height/image.Height;
}
System.Drawing.Rectangle destRect=new System.Drawing.Rectangle(x,y,width,height);
e.Graphics.DrawImage(image,destRect,0,0,image.Width,image.Height,System.Drawing.GraphicsUnit.Pixel);
break;
default:
break;
}

}

}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved