C#中使用StringBuilder实现Epson热敏打印机ESC X字体大小调整求助
问题原因
你写的指令不生效是两个问题导致的:
- 爱普生ESC/POS协议里
ESC X指令要求后面跟2个连续字节参数,你之前的写法只传了1个参数,打印机识别不到完整指令自然不响应。 - 直接拼接int类型参数时,C#会自动将int转为字符串(比如15会转成ASCII字符
"1"和"5"),而不是你需要的单字节数值,会导致指令格式完全错误。
正确写法
先明确ESC X m nn三个参数的含义:
ESC:固定转义符\x1bX:固定指令字符m:字间距模式,可选值0(10CPI)、1(12CPI)、2(15CPI),常规场景传0即可nn:字体点阵大小,比如要15号字体传15,要24号字体传24,需转成char类型传递
示例代码如下:
const char ESC = '\x1b'; // 设置为15点阵大小字体 sb.Append(ESC + "X" + (char)0 + (char)15); // 如果要设置为24点阵更大字体,改成下面的写法 // sb.Append(ESC + "X" + (char)0 + (char)24);
补充通用方案
如果你的打印机机型不支持ESC X指令,可以用ESC/POS通用的字体放大指令ESC ! n,可以自定义宽高放大倍数,示例如下:
// 宽高均放大2倍,值为 0x10(宽度放大位) + 0x20(高度放大位)= 48 sb.Append(ESC + "!" + (char)48); // 要恢复默认大小传(char)0即可 // sb.Append(ESC + "!" + (char)0);
内容的提问来源于stack exchange,提问作者Mik AA
相关产品推荐
相关产品推荐

