Web浏览器,等到打印完毕

时间:2014-03-25 11:39:45

标签: c# .net printing webbrowser-control

我正在使用C#中的WebBrowser控件。我在表单中使用WebBrowser,并在此WebBrowser中插入一些HTML和CSS。效果很好。

我想直接从这个WebBrowser打印并检查打印状态。如果完成,应用程序将自动关闭。我搜索了类似的内容:WebBrowser.Print() wait until complete. .NET

它可以工作,但是当我处于调试模式时,我的代码永远不会经历“DocumentCompleted”事件。所以我尝试在表单的Shown事件中打印。这是代码:

using System.Reflection;
using System.Threading;
using SHDocVw;

private void PrintFacture_Load(object sender, EventArgs e)
{
    string content = "Some HTML+CSS";
    webBrowser1.Navigate("about:blank");
    if (webBrowser1.Document != null)
    {
        webBrowser1.Document.Write(string.Empty);
    }
    webBrowser1.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0);
    webBrowser1.Document.Write(content);
}

private void PrintFacture_Shown(object sender, EventArgs e)
{
    string keyName = @"Software\Microsoft\Internet Explorer\PageSetup";
    using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true))
    {
        if (key != null)
        {
            string old_footer = key.GetValue("footer").ToString();
            string old_header = key.GetValue("header").ToString();
            key.SetValue("footer", "");
            key.SetValue("header", "");

            var wbax = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
            wbax.PrintTemplateTeardown += new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(PrintDone);  
            webBrowser1.Print();

            key.SetValue("footer", old_footer);
            key.SetValue("header", old_header);
        }
    }
}

private void PrintDone(object sender)
{
    var wbax = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
    wbax.PrintTemplateTeardown -= new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(PrintDone);
    Application.Exit();
}

我的问题是为什么我的代码从未收到过WebBrowser事件“DocumentCompleted”?

有没有更好的解决方案呢?我认为在表格中展示的事件不是最好的主意。有什么好主意吗?

0 个答案:

没有答案