Элемент управления WebBrowser не будет печатать из C # - PullRequest
4 голосов
/ 18 мая 2009

У меня есть элемент управления WebBrowser в приложении WinForms, которое загружает XML, который преобразуется в HTML / CSS. Выглядит красиво, если я просто хочу посмотреть его там или в обычном браузере.

Когда форма загружается, она должна перейти к файлу, затем при возникновении события OnDocumentCompleted должна установить заголовок, нижний колонтитул и имя принтера по умолчанию в реестре, а затем вызвать Print () для любого количества копий пользователя. указал.

Я запустил его через отладчик, и он вызывает webBrowser.Print () правильное количество раз в событии OnDocumentCompleted. Ничто не является нулем, которого не должно быть, Visible - истина в элементе управления WebBrowser, как и AllowNavigation. И да, принтер включен и доступен по сети. Точно такой же код работает в других местах проекта, но не здесь.

Что еще может быть причиной того, что этот адский элемент управления игнорирует мои команды печати?

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

EDIT : последние две строки моего обработчика события OnDocumentCompleted установили для DialogResult значение ОК и закрыли форму. Удаление вызова метода Close () позволило ему распечатать, так что я предполагаю, что он не дошел до диспетчера очереди печати до закрытия формы и удаления элемента управления WebBrowser.

Если не считать установки произвольного лимита времени для ожидания перед закрытием, есть ли способ узнать, когда он завершит печать?

Ответы [ 3 ]

4 голосов
/ 18 мая 2009

Оказалось, что возникла проблема с синхронизацией, поскольку форма закрывалась до того, как она смогла отправить документ в диспетчер очереди печати. Я закончил тем, что добавил в форму таймер, установил его на 30 секунд, а событие Tick () закрыло форму. Там, где он закрывал форму ранее, теперь он просто вызывает closeTimer.Start ().

3 голосов
/ 18 мая 2009

Попробуйте это:

mshtml.IHTMLDocument2 doc;
doc = oWeb.Document;        
doc.execCommand("Print", True, Nothing);

ОТ РЕДАКТИРОВАНИЯ:

Можно использовать команды SHELL для проверки состояния заданий в очереди на печать

0 голосов
/ 11 марта 2017

Это лучший способ напечатать HTML из строки

void PrintString(string strHTMLText)
{
    WebBrowser wbPrintString = new WebBrowser() { DocumentText = string.Empty };
    wbPrintString.Document.Write(strHTMLText);
    wbPrintString.Document.Title = "Type The Header You Want Here";
    Microsoft.Win32.RegistryKey rgkySetting = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Internet Explorer\\PageSetup", true);
    rgkySetting.SetValue("footer", "Type THe Footer You Want Here");
    rgkySetting.Close();
    wbPrintString.Parent = this;
    wbPrintString.ShowPrintPreviewDialog();
    wbPrintString.Dispose();

}

...