在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;
- }
- }
- }
- }
复制代码 |