You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel POS系统厨房订单直连打印机打印问题求助

解决方案:Laravel POS系统厨房订单按打印机分配打印问题

一、解决Browsershot的'node'未识别错误

若仍需使用Browsershot转图片打印,可通过以下方式修复Node路径问题:

  • 检查系统PATH变量:确认Node.js安装目录(如C:\Program Files\nodejs)已添加至系统环境变量的PATH中,修改后需重启XAMPP与命令行窗口。
  • 显式指定Node二进制文件路径:在Browsershot调用中直接设置Node的完整路径:
    Browsershot::html(view('admin.orders.test_print_order_for_kitchen', $this->data)->render())
        ->setNodeBinary('C:\Program Files\nodejs\node.exe')
        ->save($imagePath);
    
  • 验证Node可用性:打开命令提示符输入node -v,确认能正常显示版本号;若无法识别,重新安装Node并勾选"Add to PATH"选项。

二、修复PDF打印格式异常问题(推荐替代方案)

直接打印PDF或转图片的方式适配热敏打印机效果较差,推荐使用Mike42/Escpos库的原生命令构建打印内容,确保格式符合热敏打印机要求:

重构打印逻辑示例

use Mike42\Escpos\PrintConnectors\NetworkPrintConnector;
use Mike42\Escpos\Printer as EscposPrinter;

foreach ($itemsByPrinter as $printerId => $items) {
    $printer = PrinterConnection::find($printerId);
    if (!$printer) {
        echo "未找到对应打印机\n";
        continue;
    }

    try {
        $connector = new NetworkPrintConnector($printer->ip_address);
        $escposPrinter = new EscposPrinter($connector);

        // 设置标题格式
        $escposPrinter->setJustification(EscposPrinter::JUSTIFY_CENTER);
        $escposPrinter->selectPrintMode(EscposPrinter::MODE_BOLD);
        $escposPrinter->text("厨房订单\n");
        $escposPrinter->text("------------------------\n");
        $escposPrinter->selectPrintMode(); // 取消加粗
        $escposPrinter->setJustification(EscposPrinter::JUSTIFY_LEFT);

        // 打印订单基础信息
        $escposPrinter->text("订单号: {$this->data['order_number']}\n");
        $escposPrinter->text("下单时间: " . date('Y-m-d H:i:s') . "\n");
        $escposPrinter->text("------------------------\n");

        // 打印菜品列表
        foreach ($items as $item) {
            $escposPrinter->text("{$item->name} x {$item->quantity}\n");
            if (!empty($item->notes)) {
                $escposPrinter->text("备注: {$item->notes}\n");
            }
            $escposPrinter->text("------------------------\n");
        }

        // 结束打印流程
        $escposPrinter->feed(2);
        $escposPrinter->cut();
        $escposPrinter->close();
    } catch (Exception $e) {
        echo "打印失败: " . $e->getMessage() . "\n";
    }
}

方案优势

  • 直接使用ESC/POS原生命令,完美适配热敏打印机,格式精准无错乱。
  • 无需依赖Node.js与Browsershot,减少系统依赖与潜在故障点。
  • 打印速度更快,适配厨房实时出单的场景需求。

三、确认打印机分配逻辑正确性

确保$itemsByPrinter数组已按打印机ID正确分组菜品,同时验证打印机IP地址无误、设备处于联网状态且支持ESC/POS协议。

内容的提问来源于stack exchange,提问作者Shamila Chathuranga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:18:16