Поиск подходящего кода для печати с веб-страницы php на IP-принтер zebra с использованием порта RAW 9100. Кто-нибудь знает, возможно ли это? Мне нужно отправить строку в формате ZPL с форматированием непосредственно на принтер этикеток ZM400. Я искал высоко и низко, ближе всего я нашел это: печать непосредственно на сетевой принтер с использованием 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); ?>
Если вы хотите отправить ZPL на принтер, вам не обязательно нужна специальная библиотека печати. Вам просто нужно открыть сокет для этого принтера и отправить свой ZPL напрямую. Это скорее общий вопрос сокета для сокетов PHP, чем вопрос, связанный с принтером.
Если сервер, на котором размещено ваше веб-приложение и принтеры, находится в одной сети, вы сможете открыть сокет и отправить ZPL. Если, однако, ваши принтеры и сервер веб-приложений находятся в разных сетях, вы не сможете печатать поверх сокетов на этом модельном принтере без дополнительных плагинов или надстроек для браузера. Вообще говоря, доступ к удаленному принтеру (или любому устройству) через веб-сайт является угрозой безопасности.
Я понимаю, что этот вопрос немного стар, но мне недавно пришлось выполнить эту точную задачу, и вот как я это сделал. Основной сервер – это сервер 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/ ). Мы обнаружили, что это действительно хорошо до сих пор, и позволяет нам печатать все виды документов без необходимости использовать наши собственные прокси, а также предоставлять установщик с whitelabelled, чтобы он выглядел как наш собственный продукт. Я не связан с PrintNode.
Функции printer_open()
и связанные с ними функции не являются частью стандартного языка PHP; они являются частью расширения.
Если вы хотите их использовать, вам необходимо установить расширение: см. Здесь информацию о расширении принтера .
Однако учтите, что это расширение доступно только для PHP, работающего в Windows.
Если ваш сервер не является Windows, вам нужно будет использовать внешнюю программу для отправки данных на принтер. Пример может выглядеть так:
exec("lpr -P 'printer' -r 'filename.txt');
Эта информация и многое другое можно найти в другом месте на SO – например, здесь: печать по сети из приложения PHP
Надеюсь, это поможет.
После нескольких часов поиска я получаю решения:
После установки принтера на требуемый IP-адрес:
exec('lp -d printer file');
В моем случае команда была:
exec('lp -d Epson-Cofetarie /home/clara/Desktop/txt.txt');
Где: принтер = Epson-Cofetarie
file = /home/clara/Desktop/txt.txt
нужен файл Apsolute path