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

Electron+Angular POS系统使用electron-pos-printer打印小票不全求助

解决POS80CUT热敏打印机打印中断问题

针对你遇到的打印启动后立即停止、超一半内容卡住的问题,结合你的代码和打印机特性,提供以下针对性修复方案:

1. 修正错误的行间距设置

你的代码中lineSpace: "300px"远超热敏打印机的正常行间距范围(通常为5-20px),过大的行间距会导致打印机无法正确解析排版,直接终止打印。修改为合理值:

const items = order.items.map((item) => {
  const name = item.itemName.length > 25
    ? item.itemName.slice(0, 25) + "…"
    : item.itemName;
  const line = `${item.quantity.toString().padEnd(5)} ${name}`;
  return {
    type: "text",
    value: line,
    style: {
      fontSize: "12px",
      fontFamily: "monospace",
      lineSpace: "10px" // 调整为打印机兼容的行间距
    },
  };
});

2. 延长打印超时时间

timeOutPerLine: 400ms可能不足以让打印机处理完每一行内容,尤其是订单条目较多时,延长超时时间:

const options = {
  preview: false,
  margin: "0 0 0 0",
  copies: 1,
  printerName: printerName,
  timeOutPerLine: 1000, // 延长至1秒
  pageSize: "80mm",
  silent: true,
};

3. 添加打印结束标记

在打印数据末尾添加空行,确保打印机识别到内容已完成,避免缓冲区残留导致中断:

const data = [
  // 原有所有打印内容...
  ...items,
  // 添加两行空行作为结束标记
  {
    type: "text",
    value: "",
    style: { fontSize: "12px" }
  },
  {
    type: "text",
    value: "",
    style: { fontSize: "12px" }
  }
];

4. 调整分隔符长度

80mm热敏打印机的有效打印宽度约为40个等宽字符,当前divider = "-".repeat(42)可能超出边界导致排版异常,缩短为40个字符:

const divider = "-".repeat(40);

5. 简化兼容问题样式

部分热敏打印机对fontWeight: "bold"支持有限,可尝试移除该属性,或用重复字符模拟粗体效果;同时确保所有text项统一使用monospace字体,避免字体切换引发的打印中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:06:23