打印预览多个页面不起作用

时间:2014-03-20 18:18:42

标签: c# printing

我见过很多关于此事的帖子。我相信我跟着他们,但仍然有问题。

我在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页。

1 个答案:

答案 0 :(得分:1)

每次单击打印按钮时,我都不会不断添加PrintPage事件处理程序:

请注释掉这一行,或将其移到表单的构造函数中,以便它只连接一次:

printDocument1.PrintPage += this.printDocument1_PrintPage;