1

这是我的代码,当我打印一页时工作正常,但是当我尝试打印不适合一页的内容时,它不会开始新页面,它只是接受偏移量更改并开始在第一页上书写.

有谁知道该怎么做?

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;
}
4

2 回答 2

1

您使用的 API 错误,文档说

在 PrintPage 事件处理程序中,使用 PrintPageEventArgs 类的 Graphics 属性和文档内容来计算行长和每页行数。绘制完每一页后,检查是否是最后一页,并相应地设置 PrintPageEventArgs 的 HasMorePages 属性。引发 PrintPage 事件,直到 HasMorePages 为 false。此外,请确保 PrintPage 事件与其事件处理方法相关联。

您不能HasMorePages在循环中设置,只能在回调退出时设置。回调将被调用,直到您设置HasMorePages为 false

于 2013-02-06T16:57:44.333 回答
0

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

于 2013-02-06T16:59:34.080 回答