11

我将这台 Zebra ZM400 打印机连接到网络 ( 192.168.1.50)。我正在尝试直接从 PHP 将内容推送到这台打印机。

这就是想法,我只是没有任何办法做到这一点。我尝试了file_put_contents('192.168.1.50', $content)但没有成功。

如果有人能帮我解决这个问题,我将不胜感激。谢谢 :-)

..................................................... ..................................................... .....................................

解决方案:

我使用 LPR 协议打印。无需安装驱动程序或任何东西。PHP 5 的 LPR 打印类可以从这里下载:

http://www.phpclasses.org/package/2540-PHP-Abstraction-for-printing-documents.html

4

9 回答 9

15

我有一个类似的问题,我使用 java 程序在没有打印驱动程序的情况下打印到斑马打印机,并想使用 PHP 重新创建它。找不到答案让我很烦恼。通过Wireshark的一些抓包对比两者,我觉得是可以的。我终于偶然发现了解决方案(至少对我而言)。这将直接从 PHP 页面将标签打印到联网的 Zebra 打印机,无需驱动程序。

<?php
error_reporting(E_ALL);

/* Get the port for the service. */
$port = "9100";

/* Get the IP address for the target host. */
$host = "172.17.144.89";

/* construct the label */
$mrn = "123456";
$registration_date = "03/13/2013";
$dob = "06/06/1976";
$gender = "M";
$nursing_station = "ED";
$room = "ED01";
$bed = "07";
$lastname = "Lastname";
$firstname = "Firstname";
$visit_id = "12345678";

$label = "q424\nN\n";
$label .= "A10,16,0,3,1,1,N,\"MR# " . $mrn . " ";
$label .= $registration_date . "\"\n";
$label .= "B10,43,0,3,2,4,50,N,\"" . $mrn . "\"\n";
$label .= "A235,63,0,3,1,1,N,\" ";
$label .= $dob . " ";
$label .= $gender . "\"\n";
$label .= "A265,85,0,3,1,1,N,\" ";
$label .= $nursing_station . " ";
$label .= $room . "-";
$label .= $bed . "\"\n";
$label .= "A10,108,0,3,1,1,N,\"";
$label .= $lastname . ",";
$label .= $firstname;
$label .= "\"\n";
$label .= "A10,135,0,3,1,1,N,\" #" . $visit_id . "\"\n";
$label .= "B10,162,0,3,2,4,50,N,\"" . $visit_id . "\"\n";
$label .= "P1\n";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error    ()) . "\n";
} else {
    echo "OK.\n";
}

echo "Attempting to connect to '$host' on port '$port'...";
$result = socket_connect($socket, $host, $port);
if ($result === false) {
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror    (socket_last_error($socket)) . "\n";
} else {
    echo "OK.\n";
}

socket_write($socket, $label, strlen($label));
socket_close($socket);

?>
于 2013-04-11T19:05:46.610 回答
3

我看到您已经使用 LPR 和 FTP 获得了解决方案,但我几乎可以肯定 Zebra 打印机将接受端口 9100 上的原始 ZPL 文本。

于 2012-05-18T20:56:02.923 回答
3

这是在连接到网络的 Zebra 打印机上打印的方法:假设您的打印机位于 IP:192.168.1.50 和标准端口:9100

<?php 
if(($conn = fsockopen('192.168.1.50',9100,$errno,$errstr))===false){ 
    echo 'Connection Failed' . $errno . $errstr; 
} 

$data = ' 
    ^XA 
    ^FT50,200 
    ^A0N,200,200^FDTEST^FS 
    ^FT50,500 
    ^A0N,200,200^FDZebra Printer^FS 
    ^XZ'; 

#send request 
$fput = fputs($conn, $data, strlen($data)); 

#close the connection 
fclose($conn); 
?> 

这在任何 ZPL 兼容打印机上都可以 100% 工作,不仅是 Zebra。在这个例子中,我们打印一个带有大TEST ZEBRA PRINTER的标签

于 2019-02-25T10:50:49.407 回答
2

我很确定只是将文本内容推送到套接字上根本行不通。

我猜你需要在 lpr 上打印。安装像 CUPS 这样的打印服务器,您可以使用它发送它...

于 2010-09-22T04:11:45.180 回答
2

之后?...

如果您可以访问串行端口:

LINUX:

 $fpi = fopen('/dev/ttyS0', 'r+');


$comando = "
ñ
Q70
A40,20,0,2,1,0,N,\"xxx\"
B40,40,0,1,2,6,100,N,\"$don\"
A40,145,0,3,1,0,N,\"N.- $don \"
A40,165,0,2,1,0,N,\"ccc\"
A0,198,7,1,1,0,N,\"$fecha\"
A19,198,7,1,1,0,N,\"fasdfas\"
磷
";
fwrite($fpi, $comando);

fclose($fpi);


  • 这个工作正常
于 2012-05-11T19:04:05.727 回答
1

我用斑马语言创建了一个文件,并在过去多次使用 FTP 发送文件。只需保存文件,然后创建与打印机的 ftp 连接,然后使用 put 命令发送 .txt 文件。打印机将完成剩下的工作

于 2012-05-18T20:47:06.847 回答
0

有关如何将 ZPL 直接发送到 Zebra 打印机的示例代码,请访问:

https://km.zebra.com/kb/index?page=content&channel=SAMPLE_CODE&cat=ZISV_PL_ZPL

我在 PHP 中没有看到任何内容,但是有一个使用 VB 通过端口 9100 直接与打印机对话的示例。

于 2013-01-31T00:22:31.900 回答
0

在我的情况下(Windows + USB 打印机),我所做的是共享 Zebra 打印机并通过 shell exec 将 LPT1 分配给共享打印机,然后也通过 shell exec 打印一个临时文件。

    $text = "XA^LH30,30^FO20,0^BY3^B2,60^FD00000060^FS^XZ"; //your text to be printed
    $tmpfname = tempnam(sys_get_temp_dir(), 'PRN'); 
    file_put_contents ($tmpfname,$text);
    shell_exec ("NET USE LPT1: \\\\127.0.0.1\\Zebra"); //replace Zebra with your share name
    shell_exec ( "print  /D:LPT1 ".$tmpfname );
于 2021-05-26T23:35:57.590 回答
-2

看看这些PHP 打印机函数

注意

这些功能仅在 Windows 9.x、ME、NT4 和 2000 下可用。

于 2010-09-22T04:16:58.060 回答