2009-04-03 6 views
13

J'ai finalement compris how to print transformed XML sans inviter l'utilisateur ou en montrant une fenêtre IE, mais maintenant je dois spécifier un certain nombre de copies et éventuellement d'autres paramètres de l'imprimante.Comment modifier les paramètres de l'imprimante avec le contrôle WebBrowser?

Existe-t-il un moyen de modifier par programme les paramètres de l'imprimante sur un contrôle WebBrowser?

Le code en question:

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

Répondre

12

La seule méthode que j'ai eu du succès avec est la modification du Registre à la volée (et les changer en arrière pour ne pas affecter quoi que ce soit d'autre).

Vous trouverez les paramètres dont vous avez besoin dans «Logiciel \ Microsoft \ Internet Explorer \ PageSetup» sous CurrentUser.

Pour changer l'imprimante, vous pouvez utiliser ceci:

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


En ce qui concerne le nombre de copies, vous pouvez toujours mettre le WebBrowser.Print dans une boucle while.

+0

Tout problème avec cette approche si les utilisateurs sont bloqués vers le bas non-Admins? Quelles clés de registre dois-je définir? –

+0

Tant que l'utilisateur est en mesure de modifier les paramètres dans la boîte de dialogue Mise en page, vous pouvez modifier les paramètres du registre à la volée. Je vais chercher les clés et les mettre dans ma réponse. –

+0

Toute façon de changer le nom de l'imprimante ou le nombre de copies via cette méthode? C'est ce que j'ai vraiment besoin de faire, mais les clés de registre n'ont vraiment que l'en-tête, le pied de page et les marges. Sinon, je vais aller de l'avant et accepter votre réponse et forcer les utilisateurs à choisir leur imprimante sacrément et le nombre de copies. –

2

Vous devez modifier les paramètres du registre via le code pour modifier les paramètres d'Internet Explorer ou du contrôle du navigateur Web. consultez le lien ci-dessous, il décrit comment le faire, également s'il y a plus d'options que vous devez modifier en utilisant le registre, puis utilisez regedit.exe pour trouver ce que d'autres clés internet explorer a.

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

ps: il faut noter que toutes les modifications apportées par votre code pour les paramètres de registre de l'explorateur Internet persisteront sur votre système/compte utilisateur.

+0

Cette page MSDN est atroce. Il n'affiche pas les valeurs réelles de ces clés de registre. Aussi ce qu'il énonce là n'est évidemment pas entièrement vrai. Il y a un moyen de le faire (en partie) sans le changer à l'échelle mondiale: https://support.microsoft.com/fr-fr/kb/267240 – c00000fd

0

Cela a bien fonctionné pour moi, mais je suis sur .NET 3.5

this.webBrowser1.ShowPrintDialog(); 
+2

Ça marchera aussi, mais pour ce dont j'avais besoin Il y a 3 ans, il devait être complètement programmatique, sans interaction de l'utilisateur. La partie amusante était quand j'ai passé des mois à écrire tout le code pour faire l'impression de rapports, alors l'impression décidée plus haut ne devrait pas être permise, juste visionneuse. –

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

Pouvez-vous montrer comment modifier le nombre de copies à imprimer (selon les exigences de l'OP)? –

Questions connexes