C#打印多个页面

时间:2013-02-06 16:51:14

标签: c# printing

这是我的代码,当我打印一页时效果很好,但是当我尝试打印不适合一页的内容时,它不会启动新页面,它只接受偏移更改并开始写入第一页。

有谁知道该怎么做?

private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
    Graphics graphic = e.Graphics;

    Font font = new Font("Courier New", 12);
    float fontHeight = font.GetHeight();
    int startX = 10;
    int startY = 10;
    int offset = 0;

    float pageWidth = e.PageSettings.PrintableArea.Width;
    float pageHeight = e.PageSettings.PrintableArea.Height;

    foreach (string line in textRichTextBox.Lines)
    {
        graphic.DrawString(line, font, new SolidBrush(Color.Black), startX, startY + offset);
        offset += (int)fontHeight;// + 5

        if (offset >= pageHeight - (int)fontHeight)
        {
            e.HasMorePages = true;
            offset = 0;
        }
    }
    e.HasMorePages = false;
}

2 个答案:

答案 0 :(得分:1)

您使用的API错误,the doc says

  

在PrintPage事件处理程序中,使用的Graphics属性   PrintPageEventArgs类和要计算行的文档内容   每页的长度和行数。绘制完每个页面后,检查是否   它是最后一页,并设置了HasMorePages属性   因此PrintPageEventArgs。 PrintPage事件被提升到   HasMorePages是假的。此外,请确保PrintPage事件是   与其事件处理方法相关联。

只有在回调退出时才能在循环中设置HasMorePages。在您将HasMorePages设置为false

之前,将调用回调

答案 1 :(得分:0)

一旦到达页面末尾,您需要停止向打印机发送文本,仅将HasMorePages设置为true是不够的。你可以在那里添加break statement,或者完全改变你的循环,也可以保留你从列表中处理的最后位置。