在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
C#打印和C#打印预览的实现的三大部分:页面设置、打印预览、打印具体用到的类和属性事件都是什么内容呢?那么本文就向你介绍C#打印和C#打印预览的实现具体事宜。 我们谈到C#打印和C#打印预览的实现其中主要就是包括:页面设置、打印预览、打印三大部分。打印的原理是:生成mdi文件,系统碰到mdi的时候会自动以打印的方式处理。所以,不管用什么模板,什么方式;能在PrintPage事件处理中,生成一张要打印内容的图片就OK了!主要的支持类都包括在命名空间System.Drawing.Printing中,在程序集System.Drawing.dll中实现。C#打印和C#打印预览的实现主要通过PrintDocument类来完成,另外还包括几个辅助类:PrintDialog(打印对话框)、PrintPreviewDialog(打印预览对话框)、PageSetupDialog。 PrintDocument类是实现打印和打印预览的中心类,实际的打印操作是通过这个类来完成的。 使用这个类进行打印的操作过程: 1)创建类实例 PrintDocument printDt = new PrintDocument(); 2)设置类实例的属性 3)为该类的打印事件添加事件处理函数 4)调用该类的Print函数进行打印。 打印:printDt.Print();
在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .Net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下。 实现打印功能的核心是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页面设置以及所有的与打印有关的事件和方法 1。 BeginPrint事件 PrintPageEventArgs参数有很多重要的属性
1: PrintDocument printDocument;
2: private void InitializeComponent()
3: {
4: ...
5: // 这里的printDocument对象可以通过将PrintDocument控件拖放到窗体上来实现,注意要设置该控件的PrintPage事件。
6: printDocument=new PrintDocument();
7: printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage);
8: ...
9: }
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: }
20: // 注意:使用本段代码前,要在该窗体的类中定义lineReader对象:
21: // StringReader lineReader = null;
22: //如果本页打印完成而line不为空,说明还有没完成的页面,这将触发下一次的打印事件。在下一次的打印中lineReader会
23: //自动读取上次没有打印完的内容,因为lineReader是这个打印方法外的类的成员,它可以记录当前读取的位置
24: if(line != null)
25: e.HasMorePages = true;
26: else
27: {
28: e.HasMorePages = false;
29: // 重新初始化lineReader对象,不然使用打印预览中的打印按钮打印出来是空白页
30: lineReader = new StringReader(textBox.Text); // textBox是你要打印的文本框的内容
31: }
32: }
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: }
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: {
13: }
14: }
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: {
15: printDocument.PrintController.OnEndPrint(printDocument,new PrintEventArgs());
16: }
17: }
18: }
总结打印的过程是 本文来自: 中科软件园(www.4oa.com) 详细出处参考:http://www.4oa.com/Article/html/6/34/501/2005/18114.html |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论