我终于想出了如何在不提示用户或显示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(); }
Austin Salon.. 13
我成功的唯一方法是动态修改注册表(并将其更改回不影响其他任何内容).
您可以在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循环中.
我成功的唯一方法是动态修改注册表(并将其更改回不影响其他任何内容).
您可以在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循环中.