【问题标题】:how to format printing output in php如何在php中格式化打印输出
【发布时间】:2019-06-21 10:56:48
【问题描述】:

我是 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

【问题讨论】:

  • 您不能只将 HTML 代码发送到打印机,并期望它解释…… 浏览器 渲染 HTML,而不是打印机。
  • @04FS 这是有道理的!谢谢!你知道我有什么方法可以转换它以便打印机打印我想要的吗?
  • PDF 可能。但从未尝试过
  • @Andreas 我也想过同样的事情。但是我找不到将其转换为pdf的方法。你有什么想法吗?
  • 不抱歉,我帮不了你

标签: php html css sockets printing


【解决方案1】:

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

大多数标签打印机都支持自己的语言,例如 ZPL(Zebra 编程语言)或 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 数字以适合您的。您可以在我提供的网站上进行测试。

【讨论】:

    【解决方案2】:

    Google 搜索“将 html 渲染为图像”会给出一些结果,例如here。查看自述文件,将您的 html 转换为图像/pdf 似乎非常简单(假设您安装了它)

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

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

    file_get_contents('file.pdf')
    

    然后做你以前做过的事情。

    【讨论】:

    • 您好,谢谢您的回复!遗憾的是,这只能在 google chrome 浏览器上实现,我无法将其用于我的目的。
    猜你喜欢
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多