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

Я наконец понял , как печатать преобразованный 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();
}

Ответы [ 4 ]

13 голосов
/ 03 апреля 2009

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

Необходимые настройки можно найти в «Software \ 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 голосов
/ 11 апреля 2013
            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);
        }
2 голосов
/ 29 ноября 2009

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

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

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

0 голосов
/ 04 декабря 2012

Это хорошо сработало для меня, однако я нахожусь на .NET 3.5

this.webBrowser1.ShowPrintDialog();
...