C# 在不打印文档的情况下获取打印页数

C# 在不打印文档的情况下获取打印页数,c#,.net,printing,print-preview,C#,.net,Printing,Print Preview,这有点类似于关于 但在我的例子中,我有一个带有格式化html的web浏览器控件。目前,我有一个选项可以调用ShowPrintPreviewDialog(),这样用户就可以看到要打印多少页了 在不启动打印预览的情况下,是否仍然可以获取要打印的页数 我正在尝试创建一个方法,该方法将调用OnTextChange并自动显示打印页数 我使用了PrintPage事件 private void PrintDocumentOnPrintPage(object sender, PrintPageEventArgs

这有点类似于关于

但在我的例子中,我有一个带有格式化html的web浏览器控件。目前,我有一个选项可以调用
ShowPrintPreviewDialog()
,这样用户就可以看到要打印多少页了

在不启动
打印预览
的情况下,是否仍然可以获取要打印的页数

我正在尝试创建一个方法,该方法将调用
OnTextChange
并自动显示打印页数

我使用了
PrintPage
事件

private void PrintDocumentOnPrintPage(object sender, PrintPageEventArgs e)
 {
     e.Graphics.DrawString(this.webBrowser1.DocumentText, this.webBrowser1.Font, Brushes.Black, 10, 25);               
 }

坏消息总是传播得很慢。你需要重新认识到这是可行的

虽然问题中没有说明,但您现在应该已经知道您的PrintPage事件处理程序无法工作。它总是产生一个1的计数。这是因为您从未将
e.HasMorePages
属性设置为true,该属性会导致生成多个页面

要可靠地将该属性设置为true,您需要准确了解浏览器布局引擎呈现HTML的方式。并准确地找出如何将其拆分为不会将一行文本或图像一分为二的页面。并找出如何做到这一点,方法与浏览器打印引擎的方法完全相同。这是一项许多程序员都尝试过的壮举,却无人完成。浏览器的自动化对象模型没有所需的api

唯一合理的方法是你已经知道的方法。您必须调用ShowPrintPreviewDialog()。它可以在预览对话框中显示页面计数,如IE11中所示:


如果你考虑把这个号码从对话框中偷走:不,也不行。对话框不使用任何控件,它是一个整体窗口。

我想你的答案是:这是一个静态方法,你可以在文本更改事件处理程序中调用它,它根本不会显示任何对话框。@qqbenq:如果使用
StandardPrintController
,它可以正常工作,但
PreviewPrintController
,所以答案对我没有帮助,我确实设置了
e.NewPage
。我似乎找不到类似的属性?这是一个拼写错误,更正了。请你试着找出答案的要点,你没有机会把它设置正确。