如何在php中格式化打印输出

时间:2019-01-28 12:25:22

标签: php html css sockets printing

我是php的新手,并编写了代码,该代码从数据库中获取一些信息并将其转换为code128条码。将其回显到页面没问题:

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

enter image description here

到目前为止,一切都很好。我现在想在网络打印机上打印该条形码并使用它:

$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

2 个答案:

答案 0 :(得分:0)

Google搜索“将html渲染为图像”会给出一些结果,例如here。查看自述文件,将HTML转换成图像/ pdf看起来很简单(假设您已安装)

use Spatie\Browsershot\Browsershot;    

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

我对使用套接字和打印不熟悉,但是您应该能够通过例如读取文件内容。

file_get_contents('file.pdf')

做你以前做的事。

答案 1 :(得分:0)

对于任何想知道我是如何做到的人:

大多数标签打印机支持它们自己的语言,例如ZPL(斑马编程语言)或DPL(Datamax编程语言)。您只需发送命令即可转换并打印变量。您甚至不需要将其转换为条形码,打印机即可为您完成。 您将需要向打印机发送1行ZPL。 ZPL非常简单,您可以自己here看到它。 如您在我提供的链接中所见,您可以仅使用以下命令创建条形码:

^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数字以适合您的数字。您可以在我提供的网站上进行测试。