您的位置:首页 > 编程语言 > C#

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

2007-08-22 15:50 841 查看
在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;


    }




    }




    }


    } 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息