2009-04-03 9 views
13

Ho finalmente trovato how to print transformed XML 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.Come posso modificare in modo programmatico le impostazioni della stampante con il controllo WebBrowser?

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

risposta

12

L'unico metodo che ho avuto successo con è come modificare il Registro al volo (e cambiarle di nuovo a non pregiudica qualsiasi altra cosa).

È possibile trovare le impostazioni necessarie in "Software \ Microsoft \ Internet Explorer \ PageSetup" in CurrentUser.

Per cambiare la stampante, è possibile utilizzare 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, si può sempre mettere la WebBrowser.Print in un ciclo while.

+0

Qualsiasi problema con questo approccio se gli utenti sono bloccati in giù non-amministratori? Quali chiavi di registro devo impostare? –

+0

Fintanto che l'utente è in grado di modificare le impostazioni nella finestra di dialogo Imposta pagina, è possibile modificare al volo le impostazioni del registro. Cercherò le chiavi e le inserirò nella mia risposta. –

+0

Un modo per modificare il nome o il numero di copie della stampante tramite tale metodo? Questo è quello che devo davvero fare, ma le chiavi di registro hanno solo intestazione, piè di pagina e margini. In caso contrario, vado avanti e accetto la tua risposta e costringo gli utenti a scegliere solo la loro dannata stampante e il numero di copie. –

2

è 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: si dovrebbe notare che tutte le modifiche apportate tramite il codice per le impostazioni del Registro Internet explorer di persisteranno sul vostro account di sistema/utente.

+0

Questa pagina MSDN è atroce. Non mostra i valori effettivi per quelle chiavi di registro. Inoltre, ciò che afferma chiaramente non è del tutto vero. C'è un modo per farlo (alcuni) senza cambiarlo sulla scala globale: https://support.microsoft.com/en-us/kb/267240 – c00000fd

0

questo ha funzionato bene per me, ma io sono sul .NET 3,5

this.webBrowser1.ShowPrintDialog(); 
+2

Anche questo funzionerà, ma per quello di cui avevo bisogno 3 anni fa, doveva essere completamente programmatico, senza interazione dell'utente. La parte divertente è stata quando ho passato mesi a scrivere tutto il codice per fare la stampa di report, quindi i rialzi non dovevano consentire la stampa, solo la visualizzazione. –

2
  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); 
     } 
+0

Puoi mostrare come modificare il numero di copie da stampare (secondo i requisiti dell'OP)? –

Problemi correlati