从网站自动打印图像

时间:2009-06-03 16:25:17

标签: web-applications printing

一位同事和我正在讨论浏览器中的内容和内容。

然后出现了一个问题,我们都不能肯定地回答。

您是否可以创建一个网页,当您导航到该网页时,它会启动客户端打印机并尝试打印文档。例如,每当你访问我的个人网站时,你都会被打印出我的照片,微笑着。

现在,这是一个可怕的想法。我意识到。但讨论引起了我的兴趣,如果可以做到,以及如何做到。我的朋友坚持认为,你能做的最好的就是为用户弹出打印对话框,他们必须自己点击打印。

是否可以绕过这一步?或者只是一些花哨的脚本将鼠标移到打印按钮上并单击它?或者使用activeX控件直接与Printer API接口?

9 个答案:

答案 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的代码:

Bypass Printdialog in 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.

它就像魅力一样。