18

我终于想出了如何在不提示用户或不显示 IE 窗口的情况下打印转换后的 XML,但现在我需要指定副本数量以及可能的其他打印机设置。

有没有办法以编程方式更改 WebBrowser 控件上的打印机设置?

有问题的代码:

private static void PrintReport(string reportFilename)
{
    WebBrowser browser = new WebBrowser();

    browser.DocumentCompleted += browser_DocumentCompleted;

    browser.Navigate(reportFilename);
}

private static void browser_DocumentCompleted
    (object sender, WebBrowserDocumentCompletedEventArgs e)
{
    WebBrowser browser = sender as WebBrowser;

    if (null == browser)
    {
        return;
    }

    browser.Print();

    browser.Dispose();
}
4

4 回答 4

16

我成功的唯一方法是即时修改注册表(并将它们改回不影响其他任何东西)。

您可以在 CurrentUser 下的“Software\Microsoft\Internet Explorer\PageSetup”中找到所需的设置。

要更改打印机,您可以使用以下命令:

using System.Management

public static bool SetDefaultPrinter(string defaultPrinter)
{
    using (ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer"))
    {
        using (ManagementObjectCollection objectCollection = objectSearcher.Get())
        {
            foreach (ManagementObject mo in objectCollection)
            {
                if (string.Compare(mo["Name"].ToString(), defaultPrinter, true) == 0)
                {
                    mo.InvokeMethod("SetDefaultPrinter", null, null);
                    return true;
                }
            }
        }
    }
    return false;
}


至于份数,您可以随时将 WebBrowser.Print 放在 while 循环中。

于 2009-04-03T15:52:22.470 回答
5
            string strKey = "Software\\Microsoft\\Internet Explorer\\PageSetup";
        bool bolWritable = true;

        RegistryKey oKey = Registry.CurrentUser.OpenSubKey(strKey, bolWritable);
        Console.Write(strKey);

        if (stringToPrint.Contains("Nalog%20za%20sluzbeno%20putovanje_files"))
        {
            oKey.SetValue("margin_bottom", 15);
            oKey.SetValue("margin_top", 0.19);
        }
        else
        {
            //Return onld walue
            oKey.SetValue("margin_bottom", 0.75);
            oKey.SetValue("margin_top", 0.75);
        }
于 2013-04-10T23:23:58.623 回答
2

您需要通过代码更改注册表设置以更改 Internet Explorer 或 Web 浏览器控件的设置。查看下面的链接,它描述了如何执行此操作,如果您需要使用注册表更改更多选项,则使用 regedit.exe 查找 Internet Explorer 的其他键。

http://support.microsoft.com/kb/236777

ps:您应该注意,您通过代码对 Internet Explorer 的注册表设置所做的任何更改都将保留在您的系统/用户帐户中。

于 2009-11-29T15:37:52.163 回答
0

这对我来说效果很好,但是我使用的是 .NET 3.5

this.webBrowser1.ShowPrintDialog();
于 2012-12-04T19:27:43.877 回答