在C#中使用PrintDialog可以很方便的实现程序的打印功能。

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)

将事件处理函数添加到PrintDocumentPrintPage事件中。

docToPrint.PrintPage+=new PrintPageEventHandler(docToPrint_PrintPage);

设置PrintDocument的相关属性,如:

PrintDialog1.AllowSomePages = true;PrintDialog1.ShowHelp = true;

PrintDialogDocument属性设为上面配置好的PrintDocument的实例:

PrintDialog1.Document = docToPrint;

调用PrintDialogShowDialog函数显示打印对话框:

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);

}//将事件处理函数添加到PrintDocumentPrintPage

 

// 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;//PrintDialogDocument属性设为上面配置好的PrintDocument的实例

 

DialogResult result = PrintDialog1.ShowDialog();//调用PrintDialogShowDialog函数显示打印对话框

 

// 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;

}

 

}

 

}

} 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值