• 【转】在C#中实现打印功能


    在C#中实现打印功能

    其步骤如下:

    创建一个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;

    }

    }

    }

    }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aptentity/archive/2010/06/14/5671270.aspx

  • 相关阅读:
    【搜索引擎】Solr最新安装以及通过关系型数据库(MySQL,Oracle,PostgreSQL)导入数据
    【搜索引擎】SOLR VS Elasticsearch(2019技术选型参考)
    【Java源码】集合类-优先队列PriorityQueue
    【Java源码】树-概述
    Go语言调度器之创建main goroutine(13)
    Go语言goroutine调度器初始化(12)
    Go语言goroutine调度器概述(11)
    线程本地存储及实现原理
    操作系统线程及线程调度
    系统调用
  • 原文地址:https://www.cnblogs.com/lzh_527/p/1929257.html
Copyright © 2020-2023  润新知