引言
有段时间没有更新文章了,最近一段时间一直没有时间去写点东西,因为在项目后期,很多地方需要修改,导致了时间的浪费。现在回头想想,大部分时间并不是浪费到了实现功能上,而是后期调试。GDI+编程的前面写了好几篇的文章了,主要是在介绍GDI+编程的基本结构,绘图所需要的几种类,对于初学者来说,了解基本的概念及类的基本用法才能熟练的绘制出想要的图形。
本篇文章将会是GDI+有关打印的最后一篇文章,主要是说说分页打印的问题,内容比较简单,如果使用到GDI+打印的更多内容,大家可以留言交流。
分页打印
今天我们来看看分页打印功能的实现,在项目中报表的打印一直是很重要的系统功能,而且打印的样式较多,这时候可以使用报表工具区设计报表,但是使用别人的工具就会失去自己设计的机会,所以建议在遇到一些问题时不要只是考虑工具的使用,首先要考虑的是是否自己能做一个小工具。
想要实现分页打印,需要设置HasMorePages属性值为True,该属性是类PrintPageEventArgs类的一个属性,表示添加附加页,在该属性值为True的过程中,PrintPage事件会一直循环添加下午,直到该属性值为False为止。MSDN官方解释为:获取或设置一个值,该值指示是否打印附加页。
实例
说明:在窗体上设有两个文本框,分别输入起始页的数字和结束页的数字,根据提供的内容计算打印所需要的页数并在每页上打印内容。
分别在起始页和结束页文本框中输入数字,然后点击分页打印,将实现多页打印。
private PrintDocument pdDoc; //声明打印文档 private PrintPreviewDialog pdpDialog; //声明打印预览 private int intStart; //声明打印起始页的内容 private int intEnd; //声明打印结束页的内容 private int intPageCount; //声明打印页数 public Form1() { InitializeComponent(); pdDoc = new PrintDocument(); pdpDialog = new PrintPreviewDialog(); pdDoc.PrintPage += new PrintPageEventHandler(pdDoc_PrintPage); } private void pdDoc_PrintPage(object sender, PrintPageEventArgs e) { Font font = new Font("宋体", 10,FontStyle.Bold ); //声明打印字体 PointF pf = new PointF(30f, 50f); //声明打印内容所在的坐标点 //打印字符串 e.Graphics.DrawString(intStart.ToString(), font,Brushes .DarkRed ,pf); intStart = intStart + 1; //打印内容加1 //if判断:如果当前打印内容大于结束内容,将不继续打印,否则继续分页 if (intStart >intEnd ) { e.HasMorePages = false; } else { e.HasMorePages = true; } } private void Form1_Load(object sender, EventArgs e) { label1.Text = "起始页内容:"; label2.Text = "结束页内容:"; button1.Text = "分页打印"; } private void button1_Click(object sender, EventArgs e) { pdpDialog.Document = pdDoc; //设置打印预览的打印文档 intEnd = int.Parse(this.textBox2.Text); //获取结束页 intStart =int.Parse(this.textBox1.Text);//获取起始页打印内容 this.intPageCount = intEnd - intStart; //获取页码 pdpDialog.ShowDialog(); //显示打印预览 }
结语
有关GDI+打印的内容已经讲解完成,从基本的底层代码到功能的实现期间介绍了打印中使用的基本的方法,那么通过三篇的GDI+打印的讲解,相信大家能够根据这三篇文章在不依靠第三方工具的情况下,自己动手写代码来设计打印报表。