Как программно изменить настройки принтера с помощью элемента управления WebBrowser?

Я, наконец, понял как печатать преобразованный XML, не запрашивая пользователя или показывая окно IE, но теперь мне нужно указать количество копий и, возможно, другой принтер настройки.

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

Ответы

Ответ 1

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

Вы можете найти нужные параметры в разделе "Программное обеспечение \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 в цикл while.

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Это сработало для меня, однако я на .NET 3.5

this.webBrowser1.ShowPrintDialog();