【问题标题】:printdocument printing issue only prints first pageprintdocument 打印问题仅打印第一页
【发布时间】:2013-06-20 17:56:28
【问题描述】:

我必须能够使用列名按顺序打印 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);
       }

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 您需要更大的纸张或使用 e.HasMorePages 属性。这还要求您从上一页中断的地方继续打印。换句话说,您的 i 变量必须是类成员,并且您需要 BeginPrint 将其重置为 0。迭代器是避免这种情况的好方法。

标签: c# .net winforms printing


【解决方案1】:

您应该指定PrintPageEventArgs.HasMorePages = true 来打印多页。所以,在你的情况下,你只需这样做

ev.HasMorePages = true;

PrintPageEventArgs.HasMorePages 属性-

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

【讨论】:

  • 我已经读过这个,但问题是我不知道把它放在哪里,我把它放在最后,它只是一遍又一遍地打印第 1 - 12 行。
  • 当我在打印机上一遍又一遍地设置这个标志时。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2017-04-13
    相关资源
    最近更新 更多