Программное изменение целевого принтера для элемента управления WinForms WebBrowser - PullRequest
5 голосов
/ 09 сентября 2010

Я пытаюсь использовать невидимый элемент управления WebBrowser для печати очень простого HTML-документа. Наше приложение требует, чтобы мы могли печатать несколько документов таким образом, и чтобы все они могли быть отправлены на разные принтеры. К сожалению, мне не очень удалось заставить вывод перейти на нужный принтер.

Способ, которым он работает прямо сейчас, заключается в том, что перед печатью документа приложение определяет, какой принтер должен его получить, и соответственно устанавливает принтер по умолчанию. Для этого он использует SetDefaultPrinter (), импортированный из WinSpool.drv. Если я перешагиваю код в режиме отладки, я ясно вижу, что принтер по умолчанию изменяется (и это изменение отражается в пользовательском интерфейсе панели управления), но веб-браузер все еще настаивает на использовании оригинального принтера по умолчанию.

Документация MSDN, из того, что я видел, на самом деле не предоставляет решения для этого сценария. Я был бы очень признателен за информацию о том, как я могу достичь этого программным путем.

Ответы [ 3 ]

1 голос
/ 09 сентября 2010

Учитывая то, что вы сказали, возможно, если вы перезапустите процесс, который содержит элемент управления веб-браузера (или процесс, который равен элементу управления веб-браузера), после замены принтера по умолчанию?Это, например, , что происходит здесь .


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

Форкинг был Моей первой мыслью о, возможно, наиболее простом решении.

Некоторые другие альтернативы заключаются в следующем.

1).IE, который оборачивается элементом управления веб-браузера, предоставляет API через ActiveX.Один из его / этих API-интерфейсов может позволить вам указать целевой принтер.

2).Некоторые исполняемые файлы (я не знаю о IE) имеют printto записей в реестре.Например, в Acrobat Reader есть запись, значение которой выглядит следующим образом:

""C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe""  /t "%1" "%2" "%3" "%4"

Используется для указания синтаксиса командной строки, который можно использовать для печати и указания принтера (не по умолчанию).Вы также можете использовать Google для printto, см., Например, команду PrintTo в ShellExecute .

3).Я реализовал собственный элемент управления HTML для .NET , который не зависит от IE.Вы говорите, что ваш HTML (и, я полагаю, CSS) прост, поэтому, возможно, я смогу сделать его , либо из коробки, либо с небольшими дополнительными усилиями по разработке.Я не поддерживаю печать, но пользовательский элемент управления довольно легко реализовать.Заставить меня реализовать это для вас обойдется вам в несколько сотен, но, кто знает, может, оно того стоит.Это было бы довольно легкое решение и, возможно, хорошо поддержанное.Вы можете написать мне, если хотите обсудить это далее.

4).Вы также можете найти другие элементы управления, похожие на мои, более или менее известные / дорогие;или другие приложения, например, OpenOffice и т. д.

5).Вы можете подумать о преобразовании HTML (каким-либо образом) в другой формат (например, PDF), для которого у вас есть приложение, которое дает вам лучшую поддержку печати. ​​

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

Это работает в .NET 3.5, если не раньше

this.webBrowser1.ShowPrintDialog();
0 голосов
/ 09 сентября 2010

У меня была точно такая же проблема, и я включил этот элемент управления вместо стандартного .NET WebBrowser, чтобы обойти его.

...