C#文本文件打印示例3

转载 2004年09月15日 13:54:00

//------------------------------------------------------------------------------
/// <copyright from='1997' to='2001' company='Microsoft Corporation'>
///    版权所有 (c) Microsoft Corporation。保留所有权利。
///
///    此源代码仅作为 Microsoft 开发工具和/或联机文档
///    的补充。有关 Microsoft 代码示例的详细信息,请
///    参阅这些其他资料。
///
/// </copyright>
//------------------------------------------------------------------------------
namespace Microsoft.Samples.WinForms.Cs.PrintingExample3
{
    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Drawing.Printing;
    using System.IO;

    public class PrintForm : System.Windows.Forms.Form
    {
        /// <summary>
        ///    必需的设计器变量。
        /// </summary>
        private System.ComponentModel.Container components;
        protected internal System.Windows.Forms.Button printButton;

        public PrintForm()
        {
            //
            // Windows 窗体设计器支持所必需的
            //
            InitializeComponent();

            // 启动打印按钮的事件处理程序
            printButton.Click += new System.EventHandler(printButton_Click);
        }

        /// <summary>
        ///    清理正在使用的所有资源。
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        //在用户按下打印按钮时激发的事件
        private void printButton_Click(object sender, EventArgs e)
        {
            try
            {

                StreamReader streamToPrint = new StreamReader("PrintMe.Txt");
                try
                {
                    TextFilePrintDocument pd = new TextFilePrintDocument(streamToPrint); //假定为默认打印机

                    PrintDialog dlg = new PrintDialog();
                    dlg.Document = pd;
                    DialogResult result = dlg.ShowDialog();

                    if (result == DialogResult.OK)
                    {
                        pd.Print();
                    }

                }
                finally
                {
                    streamToPrint.Close();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show("打印文件时发生错误 - " + ex.Message);
            }
        }


        /// <summary>
        ///    设计器支持所必需的方法,不要使用
        ///    代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.printButton = new System.Windows.Forms.Button();

 

            this.Text = "打印示例 3";
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(504, 381);
            printButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            printButton.Size = new System.Drawing.Size(136, 40);
            printButton.TabIndex = 0;
            printButton.Location = new System.Drawing.Point(32, 112);
            printButton.Text = "打印文件";
            this.Controls.Add(this.printButton);
        }

        /// <summary>
        /// 应用程序的主要入口点。
        /// </summary>
        [STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new PrintForm());
        }

    }


    // <doc>
    // <desc>
    //     TextFilePrintDocument 将流输出到打印机
    //
    //     注意:为了避免在关闭文件时出问题,
    //     如果发生异常,此类仅使用一个流
    //     并将它留给调用方,以打开该文件
    //     进行打印
    //
    // </desc>
    // </doc>
    public class TextFilePrintDocument : PrintDocument
    {
        private Font printFont = null;
        private StreamReader streamToPrint = null;

        public TextFilePrintDocument(StreamReader streamToPrint) : base ()
        {
            this.streamToPrint = streamToPrint;
        }

        //重写 OnBeginPrint 以设置将要使用的字体
        protected override void OnBeginPrint(PrintEventArgs ev)
        {
            base.OnBeginPrint(ev);
            printFont = new Font("Arial", 10);
        }

        //重写 OnPrintPage 以为文档提供打印逻辑
        protected override void OnPrintPage(PrintPageEventArgs ev)
        {

            base.OnPrintPage(ev);

            float lpp = 0;
            float yPos = 0;
            int count = 0;
            float leftMargin = ev.MarginBounds.Left;
            float topMargin = ev.MarginBounds.Top;
            String line = null;

            //算出每页的行数
            //在事件上使用 MarginBounds 以达到此目的
            lpp = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);

            //现在,在文件上重复此操作以输出每行
            //注意:假设单行比页宽窄
            //首先检查行数,以便看不到不打印的行
            while (count < lpp && ((line = streamToPrint.ReadLine()) != null))
            {
                yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));

                ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());

                count++;
            }

            //如果有多行,则另外打印一页
            if (line != null)
                ev.HasMorePages = true;
            else
                ev.HasMorePages = false;
        }

    }

}

 

文本文件打印类库(C#)

我写了一个打印文本文件的类库,功能包括:打印预览、打印。打印时可以选择打印机,可以指定页码范围。调用方法非常简单: TextFilePrinter p = new TextFilePrinter(t...
  • u013948187
  • u013948187
  • 2015年07月27日 09:28
  • 617

黑马学习笔记_javaIO(二)

Writer中常见的方法: |--write() 将一个字符写入到流中。 |--write(char[]) 将一个字符数组写入到流中。 |--writer(String) 将一个字符写入...
  • dddlinux
  • dddlinux
  • 2015年08月13日 22:42
  • 184

C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)

C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机支持并口,串口,网口,USB口,驱动方式等多种端口支持开关钱箱支...
  • suyingsoft
  • suyingsoft
  • 2017年04月19日 13:03
  • 1127

C#读取文本文件和C# 写文本文件

转自:http://blog.csdn.net/sunboy_2050/article/details/5101473 C#读取文本文件 今天一个学生问我如何从一个文本中读取内容,如下...
  • zzjiadw
  • zzjiadw
  • 2013年01月25日 17:44
  • 470

关于C#的windons窗体的打印功能知识点解析和功能实例

在windows应用程序中文档的打印是一项非常重要的功能,在打印程序的设计中复杂难度最大的属于打印功能设置,因为中途需要计算一些复杂的计算过程。比如页面开始打印的起始位置和结束位置,换行,分页等。例图...
  • qq_23833037
  • qq_23833037
  • 2017年02月12日 18:21
  • 1544

C# Word文档打印方法

最近在做一个项目,需要用到C#来实现调用Word的打印功能,在网上也找了很多资料,参考了很多方法,有一篇笔者觉得不错,所以转载过来学习,也非常感谢原笔者的帮助,让我顺利解决问题。 利用第三方组件...
  • qq_28215385
  • qq_28215385
  • 2017年05月26日 20:15
  • 920

C#实现打印功能

实际开发过程中经常会遇到打印某种报表的情况,用C#实现打印报表的功能。第一,如果报表的大小合适,或者纸张的大小足够放得下报表,则可以选择直接截屏,打印截屏所得的图片;第二,如果报表和纸张的大小不匹配,...
  • kingzone_2008
  • kingzone_2008
  • 2013年04月25日 23:41
  • 13602

c#实现打印功能,可以设置纸张大小,字体和颜色等

原文:http://www.cnblogs.com/zhcw/archive/2011/11/30/2269083.html 窗体中填加控件:按钮、printDocument、printPr...
  • wky1709
  • wky1709
  • 2016年12月21日 12:47
  • 1354

C#关于Excel导出及打印

添加DLL文件   Using: using Excel = Microsoft.Office.Interop.Excel;   调用: //Excel模板文件 string str...
  • u014741497
  • u014741497
  • 2014年04月16日 09:26
  • 2793

【C#】打印控件中的内容和打印窗体中的内容

效果示意: 操作步骤: 1、新建winform项目及创建窗体 2、拖取 打印 相关控件    PageSetupDialog 、 PrintDialog 、 PrintDocument 、P...
  • catshitone
  • catshitone
  • 2016年03月31日 20:05
  • 4242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#文本文件打印示例3
举报原因:
原因补充:

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