无需打印文档即可获取打印页数

时间:2014-07-08 09:04:36

标签: c# .net printing print-preview

这有点类似于Is there a better way to get the page count from a PrintDocument than this?

的问题

但在我的情况下,我有一个带有格式化html的网络浏览器控件。目前我有选项,可以调用ShowPrintPreviewDialog(),以便用户可以看到要打印的页数。

无论如何在没有启动PrintPreview的情况下获取要打印的页面的数量?

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

我使用了PrintPage事件

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

1 个答案:

答案 0 :(得分:10)

坏消息总是在SO上传播缓慢。你需要抓住这个实用的想法。

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

可靠地将该属性设置为true,您需要确切了解HTML如何由浏览器布局引擎呈现。并弄清楚如何将其分解为不切割的页面,例如,一行文本或两个图像。并弄清楚如何以完全浏览器打印引擎执行此操作的方式。许多程序员尝试过的壮举,没有人完成。浏览器的自动化对象模型没有所需的api。

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

enter image description here

如果您考虑从对话框中窥探该数字:不,那也无法正常工作。该对话框不使用任何控件,它是一个单片窗口。