一位同事和我正在讨论浏览器中的内容和内容。
然后出现了一个问题,我们都不能肯定地回答。
您是否可以创建一个网页,当您导航到该网页时,它会启动客户端打印机并尝试打印文档。例如,每当你访问我的个人网站时,你都会被打印出我的照片,微笑着。
现在,这是一个可怕的想法。我意识到。但讨论引起了我的兴趣,如果可以做到,以及如何做到。我的朋友坚持认为,你能做的最好的就是为用户弹出打印对话框,他们必须自己点击打印。
是否可以绕过这一步?或者只是一些花哨的脚本将鼠标移到打印按钮上并单击它?或者使用activeX控件直接与Printer API接口?
答案 0 :(得分:10)
您必须提示用户打印当前页面,无法绕过此步骤(在ActiveX for IE中可能)。也就是说,有两种不同的方法可以提示用户在页面加载时打印你微笑的图像。
以下是如何在JavaScript中执行此操作。
window.onload = function() {
var img = window.open("me-smiling.png");
img.print();
}
以下是如何在css / javascript / html中执行此操作(假设您的图片具有id
'me-smiling'):
CSS:
@media print {
* {
display:none;
}
img#me-smiling {
display:block;
}
}
使用Javascript:
window.onload = function() { window.print() }
答案 1 :(得分:7)
我发现避免打印对话框的唯一解决方案是在Mozilla Firefox上创建一个变量以设置自动打印。如果你需要使用其他浏览器,也许不是最好的解决方案,但在我的情况下,我只需要自动打印报告并且它可以工作:
1-打开Firefox并在地址栏中输入“about:config”
2-右键单击任何首选项,然后选择“新建”> “布尔”
3-添加一个名为“print.always_print_silent”的变量,其值为“true”
4-重启Firefox。
答案 2 :(得分:4)
AttendStar创建了一个免费的附加组件,可以禁用该对话框并删除大多数Firefox版本的所有页眉和页脚。
https://addons.mozilla.org/en-US/firefox/addon/attendprint/
使用该功能,您可以使用$('img')。jqprint(); jquery的jqprint只打印从Web应用程序自动调用的图像。
答案 3 :(得分:2)
据我所知,如果没有客户端干预,就没有办法直接打印文档,比如设置浏览器标记。 在我们当前的项目中,我们需要直接打印到默认打印机,但至少使用Chrome,您可以使用其他启动参数轻松完成。
要直接打印到OS默认打印机,您可以使用:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --kiosk-printing http://www.contoso.com
另一个可能有用的选项是使用本机打印对话框而不是chromes打印预览。
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --disable-print-preview http://www.contoso.com
请注意,window.print()
和/或Ctrl-P会相应地执行上述设置。
我知道,这并不完全解决OP的问题,但我认为它有些相关,对于基于Web的企业应用程序,这是一个非常常见的用例。也许有人觉得它很有用。
对于Firefox,我建议Seamless Print Addon
答案 4 :(得分:1)
据我所知,您无法绕过打印对话框。如果浏览器允许,这将是一个非常明显的安全漏洞。但您可以使用“window.print()”打开打印对话框。
答案 5 :(得分:1)
我认为最多需要一个使用基本Windows API的ActiveX组件来获取默认打印机的设备上下文,并尝试使用打印机设置的假定值打印嵌入的图像。
答案 6 :(得分:1)
要在不看到打印对话框提示的情况下自动打印到默认打印机,我在以下问题中共享了一些适用于IE7,IE8和IE9的代码:
答案 7 :(得分:0)
从最近几天的搜索, 我找到了最好的解决方案。 截止日期Chrome不支持从javascript直接打印。 它推出了可能有用的USB和串行API。
但目前我正在使用开源的JavaApplet解决方案。 https://github.com/qzind/qz-print - 构建 虽然我在构建它时遇到错误。我更喜欢Prebuilt - QZ Print Plugin 1.9.3 桌面应用程序,效果很好。
从这里下载:https://qz.io/download/
代码示例:
local function starting(event)
if (started == false) then
started = true
end
if (event.phase == "ended") then
start()
startText.isVisible = false
---------------------------------------------------
--THIS BELOW PART IS WRONG-- does not do "started"
if (started) then
count = count + 1
--if started--
if(math.mod(count,20) == 0) then
clicked = 0
if(light >= 0) then
light = light - 1
end
end
完整示例可在此处找到: https://gist.github.com/bkrajendra/c80de17b627e59287f7c
答案 8 :(得分:0)
这是我为firefox找到的最佳解决方案: 有这个很棒的附加组件Seamless Print.
它就像魅力一样。