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

PHP EscPOS:如何保存原始打印数据并延后执行?

ESC/POS原始数据保存与延后打印问题解决

问题1:能否将EscPOS原始数据保存到txt文件?

可以,但不能用普通文本模式保存/读取。因为ESC/POS指令包含大量非ASCII的二进制控制字符(比如ESC、GS这类转义码),普通文本文件会默认按字符编码(如UTF-8)处理这些内容,导致二进制数据被篡改、丢失,进而打印时出现乱码。

问题2:如何让打印机正确执行保存后的命令?

核心是用二进制模式保存和读取数据,并且发送时直接传递原始二进制内容,不要让打印机类再做编码处理。修正后的代码如下:

保存原始数据的代码

$connector = new DummyPrintConnector();
$printer = new Printer($connector);
$printer->text("Hello world!\n");
$printer->cut();

$data = $connector->getData();

// 用二进制模式写入文件,避免编码转换
file_put_contents('example.bin', $data, FILE_APPEND | LOCK_EX);

$printer->close();

注:建议将后缀改为.bin而非.txt,明确这是二进制文件,避免文本编辑器误打开篡改内容。

读取并打印的代码

$connector = new WindowsPrintConnector('Generic');
$printer = new Printer($connector);

// 用二进制模式读取文件
$rawData = file_get_contents('example.bin');

// 使用textRaw发送原始二进制数据,不要用text(text会重新编码)
$printer->textRaw($rawData);

$printer->close();

关键注意点

  • 保存和读取必须使用二进制模式:PHP的file_put_contents和file_get_contents默认支持二进制处理,但要确保系统编码设置不会干扰数据;
  • 发送时一定要用textRaw方法:text方法会对传入的字符串做编码转换,而textRaw会直接把二进制数据发送给打印机,符合ESC/POS的指令要求;
  • 避免用文本编辑器打开保存的二进制文件:很多文本编辑器会自动替换不可见字符,导致数据损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:46:02