【问题标题】:Get print page count without printing the document在不打印文档的情况下获取打印页数
【发布时间】:2014-08-28 22:48:16
【问题描述】:

这有点类似于关于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);               
 }

【问题讨论】:

  • 我想你在answer to the linked question 中得到了答案:它是一个静态方法,你可以在文本更改事件处理程序中调用它,它根本不会显示任何对话框。
  • @qqbenq: 如果使用StandardPrintController 它可以正常工作,但不是PreviewPrintController,所以答案没有帮助

标签: c# .net printing print-preview


【解决方案1】:

在 SO,坏消息总是传得很慢。您需要考虑一下这是实用的想法。

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

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

唯一合理的方法是您已经知道的方法。您必须调用 ShowPrintPreviewDialog()。很容易在预览对话框中显示页数,在 IE11 中如下所示:

如果您考虑从对话框中窥探该号码:不,这也行不通。该对话框不使用任何控件,它是一个整体窗口。

【讨论】:

  • 您好,我确实设置了e.NewPage。我似乎找不到类似的属性?
  • 这是一个错字,已更正。请尝试理解答案的重点,您没有机会正确设置它。
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 2015-08-07
  • 2013-11-13
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
相关资源
最近更新 更多