.NET Framework打印详细分析
创始人
2024-06-19 14:11:12
0

如果你是一名开发人员,就不应该不知道.NET Framework。它的作用在编程人员眼中是非常强大的。.NET Framework打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下。 #t#

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

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

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

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

4 打印

实现打印功能的核心是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页面设置以及所有的与打印有关的事件和方法。这个类包括以下几个属性 事件 和方法:

1、PrinterSettings 属性

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

2、PrintCountroller 属性

控制.NET Framework打印过程

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.print
    Document_PrintPage);   
  7. ...   
  8. }  

实现.NET Framework打印事件功能

打印和绘图类v似都是调用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. //左边距   
  9. float topMargin = e.MarginBounds.Top; 
  10. //上边距   
  11. string line = null; 行字符串   
  12. Font printFont = this.textBox.Font; 
  13. //当前的打印字体   
  14. SolidBrush myBrush = new SolidBrush
    (Color.Black);//刷子   
  15. linesPerPage = e.MarginBounds.Height / 
    printFont.GetHeight(g);//每页可打印的行数   
  16. //逐行的循环打印一页   
  17. while(count < linesPerPage && ((line=
    lineReader.ReadLine()) != null))   
  18. {   
  19. yPosition = topMargin + (count * 
    printFont.GetHeight(g));   
  20. g.DrawString(line, printFont, myBrush, 
    leftMargin, yPosition, new StringFormat());   
  21. count++;   

如果本页打印完成而line不为空说明还有没完成的页面这将触发下一次的打印事件在下一次的打印中lineReader会

自动读取上次没有打印完的内容因为lineReader是这个打印方法外的类的成员它可以记录当前读取的位置

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

.NET Framework打印设置,构造打印对话框 将对话框中设置的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();   

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

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

.NET Framework打印预览

  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. }   

打印就可以直接调用printDocument的Print()方法因为用户可能在打印之前还要再更改打印设置所以

在这里再次显示.NET Framework打印设置对话框

  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. }   

总结.NET Framework打印的过程是

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

2 实现PrintPage方法 4 在用户的单击事件中调用 printDocument 的 Print方法实现打印功能

在这中间可能要用到 PrintDialog PrintPreviewDialog PageSetupDialog 设置和查看打印效

果这些方法通常是由菜单的单击触发的。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...