日志文章

2007年05月07日 08:10:49

在C#中实现打印功能

在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;
  }
 
}

}
}

Tags: 打印  

类别: 无分类 |  评论(0) |  浏览(1705) |  收藏
发表评论
看不清楚,换一张