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

原创 2004年09月21日 23:36:00
在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
作者:邵令  2004-8-24 17:04:01
博客中国(Blogchina.com)
b41830c  

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

 }
}

C#打印(PrintDocument、PrintDialog、PageSetupDialog、PrintPreviewDialog)

主要介绍了PrintDocument的主要属性、方法的应用。及打印过程中可能用的到得PrintDialog、PageSetupDialog、PrintPreviewDialog对话框。 代码: us...
  • jiangxinyu
  • jiangxinyu
  • 2011年10月14日 09:46
  • 5302

【C#】打印机 printDocument、printDialog、PageSetupDialog、printPreviewDialog

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
  • catshitone
  • catshitone
  • 2015年06月25日 16:50
  • 1168

使用printdocument 实现换行打印

button的单机事件中 new 一个printdocuent  如果你想显示预览  也可以先new 一个printdialog  printdocument  document = new  p...
  • Knowledgeables
  • Knowledgeables
  • 2015年06月16日 17:46
  • 1357

C#winform 打印图像,PrintDialog打印并且设置打印纸张大小

//按下打印按钮 private void button3_Click(object sender, EventArgs e) { //...
  • dragonpeng2008
  • dragonpeng2008
  • 2012年07月25日 16:30
  • 4813

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

在C#中使用PrintDialog可以很方便的实现程序的打印功能。其步骤如下:创建一个PrintDialog的实例。如下:System.Windows.Forms.PrintDialog PrintD...
  • dz45693
  • dz45693
  • 2009年12月12日 00:44
  • 2502

PrintDocument 打印时不显示正在打印对话框

第一种,使用PrintController        PrintController printController = new StandardPrintController();   ...
  • gtosky4u
  • gtosky4u
  • 2015年06月22日 12:57
  • 2152

C# PrintDocument类

打印 一、  PrintDocument类。 打印类PrintDocument类是包含在System.Drawing.Printing名词空间下的,这个类是用来与打印机进行交流传输使用的,它有专门...
  • bcb_521
  • bcb_521
  • 2012年07月31日 14:59
  • 4911

使用PrintDocument如何实现指定页码范围打印

最近在解决分页打印的问题,发现用.Net Framework1.1的PrintDialog的AllowSelection和AllowSomePages设置PrintDocument的分页打印是不起作用...
  • gaojb4211
  • gaojb4211
  • 2008年05月19日 10:38
  • 3219

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

http://www.cnblogs.com/sunbin/archive/2010/06/02/1749663.html 在C#中使用PrintDialog可以很方便的实现程序的打印功...
  • zkcharge
  • zkcharge
  • 2013年03月24日 11:30
  • 824

C# PrintDocument 打印 和 打印预览

.封装好的辅助类: [csharp] view plain copy  print? using System;   using System.Da...
  • rt_1170406609
  • rt_1170406609
  • 2017年09月13日 11:08
  • 430
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
举报原因:
原因补充:

(最多只允许输入30个字)