2009-04-03 2 views
13

Я, наконец, выяснил how to print transformed XML, не запрашивая пользователя или не показывая окно IE, но теперь мне нужно указать количество копий и, возможно, другие настройки принтера.Как программно изменить настройки принтера с помощью элемента управления WebBrowser?

Есть ли способ программно изменить настройки принтера в элементе управления 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(); 
} 

ответ

12

Единственный метод, который я имел успех с модифицирует реестр на лету (и изменить их обратно ничего не влияет).

Вы можете найти необходимые параметры в разделе «Программное обеспечение \ Microsoft \ Internet Explorer \ PageSetup» в разделе CurrentUser.

Чтобы изменить принтер, вы можете использовать это:

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 в цикле.

+0

Любые проблемы с этим подходом, если пользователи будут заблокированы вниз не-администраторов? Какие ключи реестра мне нужно установить? –

+0

Пока пользователь может изменить настройки в диалоговом окне «Параметры страницы», вы можете редактировать настройки реестра «на лету». Я посмотрю ключи и поставлю их в свой ответ. –

+0

Любой способ изменить имя принтера или количество копий с помощью этого метода? Это то, что мне действительно нужно делать, но ключи реестра только имеют заголовок, нижний колонтитул и поля. Если нет, я пойду дальше и приму ваш ответ и заставит пользователей просто выбрать свой проклятый принтер и количество копий. –

2

Вам необходимо изменить настройки реестра с помощью кода, чтобы изменить настройки для Internet Explorer или элемента управления веб-браузера. ознакомьтесь с приведенной ниже ссылкой, в которой описано, как это сделать, а также, если вам нужно изменить параметры, используя реестр, а затем используйте regedit.exe, чтобы узнать, что другие интернет-браузеры ключей.

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

пс: следует отметить, что любые изменения, внесенные с помощью кода в настройках реестра Internet Explorer, будет сохраняться на вашей учетной записи системы/пользователя.

+0

Эта страница MSDN ужасна. Он не показывает фактические значения для этих ключей реестра. То, что он там говорит, очевидно, не совсем верно. Есть способ сделать (некоторые из них) без изменения его в глобальном масштабе: https://support.microsoft.com/en-us/kb/267240 – c00000fd

0

Это хорошо работало для меня, но я на .NET 3,5

this.webBrowser1.ShowPrintDialog(); 
+2

Это тоже сработает, но для чего мне нужно 3 года назад он должен был быть полностью программным, без взаимодействия с пользователем. Самое смешное было, когда я целый месяц писал весь код для печати отчетов, тогда более высокие версии решили, что печать не должна быть разрешена, просто просматривается. –

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

Можете ли вы показать, как изменить количество копий для печати (в соответствии с требованиями OP)? –

Смежные вопросы