我正在尝试使用不可见的WebBrowser控件来打印非常简单的HTML文档。我们的应用程序要求我们能够以这种方式打印多个文档,并且它们都可以发送到不同的打印机。不幸的是,我没有非常成功地使输出到正确的打印机。
现在它的工作方式是在打印文档之前,应用程序确定要接收哪个打印机,并相应地设置默认打印机。为此,它使用从WinSpool.drv导入的SetDefaultPrinter()。如果我在调试模式下执行代码,我可以清楚地看到默认打印机更改(并且此更改反映在控制面板UI中),但WebBrowser仍然坚持使用原始默认打印机。
从我看到的MSDN文档中,并没有真正为这种情况提供解决方案。我非常感谢有关如何以编程方式完成此操作的一些输入。
答案 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();