【问题标题】:Programmatically changing the destination printer for a WinForms WebBrowser control以编程方式更改 WinForms WebBrowser 控件的目标打印机
【发布时间】:2011-04-10 04:18:21
【问题描述】:

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

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

据我所见,MSDN 文档并没有真正为这种情况提供解决方案。对于如何以编程方式完成此任务,我将不胜感激。

【问题讨论】:

  • 出于好奇:您接受了我的回答,但我提出了大约 6 条不同的建议。您选择了哪种解决方案:哪一种适合您?
  • @ChrisW:很抱歉不清楚这一点。使用 ActiveX API 最终解决了这个问题。基本上,我抓取 WebBrowser.ActiveXInstance 对象,为 PrintTemplateTeardown 事件注册一个处理程序,并在考虑打印页面之前等待它发生。有趣的是,这解决了我们使用托管 WebBrowser 包装控件时遇到的所有打印目标问题。谢谢你的建议!

标签: c# winforms printing webbrowser-control


【解决方案1】:

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


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

分叉我首先想到的可能是最简单的解决方案。

其他一些替代方案如下。

1)。 Webbrowser 控件正在包装的 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),您有一个应用程序可以为您提供更好的打印支持。

【讨论】:

  • 不幸的是,有问题的应用程序是一个关键业务服务器,每次需要打印文档时都不允许重新启动。我想有可能分叉一个执行实际打印的后台进程,但我真的希望有一个更简单的解决方案。
  • @Martin Törnwall - 我在答案中添加了其他潜在的解决方案。
  • 也许这篇文章可能有用:stackoverflow.com/questions/714507/…
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    this.webBrowser1.ShowPrintDialog();
    

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2010-09-14
      • 2011-02-22
      相关资源
      最近更新 更多