HTML / Javascript一键打印(无对话框)

时间:2012-02-09 15:26:15

标签: html web printing

是否可以使用绕过打印对话框的打印选项?

我正在开发一个封闭的系统,希望能够预先定义打印对话框设置;单击按钮后立即处理打印。

从我正在阅读的内容来看,每种浏览器的执行方式各不相同。例如,IE将使用ActiveX。 Chrome / Firefox需要扩展程序。基于此,我似乎必须用C ++编写一个应用程序,它可以处理浏览器传递的参数,并使用适当的格式(对于标签)进行自动打印。然后我将不得不将其重写为Chrome / Firefox的扩展程序。最终结果是我们封闭系统上的用户必须根据他们使用的浏览器下载/安装这些功能。

我希望还有另一种方法可以解决这个问题,但这项任务很可能会违反浏览器安全问题。

6 个答案:

答案 0 :(得分:8)

我知道这是一个迟到的回复,但这是我正在使用的解决方案。我只在IE上使用它,并没有使用任何其他浏览器进行测试。

此Sub Print打击有效地取代了默认打印功能。

<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>

然后使用Javascript的window.print();绑定到超链接或按钮以执行打印命令。

如果您想在页面加载时自动打印,请将代码放在标签附近。

<script type="text/javascript"> 
window.onload=function(){self.print();} 
</script> 

答案 1 :(得分:7)

我最终实现了一个与Nexus Mod Manager非常相似的自定义应用程序。我写了一个注册自定义Application URI Scheme的C#应用​​程序。以下是它的工作原理:

  1. 用户点击网站上的“打印”。
  2. 网站将用户链接到“CustomURL:// Print / {ID}
  3. 应用程序由Windows通过自定义uri方案启动。
  4. 应用程序与预先配置的服务器通信以确认打印请求,在我的情况下获取实际的打印命令。
  5. 然后,应用程序使用C# RawPrinterHelper类将命令直接发送到打印机。
  6. 这种方法需要用户初始下载,并在第一次启动应用程序时从Windows获得单个安全提示。我还实现了一些Javascript魔法,以检测是否处理了打印作业。如果不是,则要求他们下载该应用程序。

答案 2 :(得分:3)

一般的答案是:不是你不能在一般情况下这样做,但在某些情况下你可能会这样做。 校验 http://justtalkaboutweb.com/2008/05/09/javascript-print-bypass-printer-dialog-in-ie-and-firefox/

如果您无论如何都允许这样做,这将是一个安全问题,因为恶意软件脚本可能会默默地将打印作业发送给访问者的打印机。

答案 3 :(得分:3)

我找到了Firefox的一个很棒的插件来解决这个问题。尝试使用firefox的seamless printing插件,该插件将从Web应用程序中打印出一些内容而不显示打印对话框。

  1. 打开Firefox
  2. 搜索插件名无缝打印并安装
  3. 成功安装后,当用户想要打印任何内容时,将绕过打印窗口。

答案 4 :(得分:0)

我正在为Firefox浏览器编写此答案。

  • 打开文件>页面设置

  • 将所有页眉和页脚留空

  • 将页边距设置为0(零)

  • 在Firefox的地址栏中,输入about:config

  • 搜索print.always_print_silent并双击它

  • 将其从false更改为true

    • 这使您可以跳过出现的“打印”弹出框,以及跳过必须单击“确定”的步骤,从而自动打印正确尺寸的单据。
  • 如果print.always_print_silent没有出现

    • 右键单击首选项窗口的空白区域

    • 选择新的>布尔值

    • 输入“ print.always_print_silent”作为名称(不带引号)

    • 单击“确定”

    • 为值选择true

  • 您可能还想查看列出的print.print_printer

    • 您可能必须选择“通用/纯文本”(或您的收据打印机的任何名称)

答案 5 :(得分:0)

我可以使用以下库解决问题:html2pdf.js(https://github.com/eKoopmans/html2pdf.js

考虑到您可以访问它,您可以执行类似的操作(取自github存储库):

var element = document.getElementById('element-to-print'); 
html2pdf(element);