在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用) (转)

  • Post author:
  • Post category:其他







C#


中实现打印功能


(C#





PrintDialog,PrintDocument


的使用)












C#


中使用


PrintDialog


可以很方便的实现程序的打印功能。








其步骤如下:








  1. 创建一个


    PrintDialog


    的实例




    。如下:



    System.



    Windows


    .Forms.PrintDialog PrintDialog1=new PrintDialog ();








  2. 创建一个


    PrintDocument


    的实例


    .




    如下:



    System.Drawing.Printing.PrintDocument docToPrint =

    new System.Drawing.Printing.PrintDocument();









  3. 设置打印机开始打印的事件处理函数


    .


    函数原形如下








    void docToPrint_PrintPage(object sender,

    System.Drawing.Printing.PrintPageEventArgs e)









  4. 将事件处理函数添加到


    PrintDocument





    PrintPage


    事件中








    docToPrint.PrintPage+=new PrintPageEventHandler(docToPrint_PrintPage);









  5. 设置


    PrintDocument


    的相关属性




    ,如:



    PrintDialog1.AllowSomePages = true;PrintDialog1.ShowHelp = true;












  6. PrintDialog





    Document


    属性设为上面配置好的


    PrintDocument


    的实例








    PrintDialog1.Document = docToPrint;









  7. 调用


    PrintDialog





    ShowDialog


    函数显示打印对话框








    DialogResult result = PrintDialog1.ShowDialog();








  8. 根据用户的选择,开始打印







    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;

}

}







}

}




转载于:https://www.cnblogs.com/sunbin/archive/2010/06/02/1749663.html