【问题标题】:Print directly from browser without print popup window [duplicate]直接从浏览器打印而没有打印弹出窗口[重复]
【发布时间】:2010-11-08 23:20:04
【问题描述】:

正如主题中所说,我要为基于 Web 的应用程序创建一个功能,该功能将允许用户直接发送打印而不提示任何对话框,只需进行打印,即单击并打印,简单!但不适合我:(。

请提出最佳选择以及我应该如何编写(技术)。

请推荐!

谢谢。

编辑:打印件应在用户的默认打印机上发送。

【问题讨论】:

  • 我已经预先假设通过制作一个activeX控件可以为IE提供这样的选项。但是不记得这也可以通过vbscript来完成。很幸运,发现了这个:msdn.microsoft.com/en-us/library/ms976105.aspx 我还没有尝试过,但这给了我一个有用的提醒,看起来这可以让我免于从 activeX 弄脏我的手
  • 我知道这个帖子太老了。但也许有人试图找出答案,请检查:github.com/apinprastya/pulas
  • 这里有一些其他的浏览器打印解决方案:stackoverflow.com/a/28783269/3196753
  • 到chrome浏览器可以这样操作:<script> $(() => { //That's it's a little workaround to print a page. The user must so press Enter to print, after this the dialog window close "automatically" window.print(); setTimeout(function(){ window.top.close(); }, 3000); }); </script>

标签: browser printing activex client-side


【解决方案1】:

我找不到其他解决方案 浏览器。当我发布这个问题时,IE 在 更高的优先级,很高兴我发现 一个。如果你有解决方案 对于其他浏览器(firefox、safari、opera),请在此处分享。 谢谢。

VBSCRIPT 比在 VB6 或 C#/VB.NET 上创建 ActiveX 方便得多:

<script language='VBScript'>
Sub Print()
       OLECMDID_PRINT = 6
       OLECMDEXECOPT_DONTPROMPTUSER = 2
       OLECMDEXECOPT_PROMPTUSER = 1
       call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1)
End Sub
document.write "<object ID='WB' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>"
</script>

现在,打电话:

<a href="javascript:window.print();">Print</a>

将发送打印而不弹出打印窗口。

【讨论】:

  • 我尝试在 Javascript 中实现完全相同的代码,但没有成功。仅在 VBScript 中。为什么它在 VBScript 中有效,而在 Javascript 中无效?
  • @Jordao 我认为上面的配置变量只是vbscript的成员。在这里,在上面的脚本中,我们主要做的是重置配置变量。这只是你的问题的本能想法。
  • 您引用的变量只是常量。它们在 Javascript 中的工作方式应该相同。
  • 有没有办法用这种方法在 iframe 中打印页面?
  • 这还能用吗?我试了一下,收到了提示。
【解决方案2】:

AttendStar 创建了一个免费插件,它可以抑制打印对话框并删除大多数 Firefox 版本的所有页眉和页脚。

https://addons.mozilla.org/en-US/firefox/addon/attendprint/

有了这个功能,你可以使用 $('img').jqprint();而 jquery 的 jqprint 只会打印从您的 Web 应用程序自动调用的图像。

【讨论】:

    【解决方案3】:

    IE9 不再支持像 IE7 和 IE8 那样通过调用 window.print() 来触发 Print() VBScript,因此 window.print() 现在将始终触发 IE9 中的打印对话框。

    修复非常简单。您只需要调用 Print() 本身,而不是 onclick 事件中的 window.print() 。

    我在另一个问题的回答中更详细地描述了该修复程序,其中包含一个工作代码示例,其中包含略微更新的 HTML 语法(尽可能多地作为工作代码进行测试)。

    您可以在此处找到该示例代码:

    Bypass Printdialog in IE9

    【讨论】:

      【解决方案4】:

      我不相信这是可能的。显示的对话框允许用户选择要打印的打印机。因此,假设您的应用程序可能只需单击并打印,用户单击您的打印按钮,但有两台打印机连接到计算机。或者,更有可能的是,该用户正在拥有 25 台打印机的办公楼中工作。如果没有该对话框,计算机如何知道要打印到哪台打印机?

      【讨论】:

      • IE 的 ActiveX 控件如何在用户的默认打印机上发送打印。这看起来很可行。但是,花费数小时的时间来创建这样一个 activeX 并没有理由只为 IE 用户提供功能。
      • Zachary,上面的脚本在默认打印机机器上发送一个打印命令,没有显示任何弹出窗口。但这仅适用于 IE。我希望这能回答我们的疑问:)
      • 哦,哇,我什至没想过要使用 VBScript。干得好,拉米兹。如果您只使用 IE,那么您已经完全设置好了:D
      • 谢谢。搜索仍在进行,因为浏览器列表很长,并且需要全部完成。但是,IE 的优先级更高,所以有点放松。
      【解决方案5】:

      this.print(false);

      我在 Chrome、Firefox 和 IE 中试过这个。它仅在 Firefox 和 IE 中有效,它使用默认打印机(具有默认打印设置)并且仅在我渲染 PDF 时有效(我使用禁用安全阅读模式的福昕阅读器)。当我呈现 HTML 页面时,Chrome 会显示打印对话框,以及其他浏览器。

      【讨论】:

        【解决方案6】:

        对于 IE 浏览器,“VBScript 解决方案”有效。

        但正如@purefusion 在Bypass Printdialog in IE9 所提到的,使用 Print() 而不是 window.print()

        【讨论】:

          【解决方案7】:

          这应该可行,我自己尝试过,它对我有用。如果您传递 True 而不是 false,则会出现打印对话框。

          this.print(false);
          

          【讨论】:

          • 在带有布尔参数的 java 脚本中没有可用的 print() 方法。
          • 即使您可以这样做,出于专有原因,我也不会实施。除非它是特定人群在工作中使用的特定应用程序。即使,想象一下如果我的打印机只是通过访问一个页面来自动打印,而没有确认我想要打印的内容。 1. 我认为可能存在病毒,因为我什至没有被问到是否要打印。 2. 我会在人们的机器上浪费无数纸张。如果他们只想要 15 页报告中的 1 页怎么办。结束 LESSION:不通过打印协议就不能进行打印。
          猜你喜欢
          • 1970-01-01
          • 2015-05-05
          • 1970-01-01
          • 1970-01-01
          • 2014-06-23
          • 1970-01-01
          • 2021-06-26
          • 1970-01-01
          相关资源
          最近更新 更多