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

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

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

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

鉴于您所说的,也许您重新启动包含Web浏览器控件(或Web浏览器控件的进程)的进程后,更改默认打印机后? 这就是我在这里看到的那种事情 ,例如。


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

分叉我第一次想到一个可能最简单的解决方案。

其他一些替代方案如下。

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 ,例如参见ShellExecute中的PrintTo命令 。

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

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

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

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

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

 this.webBrowser1.ShowPrintDialog();