PHP в принтер Zebra - PullRequest
       25

PHP в принтер Zebra

10 голосов
/ 22 сентября 2010

У меня есть этот принтер Zebra ZM400, подключенный к сети (192.168.1.50). И я пытаюсь отправить содержимое на этот принтер напрямую из PHP.

Это идея, и я просто застрял без какого-либо способа сделать это. Я попробовал file_put_contents('192.168.1.50', $content), но безуспешно.

Буду признателен, если кто-нибудь сможет помочь мне разобраться с этим. Спасибо: -)

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

Решение:

Я распечатал с использованием протокола LPR. Не нужно устанавливать драйвер или что-нибудь. Класс печати LPR для PHP 5 можно скачать здесь:

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

Ответы [ 8 ]

13 голосов
/ 11 апреля 2013

У меня была похожая проблема, когда я использовал Java-программу для печати на принтере Zebra без драйвера печати и хотел воссоздать это с помощью PHP.Меня беспокоило, что я не мог найти ответ.Через некоторое время, когда Wireshark сравнивал их, я чувствовал, что это возможно.Я наконец наткнулся на решение (по крайней мере для меня).Это приведет к печати этикетки на сетевом принтере Zebra непосредственно со страницы PHP без драйвера.

<?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);

?>
3 голосов
/ 19 мая 2012

Я вижу, что вы получили решения, использующие LPR и FTP, но я почти уверен, что принтеры Zebra будут принимать необработанный текст ZPL на порту 9100.

3 голосов
/ 22 сентября 2010

Я почти уверен, что просто переместить текстовое содержимое через сокет не будет работать вообще.

Я думаю, вам нужно будет печатать поверх lpr.Установите сервер печати, например, CUPS, и вы можете отправить его с помощью этого ...

2 голосов
/ 11 мая 2012

Позже? ...

Если у вас есть доступ к последовательному порту:

LINUX:


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


$comando = "
N
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\"
P
";
fwrite($fpi, $comando);

fclose($fpi);


  • ЭТА РАБОТА ШТРАФ
1 голос
/ 19 мая 2012

Я создал файл на языке зебра и использовал FTP, чтобы отправить файл много раз в прошлом.просто сохраните файл и затем создайте ftp-соединение с принтером, затем используйте команду put для отправки файла .txt.принтер сделает все остальное

0 голосов
/ 25 февраля 2019

Как печатать на принтере 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); 
?> 

Это работает на 100% на любом ZPL-совместимом принтере, не только на Zebra. В этом примере мы печатаем этикетку с большим TEST ZEBRA PRINTER в нем

0 голосов
/ 31 января 2013

Пример кода для отправки ZPL напрямую на принтеры Zebra:

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

Я не видел ни одного в PHP, но есть пример прямого разговорак принтеру через порт 9100, используя VB.

0 голосов
/ 22 сентября 2010

Посмотрите на эти функции принтера PHP

Обратите внимание, что

Эти функции доступны только в Windows 9.x, ME, NT4 и 2000.

...