是否可以使用绕过打印对话框的打印选项?
我正在开发一个封闭的系统,希望能够预先定义打印对话框设置;单击按钮后立即处理打印。
从我正在阅读的内容来看,每种浏览器的执行方式各不相同。例如,IE将使用ActiveX。 Chrome / Firefox需要扩展程序。基于此,我似乎必须用C ++编写一个应用程序,它可以处理浏览器传递的参数,并使用适当的格式(对于标签)进行自动打印。然后我将不得不将其重写为Chrome / Firefox的扩展程序。最终结果是我们封闭系统上的用户必须根据他们使用的浏览器下载/安装这些功能。
我希望还有另一种方法可以解决这个问题,但这项任务很可能会违反浏览器安全问题。
答案 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#应用程序。以下是它的工作原理:
这种方法需要用户初始下载,并在第一次启动应用程序时从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应用程序中打印出一些内容而不显示打印对话框。
答案 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);