C# WinForm中如何用printDocument实现多页不同内容打印?
解决C# WinForm打印多页独立内容的问题
你的核心问题是没搞懂PrintPage事件的触发逻辑:这个事件每打印一页就会被调用一次,不需要在单次事件里同时绘制多页内容。你当前的代码在第一次触发时既画了第一页又画了第二页的内容,导致第一页叠加了两部分内容,而第二次触发事件时又重复绘制第一页的内容,最终两页内容重复。
正确的做法是根据currentpage的值,在每次事件触发时只绘制当前页的专属内容,再通过e.HasMorePages控制是否继续打印下一页。修正后的代码如下:
int currentpage = 0; int numofpages = 2; private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { // 根据当前页码绘制对应内容 switch(currentpage) { case 0: // 第一页内容 Bitmap bmp1 = Properties.Resources.someImage; e.Graphics.DrawImage(bmp1, 20, 20); e.Graphics.DrawString("More content", new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, 600, 350); break; case 1: // 第二页内容 Bitmap bmp2 = Properties.Resources.someOtherImage; e.Graphics.DrawImage(bmp2, 20, 20); e.Graphics.DrawString("Other content", new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, 600, 350); break; } currentpage++; // 判断是否还有下一页 e.HasMorePages = currentpage < numofpages; }
关键说明:
- 每次
PrintPage事件触发时,currentpage代表当前要打印的页码(从0开始),根据它来区分要绘制的内容。 - 绘制完当前页内容后,递增
currentpage,再通过currentpage < numofpages来设置e.HasMorePages——如果为true,打印系统会再次触发PrintPage事件打印下一页;如果为false,打印结束。 - 注意:打印开始前最好重置
currentpage为0,比如在调用printDocument1.Print()之前加上currentpage = 0;,避免多次打印时页码混乱。
内容的提问来源于stack exchange,提问作者CharlieT
相关产品推荐
相关产品推荐

