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

Deno中ESC/POS打印机位图指令被打印为文本的问题求助

解决Deno发送ESC/POS位图指令被识别为文本的问题

问题根源:你当前的ticket.txt文件中,ESC/POS控制指令(比如ESC字符)是以文本转义形式(如\ESC或^[)存储的,Deno读取后发送的是这些转义字符的ASCII字节,而非打印机需要的原始二进制控制字节(比如ESC对应的十六进制0x1B),因此打印机将所有内容当成普通文本打印。

解决方案

方案1:在代码中直接构建二进制指令序列

直接在代码里用Uint8Array定义包含控制字节和位图数据的二进制数组,避免文本转义的问题。示例代码如下:

// 连接打印机
const connection = await Deno.connect({ transport: 'tcp', hostname: '<PRINTER IP>', port: 9100 });

// 构建ESC/POS位图指令的二进制数据
// 替换为你实际需要的指令参数和位图数据(参考爱普生ESC/POS文档)
const escPosData = new Uint8Array([
  0x1B, 0x2A, // ESC * 指令前缀
  0x01,       // m参数,指定位图打印模式
  0x00, 0x10, // n1 n2,位图宽度(示例为16列,根据实际调整)
  // 此处添加你的位图原始数据字节...
]);

// 发送二进制数据
await connection.write(escPosData);

// 关闭连接
connection.close();

方案2:将指令保存为二进制文件而非文本文件

如果需要用文件存储指令,不要用.txt文本格式,而是将控制字符转换为原始二进制字节后保存为二进制文件(比如ticket.bin):

  1. 把ticket.txt中的文本转义字符(如\ESC)替换为对应的十六进制字节(比如0x1B)。
  2. 通过编程工具或二进制编辑器,将处理后的内容保存为二进制文件。
  3. 修改代码读取该二进制文件发送(逻辑和你当前代码一致,仅替换文件路径):
const connection = await Deno.connect({ transport: 'tcp', hostname: '<PRINTER IP>', port: 9100 });
const file = await Deno.readFile('./ticket.bin'); // 读取二进制指令文件
await connection.write(file);
connection.close();

额外注意事项

  • 确保位图数据的格式符合打印机要求(比如字节顺序、宽度对齐规则,参考对应ESC/POS文档)。
  • 部分打印机需要在指令末尾添加换行或切纸指令(如0x0A或0x1B, 0x69),保证输出流程完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:31:01