我见过很多关于此事的帖子。我相信我跟着他们,但仍然有问题。
我在C#中这样做,我正在运行Windows 8.1。
我正在打印XML文件内容的多页。我不只是循环遍历所有元素,我正在做他自己的格式化。有足够的元素,我最终将打印几页,但我仍然坚持在第2页上显示第2页内容。这就是我正在做的事情。
int pagePrinting;
private void butPrint_Click(object sender, EventArgs e)
{
pagePrinting = 1;
printDocument1.PrintPage += this.printDocument1_PrintPage;
printPreviewDialog1.PrintPreviewControl.Document = printDocument1;
printPreviewDialog1.Show();
((Form)printPreviewDialog1).WindowState = FormWindowState.Maximized;
}
private void printDocument1_PrintPage(System.Object sender, PrintPageEventArgs e)
{
Point pnt = new Point(0, 0);
switch (pagePrinting)
{
case 1:
e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
e.Graphics.Clear(Color.White);
printDocument1.DefaultPageSettings.Landscape = false;
pnt.X = 300;
e.Graphics.DrawString("Page 1 Header", fntArialHeader, Brushes.Black, pnt);
// more printing on page 1 ...
pagePrinting++;
e.HasMorePages = true;
break;
case 2:
e.Graphics.DrawString("Page 2 Header", fntArialHeader, Brushes.Green, pnt);
// More printing on page 2 ...
e.HasMorePages = false;
break;
}
}
我相信在打印第1页结束时,我设置e.HasMorePages = true,然后退出并返回打印第2页。当我在打印预览中查看时,我在第1页上获得了两个标题,这是唯一可用的页面。当我按下“打印预览”对话框中的“打印”按钮时,我只打印第2页。
答案 0 :(得分:1)
每次单击打印按钮时,我都不会不断添加PrintPage事件处理程序:
请注释掉这一行,或将其移到表单的构造函数中,以便它只连接一次:
printDocument1.PrintPage += this.printDocument1_PrintPage;