在 .NET 中,应该使用 PrintPageEventArgs.HasMorePage 属性将换页符发送到打印机。通过调用 e.Graphics.DrawString("\f", sFont, sBrush, 0, 0),您只是将文本渲染到要打印的文档中,打印机永远不会将其解释为换页。
因为您知道要在哪里中断页面,所以不要调用 InserPageBreak 方法,而是在 PrintPage 事件处理程序中设置 PrintPageEventArgs.HasMorePages = true。这将向打印机发送换页,并且您的 PrintPage 事件将继续被触发,直到您设置 HasMorePages = false。
我希望这有帮助。了解您如何实现 PrintPage 事件处理程序可能会很有用。
例子:
使用 BeginPrint 处理程序在打印前初始化数据
void _document_BeginPrint(object sender, PrintEventArgs e)
{
//generate some dummy strings to print
_pageData = new List<string>()
{
"Page 1 Data",
"Page 2 Data",
"Page 3 Data",
};
// get enumerator for dummy strings
_pageEnumerator = _pageData.GetEnumerator();
//position to first string to print (i.e. first page)
_pageEnumerator.MoveNext();
}
在 PrintPage 处理程序中,一次打印一页,并设置 HasMorePages 以指示是否有另一页要打印。在本例中,将打印三页,每页一个字符串。在第 3 页之后,_pageEnumerator.MoveNext() 将返回 false,结束打印作业。
void _document_PrintPage(object sender, PrintPageEventArgs e)
{
Font sFont = new Font("Arial", 10);
Brush sBrush = Brushes.Black;
//print current page
e.Graphics.DrawString(_pageEnumerator.Current, sFont, sBrush, 10, 10);
// advance enumerator to determine if we have more pages.
e.HasMorePages = _pageEnumerator.MoveNext();
}