Php 在(zebra)打印机上直接从浏览器打印标签/条形码标签
我们必须关注以下情况,对于我们的一个客户,我们正在寻找解决方案。 他构建了一个PHP脚本,生成一个标签,标签上有一些信息和条形码,因此工作流程如下所述:用户输入一些数据(一些是从数据库中提取的数据,一些不是) 当用户单击打印标签时,将打开一个窗口并生成标签。所以现在代码(我想javascript可以完成这项工作)必须完成这项工作。 客户端希望,当用户单击ok(或print label)时,标签将被打印,并且窗口将在没有用户干扰的情况下关闭 可能的解决办法: 因此,事实上:Php 在(zebra)打印机上直接从浏览器打印标签/条形码标签,php,javascript,printing,Php,Javascript,Printing,我们必须关注以下情况,对于我们的一个客户,我们正在寻找解决方案。 他构建了一个PHP脚本,生成一个标签,标签上有一些信息和条形码,因此工作流程如下所述:用户输入一些数据(一些是从数据库中提取的数据,一些不是) 当用户单击打印标签时,将打开一个窗口并生成标签。所以现在代码(我想javascript可以完成这项工作)必须完成这项工作。 客户端希望,当用户单击ok(或print label)时,标签将被打印,并且窗口将在没有用户干扰的情况下关闭 可能的解决办法: 因此,事实上: 脚本必须选择正确的打印
谢谢你的帮助;) 我确实这样做了,但由于基于web的东西的限制,如果不启动java或基于activex的子应用程序,就无法控制windows打印界面,我必须将web浏览器设置为打印到dymo打印机 现在我强制使用firefox,这意味着我有一个自定义的firefox安装包,它可以将页边距设置为零,关闭页眉和页脚,选择正确的打印机、纸张和景观等(我只做了一个自定义包,因为我有100多台pc需要配置,如果只有几台需要60秒的手动更改作业)。 强制使用firefox的优点是FF允许您选择并设置与系统默认打印机不同的打印机作为默认打印机。因此,在我的例子中,ff是为dymo设置的,系统打印机是为京瓷设置的,所以在firefox之外没有任何东西丢失/设置等 至于生成条形码,我只需创建一个基本代码,作为一个动态jpg,在一个新的弹出窗口中显示jpg,并使用一点javascript自动弹出打印框,因此用户只需单击ok。如果没有用户输入,这是不可能做到的 不幸的是,没有简单的方法可以关闭窗口,因为系统打印后台处理程序/驱动程序没有返回事件陷阱返回到web浏览器(由于明显的原因,它们彼此都是沙盒!),所以最好在xxx秒后实现定时关闭 不过,简而言之,在没有用户输入和做出一些妥协的情况下,要做到这一点是不容易的。
现在,如果现金和时间对你来说不成问题,我确实有一种完全自动化的方法,等等,但这是一项艰巨的工作,因为你发布的链接谈到了司机的要求,我想你对机器的软件有相当大的控制权?如果是这样,并且您可以使用Firefox,那么一个名为JS打印设置的附加组件可能会工作 它基本上使网页能够直接打印到用户计算机上的打印机上,而无需打印对话框 我认为只要提供合适的尺寸,它就可以打印标签,但我还没有测试过。我确实在打印机未连接时测试了它,它确实将它发送到了打印机的队列,因此明确地告诉系统打印文件 以下是文档中的代码示例: (它似乎可以让您设置边距和所有内容。)
//设置纵向方向
jsPrintSetup.setOption('orientation',jsPrintSetup.kPortRaitionation);
//以毫米为单位设置顶部边距
jsPrintSetup.setOption('marginTop',15);
jsPrintSetup.setOption('marginBottom',15);
jsPrintSetup.setOption('marginLeft',20);
jsPrintSetup.setOption('marginRight',10);
//设置页眉
setOption('headerStrLeft','My custom header');
jsPrintSetup.setOption('headerStrCenter','');
jsPrintSetup.setOption('headerStrRight','&PT');
//设置空页脚
jsPrintSetup.setOption('footerStrLeft','';
jsPrintSetup.setOption('footerStrCenter','';
jsPrintSetup.setOption('footerStrRight','';
//清除用户首选项“始终无提示打印”值
//启用“printSilent”选项的步骤
jsPrintSetup.clearSilentPrint();
//抑制打印对话框(仅适用于此上下文)
jsPrintSetup.setOption('printSilent',1);
//打印
//提交打印时,它将异步执行,并且
//脚本流在打印后继续,与打印过程的完成无关!
jsPrintSetup.print();
//下一个命令
可以在Mozilla的加载项站点上找到该加载项:
我自己从未使用过,但海鸥科技公司的“海鸥科技”似乎是直接打印条形码的一个很好的解决方案。它包括用于处理Oracle、MS SQL和.NET平台等数据库的嵌入式驱动程序,并提供用于从PHP web应用程序打印的Commander。通过PHP应用程序打印的教程此处我们只需使用FTP(过去使用windows,现在使用cold fusion内置的功能,但任何功能都可以),然后您就可以通过这种方式将条形码的定义发送到zebra打印机中。。。任何能够打开这样一个通道并将代码发送到打印机的方法都可以。。所以如果你想用javascript来做,看看fireftp是怎么做的。。。然后用那个。。。或者你可以用ZPLII编码发送信息。。。这告诉它如何打印 也许你可以寻找自动选择打印机。谢谢你的解释,也许我忘了告诉你,但用户做了一件事,他点击确定/打印标签,然后弹出标签和条形码。比所有描述的事情都要做(自动选择打印机、横向/纵向、右页边距等)你不可能做到这一点,那么不容易或便宜的网站和他们的内容和脚本都从系统中沙盒了,甚至连浏览器现在你能做的最好的自动化就是自动弹出打印对话框(ctrl+P)在按钮上单击使用javascript。要执行更多操作,您需要在服务器和打印机之间充当中间件,因为客户端代码是
<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>