Hasmorepages PrintPageEventArgs属性到底做了什么?

时间:2012-07-18 15:33:21

标签: .net printing delphi-prism printdocument

我试图了解Hasmorepages PrintPageEventArgs属性是什么,为什么要使用它以及它是如何工作的。

MSDN Library并没有很好的解释。他们所说的只是如果你把它设置为true,那么再次调用printpage事件。这是否意味着事件自行循环而不离开或离开并再次调用自身或依赖于您再次调用printpage事件?

我只是想了解PrintPageEventArgs.hasmorepages属性。任何提示或帮助将不胜感激。

谢谢,

2 个答案:

答案 0 :(得分:4)

它不是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。

答案 1 :(得分:2)

HasMorePages是您作为事件参数收到的PrintPageEventArgs的布尔属性。如果要打印更多页面,则在打印当前页面后将其设置为True;如果当前页面是最后一页,则将其设置为False

事件总是通过框架中的某些东西为你调用,而且永远不应该由你直接调用。他们是事件,这意味着他们被派遣去告诉你事情已经发生并让你有机会做出回应或做出反应。

如果您将其设置为True,则会自动再次调用PrintPage事件;你不要自己打电话。 (这正是MSDN文档中所说的:如果您将其设置为true,则再次调用printpage事件 。它不会说您需要再次调用它 - 它说再次调用 。)

ev.HasMorePages := DoYouHaveMorePagesToPrint;

有关事件的VB.NET示例以及如何使用ev.HasMorePages,请参阅MSDN documentation for PrintDocument。有关PrintPageEventArgs的信息,请参阅this MSDN page,其中包含指向members of PrintPageEventArgs的链接(包括HasMorePages)。