在
      
      
       C#
      
      
       中实现打印功能
      
      
       (C#
      
      
       中
      
      
       PrintDialog,PrintDocument
      
      
       的使用)
      
      
      
     
    
     
      
       
        
        
        
         在
        
        
         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;
        
        }
        }
       
      
      
      
     
    
     
      
       
        }
        
        }
       
      
      
      
     
    
转载于:https://www.cnblogs.com/sunbin/archive/2010/06/02/1749663.html