Как отформатировать вывод на печать в php

Я новичок в php и сделал код, который берет некоторую информацию из базы данных и преобразует ее в штрих-код code128. Повторить это на странице не проблема:

$finalvar = '<p>'.bar128(stripcslashes($row['Flowers'])).'</p>';
echo $finalvar; 

Как отформатировать вывод на печать в php

Все идет нормально. Теперь я хочу распечатать этот штрих-код на сетевом принтере и использовать это:

$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 как на картинке выше?

Вы не можете просто отправить код HTML на принтер и ожидать, что он интерпретирует это… браузеры отображает HTML, а не принтеры.

04FS 28.01.2019 13:31

@04FS это имеет смысл! Спасибо! Знаете ли вы, как я могу преобразовать его, чтобы принтер печатал то, что я хочу?

verfluecht 28.01.2019 13:36

PDF возможно. Но никогда не пробовал

Andreas 28.01.2019 13:57

@Андреас, я думал о том же. Но я не мог найти способ конвертировать его в pdf. У тебя есть идеи?

verfluecht 30.01.2019 08:00

Нет, извините, я не могу вам помочь с этим

Andreas 30.01.2019 09:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
650
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поиск в Google по запросу «рендеринг html в изображение» дает несколько результатов, например. здесь. Глядя на файл readme, кажется довольно простым преобразование вашего html в изображение / pdf (при условии, что вы его установили)

use Spatie\Browsershot\Browsershot;    

Browsershot::html($someHtml)->savePdf('example.pdf');

Я не знаком с использованием сокетов и печатью, но тогда вы сможете просто прочитать содержимое файла, например.

file_get_contents('file.pdf')

и делай то, что делал раньше.

привет, спасибо за ваш ответ! к сожалению, это возможно только в браузере Google Chrome, который я не могу использовать для своих целей.

verfluecht 29.01.2019 07:28
Ответ принят как подходящий

Для тех, кому интересно, как я это сделал:

Большинство принтеров этикеток поддерживают свои собственные языки, такие как 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, чтобы они соответствовали вашим. Вы можете проверить это на веб-сайте, который я предоставил.

Другие вопросы по теме