【问题标题】:Print sticker/barcode label directly from browser on a (zebra) printer直接从(斑马)打印机上的浏览器打印贴纸/条形码标签
【发布时间】:2013-02-01 07:51:25
【问题描述】:

我们必须遵循以下情况,我们正在为我们的一位客户寻找解决方案。 他构建了一个 PHP 脚本,该脚本生成一个带有一些信息和条形码的标签,因此工作流程如下所述:用户输入一些数据(有些是从数据库中提取的数据,有些不是)

当用户点击打印标签时,会打开一个窗口并生成标签。所以现在代码(我猜javascript可以完成这项工作)必须完成这项工作。 客户希望当用户单击 ok (或打印标签)时,标签将被打印并且窗口将关闭,而不会受到用户的任何干扰。

可能的解决方案:http://dymodevelopers.wordpress.com/2010/06/02/dymo-label-framework-javascript-library-samples-print-a-label/

事实上:

  1. 脚本必须选择正确的打印机(不是默认打印机)
  2. 脚本必须选择正确的格式(横向/纵向和标签大小)
  3. 必须在没有用户干预的情况下打印。
  4. 打印标签后窗口必须自动关闭。

感谢您的帮助;)

【问题讨论】:

  • 也许您可以查看here 来自动选择打印机。

标签: php javascript printing


【解决方案1】:

我正是这样做的,但由于基于 Web 的东西的限制,如果不触发 java 或基于 activex 的子应用程序,我无法控制 Windows 打印界面,我不得不将 Web 浏览器设置为打印到 dymo 打印机。

现在我强制使用 Firefox,这意味着我有一个自定义的 Firefox 安装包,它将边距设置为零,关闭页眉和页脚,选择正确的打印机和纸张和横向等(我只做了一个自定义包,因为我有 100 多台电脑要配置,如果只有几台需要 60 秒的更改工作来手动完成)。 强制执行 firefox 的优点是 FF 允许您选择和设置与系统默认不同的打印机作为默认打印机。因此,在我的情况下,ff 设置为 dymo,系统打印机设置为 kyocera,因此在 firefox 之外没有任何内容丢失/设置等。

至于生成条形码,我只是动态创建一个基本代码作为 jpg 在新的弹出窗口中显示 jpg 并使用一点 javascript 自动弹出打印框,因此用户所要做的就是单击确定。没有用户输入就不可能做到这一点!

不幸的是,没有简单的方法关闭窗口,因为系统打印后台处理程序/驱动程序没有返回事件陷阱返回到 Web 浏览器(出于显而易见的原因,它们彼此被沙盒化!)所以你能做的最好的就是在 xxx 秒后实现定时关闭。

总之,没有用户输入且不做一些妥协的情况下没有简单的方法可以做到这一点。 现在,如果现金和时间对您来说不重要,我确实有一种完全自动化的适当方法,但这是一项艰巨的工作

【讨论】:

  • 感谢您的解释,也许我忘了告诉,但用户做了一件事,他点击确定/打印标签,然后会出现带有标签和条形码的弹出窗口。比所有的事情都要做(自动选择打印机、横向/纵向、右边距等等)
  • 你不能这样做然后不容易或便宜的网站和他们的内容和脚本从系统中被沙箱化,事实上即使是浏览器这些天你可以做的最好的自动化它是自动弹出使用 javascript 单击按钮时打印对话框 (ctrl+P)。为了做更多事情,您需要在服务器和打印机之间充当中间件,因为客户端代码是完全隔离的。
【解决方案2】:

我们只使用一个 FTP(以前使用 windows,现在使用冷聚变内置的东西,但任何都可以),然后您将您的条形码定义发送到斑马打印机到机器上......任何可以打开的东西建立这样一个通道并将代码发送到打印机就可以了..所以如果你想用javascript来看看fireftp是怎么做的......然后使用它......或者你可以用ZPLII编码发送信息......告诉它如何打印。

【讨论】:

    【解决方案3】:

    由于您发布的链接讨论了驱动程序要求,我假设您对机器的软件有相当多的控制权?如果是这种情况并且您可以使用 Firefox,那么一个名为 JS Print Setup 的插件可能会起作用。

    它基本上使网页能够直接打印到用户计算机上的打印机,而无需打印对话框。

    我认为只要提供正确的尺寸,它就能很好地打印标签,但我还没有测试过。我确实在未连接打印机时对其进行了测试,并且确实将其发送到该打印机的队列中,因此肯定会告诉系统打印文件。

    以下是文档中的代码示例: (看起来它可以让你设置边距和所有东西。)

    <script>
    // set portrait orientation
    jsPrintSetup.setOption('orientation', jsPrintSetup.kPortraitOrientation);
    
    // set top margins in millimeters
    jsPrintSetup.setOption('marginTop', 15);
    jsPrintSetup.setOption('marginBottom', 15);
    jsPrintSetup.setOption('marginLeft', 20);
    jsPrintSetup.setOption('marginRight', 10);
    
    // set page header
    jsPrintSetup.setOption('headerStrLeft', 'My custom header');
    jsPrintSetup.setOption('headerStrCenter', '');
    jsPrintSetup.setOption('headerStrRight', '&PT');
    
    // set empty page footer
    jsPrintSetup.setOption('footerStrLeft', '');
    jsPrintSetup.setOption('footerStrCenter', '');
    jsPrintSetup.setOption('footerStrRight', '');
    
    // clears user preferences always silent print value
    // to enable using 'printSilent' option
    jsPrintSetup.clearSilentPrint();
    
    // Suppress print dialog (for this context only)
    jsPrintSetup.setOption('printSilent', 1);
    
    // Do Print 
    // When print is submitted it is executed asynchronous and
    // script flow continues after print independently of completetion of print process! 
    jsPrintSetup.print();
    
    // next commands
    </script>
    

    可以在 Mozilla 的插件网站上找到该插件:

    https://addons.mozilla.org/en-US/firefox/addon/js-print-setup/

    【讨论】:

      【解决方案4】:

      我自己从未使用过,但 Seagull Scientific'BarTender 似乎是直接打印条形码的好解决方案。它包括用于处理数据库(如 Oracle、MS SQL 和 .NET 平台)的嵌入式驱动程序,并提供用于从 PHP Web 应用程序打印的 Commander。通过 PHP 应用程序打印的教程在这里http://cases.azoft.com/bartender-print-server/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-10
        • 1970-01-01
        • 2014-03-01
        • 1970-01-01
        相关资源
        最近更新 更多