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
相关产品推荐
相关产品推荐

