直接从(zebra)打印机上的浏览器打印贴纸/条形码标签

时间:2013-02-01 07:51:26

标签: php javascript printing

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

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

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

事实上:

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

4 个答案:

答案 0 :(得分:2)

我这样做但是由于基于网络的东西的限制无法控制Windows打印界面而无需启动java或基于activex的子应用程序我必须将Web浏览器设置为打印到dymo打印机。 / p>

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

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

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

缺点是,没有简单的方法可以做到这一点,没有用户输入,也没有做出一些妥协。 现在,如果现金和时间对您没有任何问题,我确实有一个完全自动化的正确方法,但它是一项大工作

答案 1 :(得分:1)

我们只使用一个FTP(用于使用Windows,现在使用内置于冷融合的内容,但任何人都会这样做)并且您将斑马打印机的条形码定义发送到机器那样......任何可以打开的东西这样一个频道,并将代码发送到打印机将工作..所以,如果你想用javascript看看fireftp如何做...然后使用...或者你可以发送ZPLII编码信息...告诉它如何打印。

答案 2 :(得分:0)

由于您发布的链接谈到了驱动程序要求,我假设您对机器的软件有相当大的控制权?如果是这种情况并且您可以使用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/

答案 3 :(得分:-1)

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