如何从WinForms打印多个页面

本文关键字:打印 WinForms | 更新日期: 2023-09-27 18:25:13

尽管网上有一些教程,但我仍然不明白为什么这不能正确打印多个页面。我做错了什么?

public static void printTest()
{
   PrintDialog printDialog1 = new PrintDialog();
   PrintDocument printDocument1 = new PrintDocument();
   printDialog1.Document = printDocument1;
   printDocument1.PrintPage += 
       new PrintPageEventHandler(printDocument1_PrintPage);
   DialogResult result = printDialog1.ShowDialog();
   if (result == DialogResult.OK)
   {
       printDocument1.Print();
   }       
}
static void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
   Graphics graphic = e.Graphics;
   SolidBrush brush = new SolidBrush(Color.Black);
   Font font = new Font("Courier New", 12);
   e.PageSettings.PaperSize = new PaperSize("A4", 850, 1100);
   float pageWidth = e.PageSettings.PrintableArea.Width;
   float pageHeight = e.PageSettings.PrintableArea.Height;
   float fontHeight = font.GetHeight();
   int startX = 40;
   int startY = 30;
   int offsetY = 40;
   for (int i = 0; i < 100; i++)
   {             
       graphic.DrawString("Line: " + i, font, brush, startX, startY + offsetY);
       offsetY += (int)fontHeight;
       if (offsetY >= pageHeight)
       {
           e.HasMorePages = true;
           offsetY = 0;
       }
       else {
           e.HasMorePages = false;
       }
   }
}

您可以在此处找到此代码打印结果的示例:printed Document

如何从WinForms打印多个页面

您永远不会从循环中返回。更改为:

if (offsetY >= pageHeight)
{
    e.HasMorePages = true;
    offsetY = 0;
    return; // you need to return, then it will go into this function again
}
else {
    e.HasMorePages = false;
}

此外,您需要将循环更改为从第2页上的当前数字开始,而不是再次以i=0重新启动。