用C#.NET实现完整文档打印功能.docxVIP

  • 58
  • 0
  • 约3.7千字
  • 约 4页
  • 2022-06-26 发布于上海
  • 举报
用 C#实现完整文档打印功能 在 windows 应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .net Framework 的打 印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下。 打印操作通常包括以下四个功能 打印设置 设置打印机的一些参数比如更改打印机驱动程序等 页面设置 设置页面大小纸张类型等 打印预览 类似于 word 中的打印预览 打印 下面我把我编写的记事本(全部源代码可以在 中下载)中用到的打印功能的代码进行解释希望能给大家一些帮助 实现打印功能的核心是 PrintDocument 类这个类属于 System.Drawing.Printing 名字空间这个类封装了当前的打印设置页面设置以及所有的与打印有关的事件和方法 这个类包括以下几个属性 事件 和方法 1、PrinterSettings 属性 存放打印机的设置信息这个属性不需要程序员设置因为它是由打印对话框获取的 2、PrintCountroller 属性控制打印过程 3、DefaultPageSettings 属性 存放页面设置信息 打印纸大小方向等也不需要程序员设置因为它是由页面设置对话框获取的 4、DocumentName 属性 指定文档名称,出现在打印机状态窗口中 1。 BeginPrint 事件在打印之前发出 PrintPage 事件 每打印一页是发出,事件接受一个 PrintPageEventArgs 参数该参数封装了打印相关的信息 PrintPageEventArgs 参数有很多重要的属性 Cancel 取消打印 Graphics 页面的绘图对象 HasMorePages 是否还有要打印的页面 Print 方法 该方法没有参数 调用它将按照当前设置开始打印若实现打印功能首先构造 PrintDocument 对象添加打印事件PrintDocument printDocument; private void InitializeComponent() { ... printDocument=new PrintDocument(); printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage); ... } 实现打印事件功能 打印和绘图类似都是调用 Graphics 类的方法进行画图 不同的是一个在显示器上一个在打印纸上并且打印要进行一些复杂的计算 如换行 分页等。 private void printDocument_PrintPage(object sender,PrintPageEventArgs e) { Graphics g = e.Graphics; //获得绘图对象float linesPerPage = 0; //页面的行号 float yPosition = 0; //绘制字符串的纵向位置int count = 0; //行计数器 float leftMargin = e.MarginBounds.Left; //左边距float topMargin = e.MarginBounds.Top; //上边距string line = null; 行字符串 Font printFont = this.textBox.Font; //当前的打印字体SolidBrush myBrush = new SolidBrush(Color.Black);//刷子 linesPerPage = e.MarginBounds.Height / printFont.GetHeight(g);// 每页可打印的行数 //逐行的循环打印一页 while(count linesPerPage ((line=lineReader.ReadLine()) != null)) { yPosition = topMargin + (count * printFont.GetHeight(g)); g.DrawString(line, printFont, myBrush, leftMargin, yPosition, new StringFormat()); count++; } 如果本页打印完成而 line 不为空说明还有没完成的页面这将触发下一次的打印事件在下一次的打印中 lineReader 会 自动读取上次没有打印完的内容因为 lineReader 是这个打印方法外的类的成员它可以记录当前读取的位置 if(line != null) e.HasMorePages = true; else }  e.HasMorePages = false; 打印

文档评论(0)

1亿VIP精品文档

相关文档