C#打印程序实现完整文档打印功能,我们会介绍打印操作具体包括的四个功能,打印所涉及的类的属性及方法,以及最终实现的样例。最后我们会总结C#打印程序的全部过程。

    打印操作通常包括以下四个功能

1 打印设置 设置打印机的一些参数比如更改打印机驱动程序等

2 页面设置 设置页面大小纸张类型等

3 打印预览 类似于word中的打印预览

4 打印

下面我把我编写的记事本(全部源代码可以在http://www.cndot.net中下载)中用到的打印功能的代码进行解释希望能给大家一些帮助实现打印功能的核心是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页面设置以及所有的与打印有关的事件和方法

这个类包括以下几个属性 事件 和方法

1、PrinterSettings 属性

存放打印机的设置信息这个属性不需要程序员设置因为它是由打印对话框获取的

2、PrintCountroller 属性

控制打印过程

3、DefaultPageSettings 属性

存放页面设置信息 打印纸大小方向等也不需要程序员设置因为它是由页面设置对话框获取的

4、DocumentName 属性

指定文档名称,出现在打印机状态窗口中

1。 BeginPrint事件

在打印之前发出

2. PrintPage事件

每打印一页是发出,事件接受一个PrintPageEventArgs参数该参数封装了打印相关的信息

PrintPageEventArgs参数有很多重要的属性

1 Cancel 取消打印

2 Graphics 页面的绘图对象

3 HasMorePages 是否还有要打印的页面

Print 方法 该方法没有参数 调用它将按照当前设置开始打印若实现打印功能首先构造PrintDocument对象添加打印事件。

  1. PrintDocument printDocument;
  2. private void InitializeComponent()
  3. {
  4. ...
  5. printDocument=new PrintDocument();
  6. printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage);
  7. ...
  8. }

实现打印事件功能

打印和绘图类似都是调用Graphics 类的方法进行画图 不同的是一个在显示器上一个在打印纸上并且打印要进行一些复杂的计算如换行 分页等。

  1. private void printDocument_PrintPage(object sender,PrintPageEventArgs e)
  2. {
  3. Graphics g = e.Graphics; //获得绘图对象
  4. float linesPerPage = 0; //页面的行号
  5. float yPosition = 0;   //绘制字符串的纵向位置
  6. int count = 0; //行计数器
  7. float leftMargin = e.MarginBounds.Left; //左边距
  8. float topMargin = e.MarginBounds.Top; //上边距
  9. string line = null; 行字符串
  10. Font printFont = this.textBox.Font; //当前的打印字体
  11. SolidBrush myBrush = new SolidBrush(Color.Black);//刷子
  12. linesPerPage = e.MarginBounds.Height / printFont.GetHeight(g);//每页可打印的行数
  13. //逐行的循环打印一页
  14. while(count < linesPerPage && ((line=lineReader.ReadLine()) != null))
  15. {
  16. yPosition = topMargin + (count * printFont.GetHeight(g));
  17. g.DrawString(line, printFont, myBrush, leftMargin, yPosition, new StringFormat());
  18. count++;
  19. }

如果本页打印完成而line不为空说明还有没完成的页面这将触发下一次的打印事件在下一次的打印中lineReader会
自动读取上次没有打印完的内容因为lineReader是这个打印方法外的类的成员它可以记录当前读取的位置

  1. if(line != null)
  2. e.HasMorePages = true;
  3. else
  4. e.HasMorePages = false;
  5. }

打印设置,构造打印对话框 将对话框中设置的Document属性赋给printDocument这样会将用户的设置自动保存到printDocument的PrinterSettings属性中

  1. protected  void FileMenuItem_PrintSet_Click(object sender,EventArgs e)
  2. {
  3. PrintDialog printDialog = new PrintDialog();
  4. printDialog.Document = printDocument;
  5. printDialog.ShowDialog();
  6. }

页面设置和打印预览与打印设置原理相同都是构造对话框将用户在对话框中的设置保存到相应的类的属性中

  1. protected  void FileMenuItem_PageSet_Click(object sender,EventArgs e)
  2. {
  3. PageSetupDialog pageSetupDialog = new PageSetupDialog();
  4. pageSetupDialog.Document = printDocument;
  5. pageSetupDialog.ShowDialog();
  6. }

C#打印程序打印预览

  1. protected void FileMenuItem_PrintView_Click(object sender,EventArgs e)
  2. {
  3. PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
  4. printPreviewDialog.Document = printDocument;
  5. lineReader = new StringReader(textBox.Text);
  6. try
  7. {
  8. printPreviewDialog.ShowDialog();
  9. }
  10. catch(Exception excep)
  11. {
  12. MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
  13. }
  14. }

打印就可以直接调用printDocument的Print()方法因为用户可能在打印之前还要再更改打印设置所以在这里再次显示打印设置对话框

  1. protected void FileMenuItem_Print_Click(object sender,EventArgs e)
  2. {
  3. PrintDialog printDialog = new PrintDialog();
  4. printDialog.Document = printDocument;
  5. lineReader = new StringReader(textBox.Text);
  6. if (printDialog.ShowDialog() == DialogResult.OK)
  7. {
  8. try
  9. {
  10. printDocument.Print();
  11. }
  12. catch(Exception excep)
  13. {
  14. MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
  15. printDocument.PrintController.OnEndPrint(printDocument,new PrintEventArgs());
  16. }
  17. }
  18. }

C#打印程序总结打印的过程是

1 在应用程序窗体初始化时构造PrintDocument对象  添加 printDocument 的 PrintPage 方法

2 实现PrintPage方法

3 在用户的单击事件中调用 printDocument 的 Print方法实现打印功能在这中间可能要用到  PrintDialog PrintPreviewDialog PageSetupDialog 设置和查看打印效果这些方法通常是由菜单的单击触发的。

C#中打印功能的实现相关推荐

  1. JS实现Web网页打印功能(IE)

    问题描述: JS实现Web网页打印功能 问题解决: 这里主要使用WebBrowser控件的ExeWB在IE中打印功能的实现 WebBrowser介绍: WebBrowser是IE内置的浏览器控件,无需 ...

  2. MIS开发中.net Framework的打印功能

    Microsoft .net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下. 打印操作通常包括以下四个功能 1 打印设置 ...

  3. 在Web中如何运用JavaScript实现打印功能

    <OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0>< ...

  4. Android 各层中日志打印功能的应用

    Android 各层中日志打印功能的应用 1. HAL层 头文件:#include <utils/Log.h>  对应的级别 打印方法   VERBOSE LOGV() DEBUG LOG ...

  5. uniapp中使用lodop打印控件实现app广域、局域网打印功能,亲测可用

    文章目录 前言 一.本文目的 二.使用步骤 1.准备工作 2.引入库文件 3.页面使用 总结 前言 在项目中使用了lodop控件,然而蛋疼的发现这玩意uniapp app端不能直接使用,在vip售后群 ...

  6. SAP中实现所见即所得的打印功能操作方法

    用户SAP中的打印功能可以实现所见即所得: 事务ME53N打开某个采购申请:按下图选择硬拷贝: 在电脑上设置好缺省打印机: 个人设置中的缺省打印机选择前提是在SAP中进行过相关本地打印机配置: 打印完 ...

  7. QT中QPrinter打印功能

    这两天处理了一下QT程序连接网络打印机执行打印的功能 描述:QT程序运行在Linux.Windows平台,软件运行过程中可根据用户的需要生成一系列的报表,现在需要将这些数据自动布局成报表的格式,并实现 ...

  8. (1)声明一个圆柱体类型,(2)声明属性:底边的半径,和高(3)声明方法:A:方法的功能:在方法中打印圆柱体的详细信息:圆柱体的底边的半径是xxx,高是xxx,底面积是xxx,体积是xxx。B

    //(1)声明一个圆柱体类型, //(2)声明属性:底边的半径,和高 //(3)声明方法: //A:方法的功能:在方法中打印圆柱体的详细信息:圆柱体的底边的半径是xxx,高是xxx,底面积是xxx,体 ...

  9. vue中实现打印功能的方法与注意事项

    vue中实现打印功能的方法与注意事项 一.使用方法: 1. 在HTML中 2. 在VUE项目中 二.问题总结 1. 设置打印方向 2. 设置打印高度 1. 单张打印 2. 循环打印 3. 获取打印操作 ...

最新文章

  1. 【力扣网练习题】有效的括号
  2. 分布式数据库灵活存储机制与应用实践
  3. 算法笔记_157:算法提高 c++_ch02_01(Java)
  4. 计算机表格计算总积分,Excel函数教程: 根据条件计算成绩表-excel技巧-电脑技巧收藏家...
  5. Matplotlib实例教程(十五) 3D散点图
  6. Facebook基于数据中心的机器学习实践
  7. 原则 principles
  8. raw socket 使用 BPF 过滤报文
  9. unity快速将旋转向量转换为四元数
  10. 70+优秀的前端工具(转)
  11. 《酒吧圣经》学习笔记1
  12. 在写CSDN的文章时,如何插入表格并进行简单的配置
  13. 科目二:倒车入库考试技巧详细图解
  14. For循环语句及使用
  15. Oracle11g下载地址Oracle下载
  16. 闪动的TextView
  17. 两个向量相乘的数值表示和几何表示
  18. 第2天 C语言32个关键字
  19. Pytorch 查看模型参数
  20. gvim使用 pratical vim 读书笔记

热门文章

  1. java继承求三角形圆形面积_java求三角形面积
  2. python如何打开npy文件_python实现npy格式文件转换为txt文件操作
  3. 如何从mac拷贝文件到NTFS格式的移动硬盘
  4. UE4VR学习笔记3
  5. SIMPLIS仿真软件3-暂态分析(Transient Analysis)详解
  6. 用 Python 分析资产收益的典型化事实
  7. 苹果app老是显示无法连接服务器失败原因,iphone无法连接到app store服务器出错怎么办...
  8. 「亚马逊先生」的出世与入世
  9. 2018版ISTQB FL基础级大纲全解析
  10. windows7彻底删除流氓软件的操作方法