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

tey*_*non 10 html printing

是否有可能绕过打印对话框的打印选项?

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

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

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

Abh*_*ale 9

我正在为 Firefox 浏览器写这个答案。

  • 打开文件 > 页面设置

  • 将所有页眉和页脚设为空白

  • 将边距设置为 0(零)

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

  • 搜索print.always_print_silent并双击它

  • 将其从 false 更改为 true

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

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

    • 选择新建 > 布尔值

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

    • 单击“确定”

    • 选择 true 作为值

  • 您可能还想检查列出的内容print.print_printer

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


小智 8

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

此子打印有效地取代了默认的打印功能.

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • VBScript不适用于任何其他浏览器,期间.但它是IE的一个很好的解决方案. (2认同)
  • 为了跟进,我最终实现了一个名为jZebra的Java应用程序.此应用程序需要首次安装/安全性批准.https://code.google.com/p/jzebra/ (2认同)

tey*_*non 8

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

  1. 用户点击网站上的"打印".
  2. 网站将用户链接到"CustomURL:// Print/{ID}
  3. 应用程序由Windows通过自定义uri方案启动.
  4. 应用程序与预配置的服务器通信以确认打印请求,在我的情况下获取实际的打印命令.
  5. 然后,应用程序使用C#RawPrinterHelper类将命令直接发送到打印机.

这种方法需要从用户初始下载,并在首次启动应用程序时从Windows获得单个安全提示.我还实现了一些Javascript魔法,以检测是否处理了打印作业.如果不是它要求他们下载应用程序.