代码之家  ›  专栏  ›  技术社区  ›  DevinB

自动从网站打印图像

  •  13
  • DevinB  · 技术社区  · 15 年前

    我和一个同事正在讨论什么是浏览器中不可能的。

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

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

    现在,这是一个可怕的想法。我知道。但这场讨论让我很好奇,是否能做到,以及如何做到。我的朋友坚持说,你能做的最好的是弹出打印对话框给用户,他们将不得不点击打印自己。

    是否可以绕过此步骤?或者只是一些花哨的脚本,把鼠标移到打印按钮上,然后点击它?或者使用ActiveX控件直接与打印机API接口?

    9 回复  |  直到 7 年前
        1
  •  10
  •   TJ L    15 年前

    您必须提示用户打印当前页,无法跳过此步骤。( 可能地 在IE的ActiveX中)。也就是说,有两种不同的方法可以提示用户在加载页面时打印微笑的图像。

    下面是如何在JavaScript中实现这一点。

    window.onload = function() {
      var img = window.open("me-smiling.png");
      img.print();
    }
    

    下面是如何在css/javascript/html中执行此操作(假设您的图片具有 id “我微笑”: CSS:

    @media print {
       * {
         display:none;
       }
       img#me-smiling {
         display:block;
       }
    }
    

    Javascript:

     window.onload = function() { window.print() }
    
        2
  •  7
  •   hobbito    10 年前

    我找到的唯一避免打印对话框的解决方案是在Mozilla Firefox上创建一个变量来设置自动打印。如果您需要使用其他浏览器,可能不是最佳解决方案,但在我的情况下,我只需要自动打印报告,它可以工作:

    1-打开火狐并在地址栏中键入“about:config”
    2-右键单击任何首选项并选择“新建”>“布尔值”
    3-添加一个名为“print.always”的变量,该变量的值为“true”。
    4-重启火狐。

    希望对你有帮助!

        3
  •  4
  •   Jon    13 年前

    attendstar创建了一个免费的附加组件,它可以抑制对话框,并删除大多数版本的firefox的所有页眉和页脚。

    https://addons.mozilla.org/en-US/firefox/addon/attendprint/

    使用该功能,您可以使用$('img').jqprint();jquery的jqprint将只打印从Web应用程序自动调用的图像。

        4
  •  2
  •   Oliver Hager    9 年前

    据我所知,没有客户机的干预,比如设置浏览器标志,就无法直接打印文档。 在我们当前的项目中,我们需要直接打印到默认打印机,但至少在chrome中,您可以通过附加的启动参数轻松地进行打印。

    要直接打印到操作系统默认打印机,可以使用:

    "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会相应地执行上述设置。

    我知道,这并不能完全回答操作问题,但我认为它有些关联,对于基于Web的企业应用程序,这是一个非常常见的用例。也许有人觉得它有用。

    对于Firefox,我推荐 Seamless Print Addon

        5
  •  1
  •   Rob H    15 年前

    据我所知,您不能绕过打印对话框。如果浏览器允许的话,这将是一个非常明显的安全缺陷。但您可以使用“window.print()”打开打印对话框。

        6
  •  1
  •   ChrisBD    15 年前

    我认为您最多需要一个使用基本Windows API的ActiveX组件来获取默认打印机的设备上下文,并尝试使用打印机设置的假定值打印嵌入图像。

        7
  •  1
  •   Community kfsone    7 年前

    要自动打印到默认打印机而不看到打印对话框提示,我在以下问题中共享了一些适用于IE7、IE8和IE9的代码:

    Bypass Printdialog in IE9

        8
  •  0
  •   Rajendra    9 年前

    从最近几天的大量搜索中, 我找到了一个最好的解决办法。 截止日期chrome不支持直接从javascript打印。 它已经启动了USB和串行API,这可能会有所帮助。

    但目前我使用的是开源的JavaApplet解决方案。 https://github.com/qzind/qz-print -建造 当我在构建它时出错。我喜欢预建的-QZ打印插件1.9.3 桌面应用程序,很好用。

    从这里下载: https://qz.io/download/

    代码示例:

    /***************************************************************************
     * Prototype function for printing an HTML screenshot of the existing page
     * Usage: (identical to appendImage(), but uses html2canvas for png rendering)
     *    qz.setPaperSize("8.5in", "11.0in");  // US Letter
     *    qz.setAutoSize(true);
     *    qz.appendImage($("canvas")[0].toDataURL('image/png'));
     ***************************************************************************/
    function printHTML5Page() {
        $("#qz-status").html2canvas({
            canvas: hidden_screenshot,
            onrendered: function() {
                if (notReady()) { return; }
                // Optional, set up custom page size.  These only work for PostScript printing.
                // setPaperSize() must be called before setAutoSize(), setOrientation(), etc.
                qz.setPaperSize("8.5in", "11.0in");  // US Letter
                qz.setAutoSize(true);
                qz.appendImage($("canvas")[0].toDataURL('image/png'));
    
                //qz.setCopies(3);
                qz.setCopies(parseInt(document.getElementById("copies").value));
    
                // Automatically gets called when "qz.appendFile()" is finished.
                window['qzDoneAppending'] = function() {
                    // Tell the applet to print.
                    qz.printPS();
    
                    // Remove reference to this function
                    window['qzDoneAppending'] = null;
                };
            }
        });
    }
    

    完整示例如下: https://gist.github.com/bkrajendra/c80de17b627e59287f7c

        9
  •  0
  •   Josiah    7 年前

    这是我为火狐找到的最佳解决方案: 有这个很棒的附加组件 Seamless Print.

    它的作用就像魅力。