2013-02-13 348 views
2

寻找适当的代码,从PHP网页打印到斑马IP打印机使用RAW端口9100.有谁知道这是可能的吗?我需要将ZPL格式化输出中的字符串直接发送到ZM400标签打印机。我搜索了最高和最低,最近我发现是这样的:Print directly to network printer using php打印到斑马打印机在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); 
?> 

回答

1

如果您要将ZPL发送到打印机,则不一定需要专用的打印库。您只需要打开该打印机的套接字并直接发送ZPL。这是一个普通的PHP套接字通信问题,而不是打印机特定的问题。

如果托管您的网络应用程序和打印机的服务器位于同一网络上,那么您将能够打开套接字并发送ZPL。但是,如果您的打印机和Web应用程序服务器位于不同的网络上,则无法使用其他浏览器插件或附加组件在打印机上打印套接字。一般来说,通过网站访问远程打印机(或任何设备)是一种安全风险。

+0

那么这将是理想!有没有一个你会推荐在PHP中使用套接字打印的参考?这就是我所需要的。它的所有内部,在同一个网络上。我知道我的Zebra ZM400能够通过插座接受打印。我们目前使用小型Access应用程序来打印报告标签。我只是没有看到任何用PHP实现的好例子。看起来像它的可行... – user2070092 2013-02-14 15:37:56

+0

我找到一个链接,解释在PHP编程套接字。你认为这是朝着正确方向迈出的一步吗?:http://www.devshed.com/c/a/PHP/Socket-Programming-With-PHP/ – user2070092 2013-02-14 18:25:09

+0

已解决:http://www.binarytides.com/ php-socket-programming-tutorial /从“发送数据”部分复制并粘贴代码很棒! thnx指针@ jason.zissman – user2070092 2013-02-15 16:48:55

1

printer_open()和相关功能不是标准的PHP语言的一部分;他们是扩展的一部分。

如果你想使用它们,你需要安装扩展:See here for info on the printer extension

但是,请注意,此扩展只适用于在Windows上运行的PHP。

如果您的服务器不是Windows,则需要使用外部程序将数据发送到打印机。一个例子可能是这样的:

exec("lpr -P 'printer' -r 'filename.txt'); 

此信息,更可以在SO在其他地方找到 - 例如,在这里:printing over network from PHP app

希望有所帮助。

+0

疑难杂症,我在Ubuntu的灯工作。我看了一下你发布的第二个链接......在你看来,这对于一个简单的php网页来说会更好,你上面发布的还是LPR打印机类?基本上,我想有一个打印按钮来打印存储变量的值,这是一个计算出的Zebra ZPL字符串。 – user2070092 2013-02-14 12:57:09

+0

我还没有试过LPR课,所以我不能评论它。尽管在Linux平台上,使用'exec()'调用外部'lpr'程序应该可以普遍地工作。 – Spudley 2013-02-15 07:39:33

6

我意识到这个问题有点老,但我最近不得不执行这个确切的任务,这里是我如何做到这一点。 主服务器是不在本地网络上的基于云的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。在安装上需要的IP打印机后

enter image description here

exec('lp -d printer file'); 

在我的情况下,命令是:

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

+1

在Win2016服务器上的端口9100上连接的ZDesigner GK420D上测试的代码 - 就像魅力一样。唯一需要调整的是在第一行的某处插入一个UTF8编码命令到.zpl文件中:[^ CI28](https://de.wikipedia.org/wiki/Zebra_Programming_Language#Schriftbild) – Anse 2017-08-25 08:55:30

+0

使用此代码对服务器进行Wamp处理2017年在斑马ZD420上为我工作。感谢您为我节省了大量的挫折! – FascistDonut 2017-10-06 14:29:19

0

之后探求的时间我得到的解决方案:打印机 = Epson-Cofetarie

文件 = /home/clara/Desktop/txt.txt

文件需要的APSolute路径

+0

这不会在服务器机器上运行这些命令吗?如果打印机插入客户端机器会怎么样? – Sebastianb 2016-06-01 19:27:05

+0

服务器机器。要在客户机上运行,​​你需要使用ssh2。 http://php.net/manual/ro/function.ssh2-exec.php – Florin 2016-06-02 06:15:41