C#中的打印

来源:互联网 发布:淘宝商城白酒 编辑:程序博客网 时间:2024/06/07 07:12

 

文档及代码下载:http://www.dingos.cn/index.php?topic=247.0

一个简单的示例 - 通过C#实现打印文本框中的内容 
实现如图:

  使用控件执行打印。实现打印的主要组件是“PrintDocument”控件 。使用这个控件调用“Print” 函数实现“PrintPage”事件 。如下是常规命令:
打印事件:

view plaincopy to clipboardprint?
  1. private void tsmiPrint_Click(object sender, EventArgs e){  
  2.     printDialog1.Document = ThePrintDocument;  
  3.     string strTest = this.richTextBox1.Text;  
  4.     myReader = new StringReader(strTest);  
  5.     if (printDialog1.ShowDialog() == DialogResult.OK){  
  6.         this.ThePrintDocument.Print();  
  7.     }  
  8. }  

说明: 
    PrintDocument.Print 方法:指定打印输出的方法是处理 
    PrintPage事件并使用PrintPageEventArgs中包含的 Graphics。

打印页事件: 
实现:

view plaincopy to clipboardprint?
  1. private void ThePrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){  
  2.     float linesPerPage = 0;  
  3.     float yPosition = 0;  
  4.     int count = 0;  
  5.     float leftMargin = e.MarginBounds.Left;  
  6.     float topMargin = e.MarginBounds.Top;  
  7.     string line = null;  
  8.     Font printFont = this.richTextBox1.Font;  
  9.     SolidBrush myBrush = new SolidBrush(Color.Black);  
  10.     linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);  
  11.     while (count < linesPerPage && ((line = myReader.ReadLine()) != null)){  
  12.         yPosition = topMargin + (count * printFont.GetHeight(e.Graphics));  
  13.         e.Graphics.DrawString(line, printFont, myBrush, leftMargin, yPosition,  
  14.         new StringFormat());  
  15.         count++;  
  16.     }  
  17.     if (line != null)  
  18.         e.HasMorePages = true;  
  19.     else  
  20.         e.HasMorePages = false;  
  21.     myBrush.Dispose();  
  22. }  

说明:

  • PrintPageEventArgs类:为 PrintPage 事件提供数据。
  • PrintPageEventArgs.MarginBounds 属性:获取表示边距以内的页面部分的矩形区域。
  • Font 类:定义特定的文本格式,包括字体、字号和字形属性。无法继承此类。
  • SolidBrush 类:定义单色画笔。画笔用于填充图形形状,如矩形、椭圆、扇形、多边形和封闭路径。无法继承此类。
  • PrintPageEventArgs.Graphics 属性:获取用于绘制页的 Graphics。
  • Graphics.DrawString 方法:使用指定 StringFormat 的格式化属性,用指定的 Brush 和 Font 对象在指定的位置绘制指定的文本字符串。
    参数:
    • s:要绘制的字符串。
    • font:Font,它定义字符串的文本格式。
    • brush:Brush,它确定所绘制文本的颜色和纹理。
    • x:所绘制文本的左上角的 x 坐标。
    • y:所绘制文本的左上角的 y 坐标。
    • format:StringFormat,它指定应用于所绘制文本的格式化属性(如行距和对齐方式)。
  • StringFormat 类:封装文本布局信息(如对齐、文字方向和 Tab 停靠位),显示操作(如省略号插入和国家标准 (National) 数字替换)和 OpenType 功能。无法继承此类。
  • PrintPageEventArgs.HasMorePages 属性:获取或设置一个值,该值指示是否打印附加页。若应打印附加页,则为 true;否则为 false。默认为 false。
  • Brush.Dispose 方法:释放由此 Brush 对象使用的所有资源。
    • 调用 Dispose 将允许重新分配由此 Brush 对象使用的资源以用于其他目的。
    • 使用完 Brush 后调用 Dispose。Dispose 方法使 Brush 处于不可用状态。
    • 调用完 Dispose 后,必须释放对 Brush 的所有引用,这样垃圾回收器才能收回 Brush 占用的内存。

   点击“Print”菜单将调用“PrintFile_Click”。这条线路首先访问PrintDialog对象以便文档准备打印。使用“ShowDialog”对话框以便用户能够设置打印属性并决定是否需要打印。在调用“ThePrintDocument.Print方法”后将开始打印过程。系统自动调用“PrintPage”事件打印需要的页面信息。“PrintPageEventArgs”参数“ev”包含打印设备内容,“ev.Graphics”用户绘制打印机。在这个例子中我们将从Rich Text Edit控件中使用StringReader逐行读取信息。 “StringReader”类类似“stream”一样处理字符串并可以以使用ReadLine方法从text edit控件中逐行读取信息。可以根据边框接收位置及字体的大小。我们感兴趣的是记事本可以预览打印机的字体长度,通过使用GetHeight方法(printFont.GetHeight(ev.Graphics()))获得打印机设备内容。因为在屏幕上字体的象素和打印机上的象素是不同的。“PrintPageEventArg”的“HasMorepages”表示连续读取“PrintPage”事件中读取在textbox中比当前页面多的行。

打印预览: 
实现:

view plaincopy to clipboardprint?
  1. private void tsmiPrintView_Click(object sender, EventArgs e){  
  2.     try{  
  3.         string strText = this.richTextBox1.Text;  
  4.         myReader = new StringReader(strText);  
  5.         PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();  
  6.         printPreviewDialog1.Document = this.ThePrintDocument;  
  7.         printPreviewDialog1.ShowDialog();  
  8.     }catch (Exception exp){  
  9.         Console.WriteLine(exp.Message.ToString());  
  10.     }  
  11. }  

说明:

  • StringReader 类:实现从字符串进行读取的 TextReader。
  • PrintPreviewDialog 类:表示包含 PrintPreviewControl 的对话框窗体。创建 PrintPreviewDialog 的实例时,Document 属性被初始化为空引用。可以在运行时更改这一属性的值。
  • PrintPreviewDialog.Document 属性:获取或设置要预览的文档。
    • 属性值:PrintDocument,它表示要预览的文档。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胶的手机套变黄怎么办 手机壳硅胶变黄怎么办 硅胶手机壳大了怎么办 硅胶手机壳变大了怎么办 硅胶手机壳有点大怎么办 硅胶手机壳粘手怎么办 透明手机壳变黄怎么办? 耳机胶套经常掉怎么办 硅胶手机壳粘毛怎么办 耳机海绵套坏了怎么办 沙发垫海绵坏了怎么办 汽车坐海绵坏了怎么办 苹果手机边框有缝隙怎么办 孕期牙套子掉了怎么办 平果充电线不匹配怎么办 苹果六外壳掉漆怎么办 苹果平板充电没反应怎么办 苹果平板黑屏没反应怎么办 苹果平板卡机了怎么办 苹果7plus掉漆怎么办 皮的手机壳脏了怎么办 小米5x边边裂开怎么办 荣耀8的后盖摔了怎么办 hp打印机卡了纸怎么办 华为荣耀9进水了怎么办 小米5x屏幕脱胶怎么办 小米5x后盖松动怎么办 苹果手机没电了怎么办 荣耀9的后盖裂了怎么办 手机一直在开机画面怎么办华为 华为手机一直显示开机画面怎么办 华为p7手机开不了机怎么办 华为荣耀8弯了怎么办 手机壳掉漆了怎么办 华为5a手机音量小怎么办 华为5a手机声音小怎么办 苹果屏幕磨花了怎么办 白色磨砂手机壳脏了怎么办 胶皮手机壳变黄怎么办 手机壳边缘黑了怎么办 手机壳磨黑了怎么办