Я новичок в php и сделал код, который берет некоторую информацию из базы данных и преобразует ее в штрих-код code128. Повторить это на странице не проблема:
$finalvar = '<p>'.bar128(stripcslashes($row['Flowers'])).'</p>';
echo $finalvar;
Все идет нормально. Теперь я хочу распечатать этот штрих-код на сетевом принтере и использовать это:
$port = "9100";
$host = "10.64.33.33";
$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";
}
$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, $finalvar);
socket_close($socket);
Печать работает отлично, но вместо печати штрих-кода, как на картинке, бумага выглядит так:
<p><table cellpadding=0 cellspacing=0><tr><td><div class = "128"
style"border-"
Я думаю, что это, вероятно, больше похоже на форматирование, но я не нашел ничего, что сработало.
Как распечатать $finalvar как на картинке выше?
@04FS это имеет смысл! Спасибо! Знаете ли вы, как я могу преобразовать его, чтобы принтер печатал то, что я хочу?
PDF возможно. Но никогда не пробовал
@Андреас, я думал о том же. Но я не мог найти способ конвертировать его в pdf. У тебя есть идеи?
Нет, извините, я не могу вам помочь с этим






Поиск в Google по запросу «рендеринг html в изображение» дает несколько результатов, например. здесь. Глядя на файл readme, кажется довольно простым преобразование вашего html в изображение / pdf (при условии, что вы его установили)
use Spatie\Browsershot\Browsershot;
Browsershot::html($someHtml)->savePdf('example.pdf');
Я не знаком с использованием сокетов и печатью, но тогда вы сможете просто прочитать содержимое файла, например.
file_get_contents('file.pdf')
и делай то, что делал раньше.
привет, спасибо за ваш ответ! к сожалению, это возможно только в браузере Google Chrome, который я не могу использовать для своих целей.
Для тех, кому интересно, как я это сделал:
Большинство принтеров этикеток поддерживают свои собственные языки, такие как ZPL (язык программирования Zebra) или DPL (язык программирования Datamax). Вы можете просто отправить команду для преобразования и печати вашей переменной. Вам даже не нужно преобразовывать его в штрих-код, принтер сделает это за вас. Вам нужно будет отправить 1 строку ZPL на принтер. ZPL очень прост, и вы сами можете в этом убедиться здесь. Как вы можете видеть по предоставленной мной ссылке, вы можете создать штрих-код только с помощью этой команды:
^XA^BY5,2,270^FO100,550^BC^FD$yourvariable^FS^XZ
В моем случае я использовал этот точный код выше для печати простого штрих-кода. Вот как вы реализуете это в PHP и отправляете на принтер:
$variable = "ABC123"; //the variable you want to convert to barcode and print
$print_data = ^XA^BY5,2,270^FO100,550^BC^FD$variable^FS^XZ; //this is the ZPL Code
// Open a telnet connection to the printer, then push all the data into it.
try
{
$fp=pfsockopen("10.64.57.51",9100); //IP of your printer and port
fputs($fp,$print_data);
echo "Job sent";
fclose($fp);
}
catch (Exception $e)
{
echo "Job Failed";}
Примечание: Код ZPL, который я предоставил, предназначен для размера моих этикеток. Возможно, вам придется изменить некоторые числа X и Y, чтобы они соответствовали вашим. Вы можете проверить это на веб-сайте, который я предоставил.
Вы не можете просто отправить код HTML на принтер и ожидать, что он интерпретирует это… браузеры отображает HTML, а не принтеры.