Come modifico in modo programmatico le impostazioni della stampante con il controllo WebBrowser?

Alla fine ho capito come stampare XML trasformato senza chiedere all’utente o mostrare una finestra di IE, ma ora ho bisogno di specificare un numero di copie e possibilmente altre impostazioni della stampante.

C’è un modo per modificare in modo programmatico le impostazioni della stampante su un controllo WebBrowser?

Il codice in questione:

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

L’unico metodo con cui ho avuto successo è modificare il registro al volo (e cambiarli di nuovo per non influenzare nient’altro).

È ansible trovare le impostazioni necessarie in “Software \ Microsoft \ Internet Explorer \ PageSetup” in CurrentUser.

Per cambiare la stampante, puoi usare questo:

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

Per quanto riguarda il numero di copie, puoi sempre mettere WebBrowser.Print in un ciclo while.

è necessario modificare le impostazioni del Registro di sistema tramite codice per modificare le impostazioni per Internet Explorer o il controllo del browser web. controlla il link qui sotto, descrive come farlo, anche se ci sono più opzioni che devi modificare usando il registro, quindi usa regedit.exe per trovare le altre chiavi di Internet Explorer.

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

ps: dovresti notare che tutte le modifiche apportate tramite il tuo codice alle impostazioni del registro di internet explorer permarranno sul tuo sistema / account utente.

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

Questo ha funzionato bene per me, tuttavia sono su .NET 3.5

 this.webBrowser1.ShowPrintDialog();