2009-04-03 4 views
13

W końcu zorientowałem się, how to print transformed XML bez pytania użytkownika lub pokazując okno IE, ale teraz muszę określić liczbę kopii i ewentualnie inne ustawienia drukarki.Jak programowo zmienić ustawienia drukarki za pomocą formantu WebBrowser?

Czy istnieje sposób na programową zmianę ustawień drukarki w formancie WebBrowser?

Kod w pytaniu:

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

Odpowiedz

12

Jedyną metodą miałem sukces modyfikuje rejestr na bieżąco (i zmieniając je z powrotem do nie wpływa czegokolwiek innego).

Możesz znaleźć potrzebne ustawienia w "Software \ Microsoft \ Internet Explorer \ PageSetup" w CurrentUser.

Aby zmienić drukarkę, można użyć to:

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


chodzi o liczbę kopii, zawsze można umieścić WebBrowser.Print w pętli while.

+0

żadnych problemów z tym podejściem, jeśli użytkownicy są zablokowane w dół niebędące Administratorzy? Które klucze rejestru muszę ustawić? –

+0

Dopóki użytkownik może zmienić ustawienia w oknie dialogowym Ustawienia strony, możesz edytować ustawienia rejestru w locie. Sprawdzę klucze i wstawię je do mojej odpowiedzi. –

+0

Jakikolwiek sposób zmienić nazwę drukarki lub liczbę kopii za pomocą tej metody? Tak naprawdę muszę to zrobić, ale klucze rejestru mają tylko nagłówek, stopkę i marginesy. Jeśli nie, przyjmuję dalej i akceptuję twoją odpowiedź, zmuszając użytkowników do wybrania ich przeklętej drukarki i liczby kopii. –

2

Należy zmienić ustawienia rejestru za pomocą kodu, aby zmienić ustawienia przeglądarki Internet Explorer lub formantu przeglądarki. sprawdź poniższy link, który opisuje, jak to zrobić, także jeśli istnieje więcej opcji, które trzeba zmienić przy użyciu rejestru, a następnie użyj regedit.exe, aby znaleźć inne funkcje przeglądarki Internet Explorer.

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

ps: należy pamiętać, że wszelkie zmiany wprowadzone za pośrednictwem kodu do ustawień rejestru Internet Explorer będzie utrzymywać się na koncie użytkownika/systemu.

+0

Ta strona MSDN jest okropna. Nie pokazuje rzeczywistych wartości dla tych kluczy rejestru. Również to, co stwierdza tam ewidentnie, nie jest całkowicie prawdziwe. Jest sposób na zrobienie (niektóre) bez zmiany go w skali globalnej: https://support.microsoft.com/en-us/kb/267240 – c00000fd

0

Ten pracował dobrze dla mnie, ale jestem na .NET 3,5

this.webBrowser1.ShowPrintDialog(); 
+2

To też zadziała, ale na to, czego potrzebowałem 3 lata temu musiała być całkowicie programowa, bez interakcji użytkownika. Najśmieszniejsze było to, że spędziłem miesiące pisząc cały kod, aby wykonać drukowanie raportów, wtedy wyżej zadecydowałem, że drukowanie nie powinno być dozwolone, tylko oglądanie. –

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

Czy możesz pokazać, jak zmienić liczbę kopii do wydrukowania (zgodnie z wymaganiami PO)? –