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

使用Neodynamic PHP Web Client执行ESC/POS切纸命令失效问题排查

解决Neodynamic PHP Web Client切纸命令无效的问题

我来帮你搞定这个切纸命令失效的问题~你现在遇到的核心问题是切纸命令的格式写法错误,再加上可能缺少必要的命令参数,才导致打印机只输出了字符'V'。

问题根源分析

  1. 你原来写的'0x1D 0x56'包含空格,当formatHexValues=true时,空格会被当作普通ASCII字符(0x20)输出,导致切纸命令被拆分,打印机只识别了0x56对应的ASCII字符'V',而不是完整的切纸指令。
  2. 标准ESC/POS的切纸命令0x1D 0x56通常需要一个后续参数来指定切纸模式,缺少这个参数的话,部分打印机也无法正确执行切纸操作。

修正后的代码实现

首先我们先定义GS(分组分隔符,对应0x1D)变量,然后替换掉错误的切纸命令行:

$useDefaultPrinter = ($qs['useDefaultPrinter'] === 'checked');
$printerName = urldecode($qs['printerName']);
//Create ESC/POS commands for sample receipt
$esc = '0x1B'; //ESC byte in hex notation
$gs = '0x1D'; // 新增GS变量,对应0x1D字节
$newLine = '0x0A'; //LF byte in hex notation
$cmds = '';
$cmds = $esc . "@"; //Initializes the printer (ESC @)
$cmds .= $esc . '!' . '0x38'; //Emphasized + Double-height + Double-width mode selected (ESC ! (8 + 16 + 32)) 56 dec => 38 hex
$cmds .= 'BILL'; //text to print
$cmds .= $newLine . $newLine;
$cmds .= $esc . '!' . '0x00'; //Character font A selected (ESC ! 0)
$cmds .= 'COOKIES 5.00';
$cmds .= $newLine;
$cmds .= 'MILK 65 Fl oz 3.78';
$cmds .= $newLine;
$cmds .= 'TOTAL 8.78';
$cmds .= $newLine;
// 修正后的切纸命令:0x1D 0x56 0x00(切纸后不进纸),如果需要切纸后进纸换成0x01
$cmds .= $gs . '0x56' . '0x00'; 
//Create a ClientPrintJob obj that will be processed at the client side by the WCPP
$cpj = new ClientPrintJob();
//set ESCPOS commands to print...
$cpj->printerCommands = $cmds;
$cpj->formatHexValues = true;
if ($useDefaultPrinter || $printerName === 'null') {
    $cpj->clientPrinter = new DefaultPrinter();
} else {
    $cpj->clientPrinter = new InstalledPrinter($printerName);
}
//Send ClientPrintJob back to the client
ob_start();
ob_clean();
header('Content-type: application/octet-stream');
echo $cpj->sendToClient();
ob_end_flush();
exit();

关键修改说明

  • 去掉了切纸命令中的空格,确保0x1D和0x56被解析为连续的指令字节,而不是被空格拆分。
  • 添加了切纸模式参数:
    • 0x00:执行切纸操作,切纸后不自动进纸到下一页
    • 0x01:切纸完成后,自动进纸到下一页的起始位置
  • 新增了$gs变量来统一管理0x1D字节,让代码更清晰易维护。

额外排查建议

如果修正后还是无法切纸,可以试试这些方案:

  • 确认你的打印机支持ESC/POS命令集(大部分热敏小票打印机都支持,但个别小众型号可能有差异)。
  • 尝试替换为另一种切纸命令:0x1B 0x69(即时切纸)或者0x1B 0x6D(切纸并进纸),不过0x1D 0x56是更通用的标准指令。

内容的提问来源于stack exchange,提问作者Paul Baiju

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:13:12