zoukankan      html  css  js  c++  java
  • 在 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;
        }


        }


        }

        }
     
  • 相关阅读:
    JSP
    token防止表单重复提交
    web应用程序性能优化
    js 优化
    文本查看及处理工具简单命令
    DNS之一---DNS服务及BIND服务,并实现DNS正向与反向解析
    企业级自动化运维工具应用实战ansible
    Linux小试牛刀
    Linux特殊权限及ACL权限
    文件的默认权限UMASK
  • 原文地址:https://www.cnblogs.com/kkdd/p/406817.html
Copyright © 2011-2022 走看看