WebBrowser控件不会从C#打印

时间:2009-05-18 17:31:53

标签: c# winforms webbrowser-control

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

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

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

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

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

编辑:我的OnDocumentCompleted事件处理程序的最后两行将DialogResult设置为OK并关闭表单。删除对Close()的调用让它打印出来,所以我猜测在表单关闭和WebBrowser控件被处理之前它没有进入打印假脱机程序。

如果没有在关闭之前设置一个等待的任意时间限制,有没有办法告诉它何时完成打印?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

试试这个:

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

FROM EDIT:

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

答案 2 :(得分: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();

}