代码之家  ›  专栏  ›  技术社区  ›  Chris Doggett

WebBrowser控件无法从C打印#

  •  4
  • Chris Doggett  · 技术社区  · 17 年前

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

    当窗体加载时,它应该导航到该文件,然后当OnDocumentCompleted事件激发时,它应该在注册表中设置页眉、页脚和默认打印机名称,然后调用print()以获取用户指定的任意多个副本。

    我已经通过调试器运行了它,它正在调用WebBrowser.print()OnDocumentCompleted事件中的正确次数。没有不应该是空的,在WebBrowser控件上可见是真的,allowNavigation也是。是的,打印机已打开,可以通过网络访问。完全相同的代码在项目的其他地方也适用,但在这里不适用。

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

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

    编辑 :我的OnDocumentCompleted事件处理程序的最后两行将DialogResult设置为“确定”,然后关闭窗体。删除close()的调用让它打印,所以我猜在关闭窗体并释放WebBrowser控件之前,它没有到达打印后台处理程序。

    除了设置关闭前等待的任意时间限制外,还有什么方法可以告诉您何时完成打印?

    3 回复  |  直到 9 年前
        1
  •  4
  •   Chris Doggett    17 年前

    结果是一个时间问题,表格在发送到后台打印程序之前被关闭。最后我在表单中添加了一个计时器,将其设置为30秒,并让它的tick()事件关闭表单。以前关闭窗体的地方,现在只调用closeTimer.start()。

        2
  •  3
  •   Stephen Wrighton    17 年前

    试试这个:

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

    从编辑:

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

        3
  •  -1
  •   Wael Galal El Deen    9 年前

    这是从字符串打印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();
    

    }