以编程方式更改WinForms WebBrowser控件的目标打印机

时间:2010-09-09 09:42:44

标签: c# winforms printing webbrowser-control

我正在尝试使用不可见的WebBrowser控件来打印非常简单的HTML文档。我们的应用程序要求我们能够以这种方式打印多个文档,并且它们都可以发送到不同的打印机。不幸的是,我没有非常成功地使输出到正确的打印机。

现在它的工作方式是在打印文档之前,应用程序确定要接收哪个打印机,并相应地设置默认打印机。为此,它使用从WinSpool.drv导入的SetDefaultPrinter()。如果我在调试模式下执行代码,我可以清楚地看到默认打印机更改(并且此更改反映在控制面板UI中),但WebBrowser仍然坚持使用原始默认打印机。

从我看到的MSDN文档中,并没有真正为这种情况提供解决方案。我非常感谢有关如何以编程方式完成此操作的一些输入。

3 个答案:

答案 0 :(得分:1)

根据您的说法,也许您重新启动包含Web浏览器控件的进程(或 Web浏览器控件的进程)后,更改默认打印机后?例如,那是the kind of thing I see happening here


  

我想可以分出一个执行实际打印的后台进程,但我真的希望有一个更简单的解决方案。

分叉 是我对可能最简单的解决方案的首次考虑。

其他一些替代方案如下。

1)。 Web浏览器控件正在包装的IE通过ActiveX公开API。其中一个API可能允许您指定目标打印机。

2)。一些可执行文件(我不知道IE)在注册表中有printto个条目。例如,Acrobat Reader有一个条目,其值如下:

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

用于指定命令行的语法,您可以使用该语法打印并指定(非默认)打印机。您也可以使用Google printto,例如PrintTo command in the ShellExecute

3)。我已经实现了自己的HTML control for .NET,这不依赖于IE。你说你的HTML(和我认为的CSS)很简单,所以也许I can render it,开箱即用或者只需要一些额外的开发工作。我不支持打印,但打印很容易让用户控件实现。让我为你实现这个将花费你几百,但谁知道,也许它是值得的。这将是一个非常轻量级的解决方案,并且可能得到很好的支持。如果你想进一步讨论,你可以给我发电子邮件。

4)。您可能还会发现其他类似于我的控件,或多或少知名/昂贵;或其他应用,例如OpenOffice等等。

5)。您可以考虑将HTML(某种程度上)转换为另一种格式(例如PDF),您可以使用该应用程序为打印提供更好的支持。

答案 1 :(得分:0)

我遇到了完全相同的问题,并使用this control而不是标准的.NET WebBrowser来解决它。

答案 2 :(得分:-1)

这适用于.NET 3.5,如果不是之前的话

this.webBrowser1.ShowPrintDialog();