C#打印技术(三)

来源:互联网 发布:甲骨文停止java更新 编辑:程序博客网 时间:2024/05/01 09:28

      从Windows窗体应用程序打印时,定义一种可重用的可发送到打印机上的对象。

----------名称空间

System.Drawing.Printing

---------语法

public class PrintDocument : Component

-----------属性

 名称描述受保护的属性CanRaiseEvents获取一个指示组件是否可以引发事件的值。 (继承自 Component。)公共属性Container获取 IContainer,它包含 Component (继承自 Component。)公共属性DefaultPageSettings获取或设置用作要打印的所有页的默认设置的页设置。受保护的属性DesignMode获取一个值,用以指示 Component 当前是否处于设计模式。 (继承自 Component。)公共属性DocumentName获取或设置打印文档时要显示的文档名称(例如,在打印状态对话框或打印机队列中)。受保护的属性Events获取附加到此 Component 的事件处理程序的列表。 (继承自 Component。)公共属性OriginAtMargins获取或设置一个值,该值指示与页关联的图形对象的位置是位于用户指定边距内,还是位于该页可打印区域的左上角。公共属性PrintController获取或设置指导打印进程的打印控制器。公共属性PrinterSettings获取或设置对文档进行打印的打印机。公共属性Site获取或设置 Component 的 ISite (继承自 Component。)

------------方法

 名称描述公共方法CreateObjRef创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)公共方法Dispose()释放由 Component 使用的所有资源。 (继承自Component。)受保护的方法Dispose(Boolean)释放由 Component 占用的非托管资源,还可以另外再释放托管资源。 (继承自 Component。)公共方法Equals(Object)确定指定的对象是否等于当前对象。 (继承自 Object。)受保护的方法Finalize在通过垃圾回收将 Component 回收之前,释放非托管资源并执行其他清理操作。 (继承自 Component。)公共方法GetHashCode作为默认哈希函数。 (继承自 Object。)公共方法GetLifetimeService检索控制此实例的生存期策略的当前生存期服务对象。 (继承自MarshalByRefObject。)受保护的方法GetService返回一个对象,该对象表示由 Component 或它的 Container 提供的服务。 (继承自 Component。)公共方法GetType获取当前实例的 Type (继承自 Object。)公共方法InitializeLifetimeService获取控制此实例的生存期策略的生存期服务对象。 (继承自MarshalByRefObject。)受保护的方法MemberwiseClone()创建当前 Object 的浅表副本。 (继承自 Object。)受保护的方法MemberwiseClone(Boolean)创建当前 MarshalByRefObject 对象的浅表副本。 (继承自MarshalByRefObject。)受保护的方法OnBeginPrint引发 BeginPrint 事件。该事件在调用 Print 方法之后并在打印文档首页之前被调用。受保护的方法OnEndPrint引发 EndPrint 事件。该事件在文档的最后一页打印完后被调用。受保护的方法OnPrintPage引发 PrintPage 事件。该事件在某页打印之前被调用。受保护的方法OnQueryPageSettings引发 QueryPageSettings 事件。该事件正好在每个 PrintPage事件之前被调用。公共方法Print开始文档的打印进程。公共方法ToString基础结构。以字符串形式提供有关打印文档的信息。 (重写Component.ToString()。)

---------事件

 名称描述公共事件BeginPrint在文档的首页打印之前且调用 Print 方法时发生。公共事件Disposed当通过调用 Dispose 方法释放组件时发生。 (继承自 Component。)公共事件EndPrint打印完文档的最后一页时发生。公共事件PrintPage当需要为当前页打印的输出时发生。公共事件QueryPageSettings在每个 PrintPage 事件前一刻发生。

-------说明

        通常情况下,创建 PrintDocument 类的一个实例,设置属性,如 DocumentNameand PrinterSettings,并调用 Print 方法开始执行打印进程。处理 PrintPage 事件,在其中指定要打印,使用 PrintPageEventArgs 的 GraphicsGraphics 属性的输出。

---------代码事例

    下下面的代码演示了打印指定文件的内容。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;namespace printDocument{    public partial class Form1 : Form    {        private StreamReader streamToPrint;        private Font font;        public Form1()        {            InitializeComponent();        }        #region 打印按钮被单击事件        private void button1_Click(object sender, EventArgs e)        {            try            {                               ///---判断是否点击了打印按钮                if (DialogResult.OK == printDialog1.ShowDialog())                {                    streamToPrint = new StreamReader(@"C:\Users\driver\Desktop\WebClientHelper.cs");                    font = new Font("Arial", 10);                    ///---这里选择了打印按钮,那么执行打印                    printDocument1.Print();                }            }            catch (Exception ex)            {                streamToPrint.Dispose();                MessageBox.Show(ex.Message);            }        }        #endregion  打印按钮被单击事件        #region 打印事件被触发后,执行打印        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)        {            try            {                ///---                float linePerPage = 0;                float yPos = 0;                int count = 0;                float leftMargin = e.MarginBounds.Left;                float topMargin = e.MarginBounds.Top;                string lineStr = null;                ///----计算行数                linePerPage = e.MarginBounds.Height / font.GetHeight(e.Graphics);                ///---打印每一行                while (count < linePerPage && null != (lineStr = streamToPrint.ReadLine()))                {                    yPos = topMargin + (count * font.GetHeight(e.Graphics));                    e.Graphics.DrawString(lineStr, font, Brushes.Blue, leftMargin, yPos, new StringFormat());                    count++;                }                ///---若打印的页数不是一页,则打印其他页                if (null != lineStr)                {                    e.HasMorePages = true;                }                else                {                    e.HasMorePages = false;                }            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }        }        #endregion 打印事件被触发后,执行打印    }}
------打印输出结果(打印格式为PDF)


0 0