如何使用WebBrowser控件以编程方式更改打印机设置?

我终于想出了如何在不提示用户或显示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(); } 

我成功的唯一方法是动态修改注册表(并将其更改为不影响其他任何内容)。

您可以在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循环中。

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

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

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

  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); } 

这对我很有用,但我在.NET 3.5上

 this.webBrowser1.ShowPrintDialog();