这是我的代码,当我打印一页时效果很好,但是当我尝试打印不适合一页的内容时,它不会启动新页面,它只接受偏移更改并开始写入第一页。
有谁知道该怎么做?
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;
}
答案 0 :(得分:1)
您使用的API错误,the doc says:
在PrintPage事件处理程序中,使用的Graphics属性 PrintPageEventArgs类和要计算行的文档内容 每页的长度和行数。绘制完每个页面后,检查是否 它是最后一页,并设置了HasMorePages属性 因此PrintPageEventArgs。 PrintPage事件被提升到 HasMorePages是假的。此外,请确保PrintPage事件是 与其事件处理方法相关联。
只有在回调退出时才能在循环中设置HasMorePages
。在您将HasMorePages
设置为false
答案 1 :(得分:0)
一旦到达页面末尾,您需要停止向打印机发送文本,仅将HasMorePages设置为true是不够的。你可以在那里添加break statement,或者完全改变你的循环,也可以保留你从列表中处理的最后位置。