它不是的PrintDocument的属性,它是PrintPageEventArgs的属性。其中的一个实例被传递给您的PrintPage事件处理程序。
的方式PrintController和PrintDocument的类工作严重影响的方式打印在Windows系统上实现。核心实现细节是基于页面的。打印机驱动程序一次处理一页,底层的winapi函数是StartPage()。呈现给打印设备上下文的任何内容都在一页上结束。然后EndPage()winapi函数完成页面并将其提交给假脱机程序。
这可能有助于图,而3页的文档打印的呼吁:
StartDoc()
PrintDocument.BeginPrint event
StartPage()
PrintDocument.PrintPage event, e.HasMorePages = true
EndPage()
StartPage()
PrintDocument.PrintPage event, e.HasMorePages = true
EndPage()
StartPage()
PrintDocument.PrintPage event, e.HasMorePages = false
EndPage()
PrintDocument.EndPrint event
EndDoc()
它应该是明确的,现在,通过分配e.HasMorePage = true,则让PrintController保持烧制的PrintPage事件。您需要为您的文档分页并在PrintPage事件处理程序中呈现正确页面的内容。您需要使用BeginPrint事件来将内部页面计数器设置为0.
Opps!我的意思是说printpageeventargs不是printdocument。 – ThN 2012-07-18 17:44:49
这就是它应该如何在理论上工作。显然,在C#或Delphi Prism中。似乎没有BeginDoc或StartDoc方法,虽然有您指出的BeginPrint和EndPrint。 – ThN 2012-07-18 19:59:44
感叹,他们是潜在的winapi电话,正如答案中指出的那样。 – 2012-07-18 20:35:42