打印文档问题,只打印第一页。

3
我需要能够按顺序打印ListView中的所有项目,包括列名,例如:
开始时间:(日期) 结束时间:(日期) 班次:(班次号码) 销售额:(销售额)
它可以完美地打印我所需要的内容,但是它只打印第一页(或列表视图的前12行)。然而,如果我将信息发送到消息框中,则会发送所有列表视图内容,因此无法在打印中打印所有内容,但我无法找到原因。
private void btnPrint_Click(object sender, EventArgs e)
    {

        try
        {
            PrintDialog pd = new PrintDialog();
            PrintDocument MyPrintDocument = new PrintDocument();
            MyPrintDocument.PrintPage += new PrintPageEventHandler(this.PrintPageEvent);
            pd.PrinterSettings.PrintRange = PrintRange.AllPages;
            MyPrintDocument.PrinterSettings.PrintRange = PrintRange.AllPages;
            MyPrintDocument.Print();
        }
}


 private void PrintPageEvent(object sender, PrintPageEventArgs ev)
     {
        string text = null;
        for (int i = 0; i < listView4.Items.Count; i++)
        {
            text += "Start: " + listView4.Items[i].Text + Environment.NewLine + "End: " + listView4.Items[i].SubItems[1].Text + Environment.NewLine + "Shift Number: " + listView4.Items[i].SubItems[2].Text + Environment.NewLine + "Total Sales: " + listView4.Items[i].SubItems[3].Text + Environment.NewLine + "----------------------------" + Environment.NewLine;
        }
        MessageBox.Show(text);
        Font MyFont = new Font("Arial", 12);
        ev.Graphics.DrawString("------------------------------------" +
    Environment.NewLine + text +
    Environment.NewLine + "------------------------------------", MyFont, new SolidBrush(System.Drawing.Color.Black),
            (ev.PageBounds.Left), ev.PageBounds.Top);
       }

我已经编辑了您的标题。请看一下“问题的标题应该包括‘标签’吗?”(http://meta.stackexchange.com/questions/19190/)这篇文章,那里的共识是“不应该”。 - John Saunders
1
你需要更大的纸张或使用 e.HasMorePages 属性。这也要求您在上一页停止打印的位置继续打印。换句话说,你的 i 变量需要是一个类成员,并且你需要使用 BeginPrint 将它重置为 0。迭代器是避免这种情况的好方法。 - Hans Passant
2个回答

2
您需要将PrintPageEventArgs.HasMorePages = true赋值为true以打印多页。所以,在您的情况下,您只需这样做。
ev.HasMorePages = true;

PrintPageEventArgs.HasMorePages 属性 -

  • 获取或设置一个值,指示是否应打印附加页面。
  • 如果应该打印附加页面,则返回 true;否则返回 false
  • 默认值为 false

2
我已经了解了这个问题,但是我的问题是我不知道该把它放在哪里。我把它放在最后,但它只是一遍又一遍地打印出1-12行。 - user2296611
当我设置了这个标志后,它会在打印机上一遍又一遍地进行缓冲。 - Bryan

1
PrintPageEvent方法处理程序中,当您有更多要打印的页面时,需要设置e.HasMorePages = true;根据MSDN文档,默认值为false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接