怎样用C#实现完整文档打印功能

打印

在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .net Framework的打
印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下。
打印操作通常包括以下四个功能
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对象添加打印事件
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;
}
打印设置,构造打印对话框 将对话框中设置的Document属性赋给printDocument这样会将用户的设置自动保存到printDocument
的PrinterSettings属性中
protected  void FileMenuItem_PrintSet_Click(object sender,EventArgs e)
{
PrintDialog printDialog = new PrintDialog();
printDialog.Document = printDocument;
printDialog.ShowDialog();
}
页面设置和打印预览与打印设置原理相同都是构造对话框将用户在对话框中的设置保存到相应的类的属性中
protected  void FileMenuItem_PageSet_Click(object sender,EventArgs e)
{
  PageSetupDialog pageSetupDialog = new PageSetupDialog();
  pageSetupDialog.Document = printDocument;
  pageSetupDialog.ShowDialog();
}
打印预览
protected void FileMenuItem_PrintView_Click(object sender,EventArgs e)
{
   PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
   printPreviewDialog.Document = printDocument;
   lineReader = new StringReader(textBox.Text);
   try
      {
    printPreviewDialog.ShowDialog();
      }
    catch(Exception excep)
    {
    MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
打印就可以直接调用printDocument的Print()方法因为用户可能在打印之前还要再更改打印设置所以
在这里再次显示打印设置对话框
  protected void FileMenuItem_Print_Click(object sender,EventArgs e)
  {
   PrintDialog printDialog = new PrintDialog();
   printDialog.Document = printDocument;
   lineReader = new StringReader(textBox.Text);
   if (printDialog.ShowDialog() == DialogResult.OK)
   {
    try
       {
       printDocument.Print();
       }
       catch(Exception excep)
            {
              MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
              printDocument.PrintController.OnEndPrint(printDocument,new PrintEventArgs());
            }
       }
  }

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

2 实现PrintPage方法 

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

 

时间: 2024-11-02 01:35:57

怎样用C#实现完整文档打印功能的相关文章

如何用C#实现完整文档打印功能

在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下.   打印操作通常包括以下四个功能1 打印设置 设置打印机的一些参数比如更改打印机驱动程序等2 页面设置 设置页面大小纸张类型等3 打印预览 类似于word中的打印预览4 打印 下面我把我编写的记事本(全部源代码可以在http://www.cndot.ne

word文档打印之后出打印报告的问题及解决方法

问题:用户反映,每次word文档打印之后都会出一张打印报告.我尝试了下其他格式的文档,却没问题,所以基本可以确定是word设置的问题. 原因:word选项错误. 解决方法:进入word option--Display--Print Document Properties,把这项前面的勾去掉.如图: 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Office/word/

学好十条小经验 让Excel文档打印得心应手

Excel表格编辑的最后一项任务往往是打印.在实际工作中,我们的打印任务往往不是那么简单轻松,比如我们希望只打印工作表中需要的区域,或者希望能打印公式本身而不是公式的计算结果等等.Excel能为我们提供灵活的打印选择,我们需要进行巧妙设置. 1.可打印区域的设置 很多情况下我们并不需要打印工作表的全部,而只需要打印某一内容,那么此时,我们需要为打印指定打印区域.方法是,先点击菜单命令"视图→分页预览",然后在预览视图中选择要打印的单元格区域,点击菜单命令"文件→打印区域→设置

Word入门动画教程27:把文档打印成小册子

Word 2003具有一个"书籍折页"的功能,能够在一页纸上打印两页的内容,打印后可以从中缝装订成折叠的小册子,更便于携带和阅读.设置步骤如下: 1.打开"页面设置"对话框,切换到"纸张"选项卡,选择一种纸型,例如"A4". 2.切换到"页边距"选项卡,在"多页"列表中选择"书籍折页". 如果Word文档的纸张方向没有设为横向,Word会自动将其设为横向. 3.切换到

秘书文员必备:Word文档打印不求人

每年2月和3月都是求职招聘最繁忙的季节,作为一个初入职场的新人,在实际工作中难免会遇到很多问题.除了人际关系.沟通方式.工作态度等方面,职场新人还会因为软件运用不熟练,使得工作效率总是无法提升. 毋庸置疑,工作技能的熟练程度,是一切成功的开始.当你每天收发邮件.撰写各种文档.编制各类表格的时候,有没有想过,为什么有些同事就能处理得精巧细致.游刃有余?尤其是秘书.文员等职位,更需要熟练掌握Office等办公软件的应用技巧,比如打印文档. 打印文档可以算是工作过程中最常用到的技能了.一般来说,打印W

WPS文档打印前要怎样预览

  我们在打印WPS时,有时会因为一些特殊原因或者粗心大意而导致打印出来的文档错误,或排版有问题,或表格不正确等等,这时,我们就非常想要在打印之前就能够看一下打印的效果. 打印文档之前,使用"打印预览"可以检查文档的打印效果,例如打印内容的大小.位置是否合适.此时在WPS文字屏幕窗口底部的状态栏左侧还会显示当前文档的总页码数和当前页码. 在常用工具栏上单击"打印预览",可进入打印预览. 进入打印预览 进入打印预览后,单击预览页面就会对预览页面进行缩放,方便切换查看整

文员必备技能:Word文档打印不求人

当你每天收发邮件.撰写各种文档.编制各类表格的时候,有没有想过,为什么有些同事就能处理得精巧细致.游刃有余?尤其是秘书.文员等职位,更需要熟练掌握Office等办公软件的应用技巧,比如打印文档. Word文档打印不求人 打印文档可以算是工作过程中最常用到的技能了.一般来说,打印Word文档时只要点击Word中的"打印"按钮,打印机就会按照Word中的默 认设置,将文档从第一页打印到最后一页.但有时,老板可能会需要一些不一样的打法,比如将一个文档从后往前逆序打印出来,或者一个文档中,有的

Word文档打印技巧

当你每天收发邮件.撰写各种文档.编制各类表格的时候,有没有想过,为什么有些同事就能处理得精巧细致.游刃有余?尤其是秘书.文员等职位,更需要熟练掌握Office等办公软件的应用技巧,比如打印文档. Word文档打印不求人 打印文档可以算是工作过程中最常用到的技能了.一般来说,打印Word文档时只要点击Word中的"打印"按钮,打印机就会按照Word中的默 认设置,将文档从第一页打印到最后一页.但有时,老板可能会需要一些不一样的打法,比如将一个文档从后往前逆序打印出来,或者一个文档中,有的

Word文档打印PDF文件方法

  很多朋友可能对PDF还是束手无策,不知道怎么使用.其实,因为Word文档的使用几率比PDF文档还要高些,所以大家对Word比较熟悉.想要将PDF的文档放在Word文档中,并将其打印,这个方法可行吗?小编肯定地告诉大家可以的.下面就来看看Word文档打印PDF文档的方法. 1.双击Acrobat9pro.exe文件,安装Acrobat9pro软件,进入下一步. Acrobat9pro 2.打开控制面板->硬件和声音->设备和打印机,出现Adobe PDF打印机,进入下一步. 打印机 3.选择