4

我在 WinForms 应用程序上有一个 WebBrowser 控件,该应用程序正在加载转换为 HTML/CSS 的 XML。如果我只想在那里或在常规浏览器中查看它,看起来很漂亮。

当表单加载时,它应该导航到文件,然后当 OnDocumentCompleted 事件触发时,它应该在注册表中设置页眉、页脚和默认打印机名称,然后为用户指定的多个副本调用 Print()。

我已经通过调试器运行它,它在 OnDocumentCompleted 事件中调用 webBrowser.Print() 的次数正确。没有什么不应该是 null,WebBrowser 控件上的 Visible 是 true,AllowNavigation 也是如此。是的,打印机已打开并可通过网络访问。完全相同的代码在项目的其他地方工作,但在这里不工作。

还有什么可能导致这个地狱般的控件忽略我的打印命令?

理想情况下,我希望将整个内容隐藏在屏幕外,因为这是使用 Windows 调度程序运行的,用户永远不会看到它。不过,我已经读过控件需要可见,所以在我解决第一个问题之前,可以等待。

编辑:我的 OnDocumentCompleted 事件处理程序的最后两行将 DialogResult 设置为 OK 并关闭了表单。删除对 Close() 的调用让它打印,所以我猜它在表单关闭和 WebBrowser 控件被释放之前没有到达打印后台处理程序。

除了设置任意时间限制以在关闭之前等待之外,有什么方法可以判断何时完成打印?

4

3 回答 3

4

原来是时间问题,表单在将文档发送到后台打印程序之前被关闭。我最终在表单中添加了一个 Timer,将其设置为 30 秒,并让它的 Tick() 事件关闭表单。以前关闭表单的地方,现在只调用 closeTimer.Start()。

于 2009-05-18T18:48:22.560 回答
3

试试这个:

mshtml.IHTMLDocument2 doc;
doc = oWeb.Document;        
doc.execCommand("Print", True, Nothing);

从编辑:

可以使用 SHELL 命令检查打印队列中作业的状态

于 2009-05-18T17:35:58.773 回答
0

这是我从字符串中打印 HTML 的最佳方式

void PrintString(string strHTMLText)
{
    WebBrowser wbPrintString = new WebBrowser() { DocumentText = string.Empty };
    wbPrintString.Document.Write(strHTMLText);
    wbPrintString.Document.Title = "Type The Header You Want Here";
    Microsoft.Win32.RegistryKey rgkySetting = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Internet Explorer\\PageSetup", true);
    rgkySetting.SetValue("footer", "Type THe Footer You Want Here");
    rgkySetting.Close();
    wbPrintString.Parent = this;
    wbPrintString.ShowPrintPreviewDialog();
    wbPrintString.Dispose();

}

于 2017-03-11T12:04:01.027 回答