使用PHP打印到Zebra打印机

5
寻找适当的代码,以使用RAW端口9100从php网页打印到Zebra IP打印机。有人知道这是否可能吗?我需要将经过ZPL格式化的字符串直接发送到ZM400标签打印机。我搜寻了很多资料,最接近我所需要的是这个:Print directly to network printer using php 这似乎非常接近我所需的,但当我的php页面遇到该代码时,它什么也没做。以下是我使用的代码:
<?php 
     $handle = printer_open('\\\\192.168.2.206:9100\\'); 
     printer_set_option($handle, PRINTER_MODE, "RAW");
     printer_write($handle, "TEXT To print"); 
     printer_close($handle);
?>
5个回答

12

我意识到这个问题有点老了,但最近我不得不执行这个确切的任务,以下是我的操作步骤。 主服务器是基于云的PHP服务器,不在本地网络上。在本地网络上,我们有另一台机器,仅运行WAMP和此脚本,Zebra打印机本身也在本地网络上,位于IP 192.168.1.201:

<?php
/*
 * File Allows printing from web interface, simply connects to the Zebra Printer and then pumps data
 * into it which gets printed out.
 */
$print_data = $_POST['zpl_data'];

// Open a telnet connection to the printer, then push all the data into it.
try
{
    $fp=pfsockopen("192.168.1.201",9100);
    fputs($fp,$print_data);
    fclose($fp);

    echo 'Successfully Printed';
}
catch (Exception $e) 
{
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

然后,在云服务器生成的网页上,我们有一些代码,简单地通过Ajax POST到本地网络上的服务器,将zpl_data发布以进行打印。

编辑2017

我们现在已经转移到了PrintNode(https://www.printnode.com/),我们发现它非常好用,可以打印各种文档,无需使用我们自己的代理,并且提供白标安装程序,因此看起来像我们自己的产品。我与PrintNode无关。


1
代码已在连接到Win2016服务器上端口9100的ZDesigner GK420D上进行了测试 - 运行得非常好。唯一需要调整的是在.zpl文件的前几行中插入UTF8编码命令:[^CI28](https://de.wikipedia.org/wiki/Zebra_Programming_Language#Schriftbild) - Anse
2017年,使用这段代码的Wamp服务器在我的Zebra ZD420上运行良好。感谢您帮我省去了很多烦恼! - FascistDonut

3
如果您想将ZPL发送到打印机,不一定需要专用的打印库。您只需要打开与该打印机的套接字并直接发送ZPL即可。这更多是一个通用的PHP套接字通信问题,而不是针对特定打印机的问题。
如果托管Web应用程序的服务器和打印机位于同一网络上,则可以打开套接字并发送ZPL。但是,如果您的打印机和Web应用程序服务器位于不同的网络上,则无法在没有其他浏览器插件或附加组件的情况下,在该型号打印机上通过套接字进行打印。一般来说,通过网站访问远程打印机(或任何设备)存在安全风险。

那真是太理想了!你有没有推荐的关于PHP套接字打印的参考资料?这就是我需要的全部。所有操作都在同一网络内部进行。我知道我的Zebra ZM400可以通过套接字接受打印任务。我们目前从一个小的Access应用程序中执行类似的操作以打印报告标签。但我并没有看到任何好的PHP实现示例。看起来这是可行的... - user2070092
我找到了一个链接,解释了PHP中的套接字编程。你认为这是朝着正确方向迈出的一步吗?:http://www.devshed.com/c/a/PHP/Socket-Programming-With-PHP/ - user2070092
已解决:http://www.binarytides.com/php-socket-programming-tutorial/ 从“发送数据”部分复制并粘贴的代码运行良好!感谢@jason.zissman的指引。 - user2070092
PHP ZPL构建器,图像转换和用于网络连接Zebra标签打印机的基本客户端。 - Furgas
只需要打开一个到那个打印机的套接字。好吧...我已经尝试了socket_createstream_socket_clientfopenpfsockopen,但似乎什么都不起作用。 - Dustin Graham

2
printer_open()和相关函数不是标准的PHP语言组成部分,它们属于一个扩展程序。
如果您想使用它们,您需要安装该扩展程序:请查看此处关于打印机扩展程序的信息
但请注意,此扩展程序仅适用于在Windows上运行的PHP。
如果您的服务器不是Windows,则需要使用外部程序将数据发送到打印机。例如:
exec("lpr -P 'printer' -r 'filename.txt');

这些信息以及更多信息可以在SO的其他地方找到,例如这里:从PHP应用程序通过网络打印
希望这有所帮助。

明白了,我正在使用Ubuntu LAMP。我看了一下你发布的第二个链接...在你的意见中,哪一个对于一个简单的php网页更好,是你上面发布的那个还是LPR打印机类?基本上,我想要一个打印按钮,可以打印存储变量的值,这个值是一个计算出来的Zebra ZPL字符串。 - user2070092
我没有尝试过LPR类,所以不能对它发表评论。在Linux平台上,使用exec()调用外部“lpr”程序应该是普遍适用的。 - Spudley

0

我希望,这个简单的代码可以解决问题,

  1. 将您的ZPL代码放在一个文件中,例如"barcode.zpl"
  2. 共享您的Zebra打印机,以便通过在Windows Explorer中键入以下内容进行访问:
    例如"\192.168.1.113[YOUR PRINTER NAME]"
  3. 创建PHP文件,并编写以下代码:

<?php $file="barcode.zpl"; copy($file, "//192.168.1.113/ZDesigner GK420t"); ?>

谢谢你


0
经过几个小时的搜索,我找到了解决方案:
在所需的IP上安装打印机后:enter image description here
exec('lp -d printer file');

在我的情况下,命令是:

exec('lp -d Epson-Cofetarie /home/clara/Desktop/txt.txt');

位置在: printer = 爱普生-糕点店

file = /home/clara/Desktop/txt.txt

文件需要绝对路径


这样做会在服务器机器上运行这些命令吗?如果打印机插在客户端机器上怎么办? - Sebastianb
服务器机器。要在客户端机器上运行,您需要使用ssh2。http://php.net/manual/ro/function.ssh2-exec.php - Florin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接