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

sunmi_printer_plus中printRow打印泰文时字符重叠问题求助

问题分析与解决方案

问题原因

这种泰文在printRow中重叠的情况,核心原因是**ColumnMaker的宽度计算逻辑基于英文字符的单字节宽度设计**,而泰文属于Unicode复杂脚本(包含连体字符、元音叠加等),每个字符的实际显示宽度远大于英文,导致设置的列宽不足以容纳泰文内容,进而出现重叠。而printText是整行渲染,无需按列分配宽度,因此能正常显示泰文。

可行解决方案

  1. 大幅增加泰文所在列的width值
    泰文字符的显示宽度通常是英文的1.5-2倍,把包含泰文的ColumnMaker的width参数适当调大(比如从20改为28-35,根据实际打印效果微调):

    await SunmiPrinter.printRow(cols: [
      ColumnMaker(
          text: '${item.amount} x ${item.product.title}',
          width: 28, // 增大列宽适配泰文
          align: SunmiPrintAlign.LEFT),
      ColumnMaker(
          text: item.totalPrice.toString(),
          width: 12,
          align: SunmiPrintAlign.RIGHT),
    ]);
    
  2. 用printText手动模拟行布局
    放弃printRow,改用printText结合字符串填充实现对齐,绕开列宽计算的问题:

    // 模拟NO行的左右对齐
    String noLine = 'NO: '.padRight(15) + order.id.padLeft(15);
    await SunmiPrinter.printText(noLine);
    // 模拟菜单行的对齐
    String menuLine = '${item.amount} x ${item.product.title}'.padRight(25) + item.totalPrice.toString().padLeft(5);
    await SunmiPrinter.printText(menuLine);
    
  3. 升级包到最新版本
    检查sunmi_printer_plus的最新版本,看官方是否修复了非拉丁字符的排版bug,若有则升级后重新测试。

  4. 切换打印机字符集
    部分Sunmi打印机需要切换到支持泰文的字符集,可尝试添加初始化代码:

    await SunmiPrinter.setCharset('UTF-8');
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:35:14