C#调用RawPrinterHelper时如何向点阵票据打印机发送加粗字号调整命令
解决方案
你当前使用的RawPrinterHelper是直接向打印机发送裸控制指令,市面绝大多数点阵票据打印机都兼容ESC/POS指令集,直接在需要修改格式的文本前后插入对应控制指令,即可实现加粗、字号调整效果,无需调用额外API。
常用格式控制指令定义
- 开启加粗:
\x1B\x45\x01(ASCII对应:ESC + 'E' + 1) - 关闭加粗:
\x1B\x45\x00(ASCII对应:ESC + 'E' + 0) - 恢复正常字号:
\x1D\x21\x00(ASCII对应:GS + '!' + 0) - 宽度加倍字号:
\x1D\x21\x20(ASCII对应:GS + '!' + 32) - 高度加倍字号:
\x1D\x21\x10(ASCII对应:GS + '!' + 16) - 宽高均加倍字号:
\x1D\x21\x30(ASCII对应:GS + '!' + 48)
修改后代码示例
以下示例实现首行标题用双倍大小、第三行加粗的效果,你可以根据实际需求调整格式生效的行范围:
public static void PrintInvoice(string PrinterName, Ticket ticket) { // 用StringBuilder拼接比字符串+操作性能更好,内容多的时候差距明显 StringBuilder printContent = new StringBuilder(); // 原有切纸指令保留 string CUT_COMMAND = Convert.ToString((char)29) + "V" + Convert.ToString((char)66) + Convert.ToString((char)0); for (int i = 0; i < ticket.Data.Count; i++) { string line = ticket.Data[i]; if (i == 0) { // 首行设置为宽高加倍字号 printContent.Append((char)29 + "!" + (char)48); printContent.Append(line + Environment.NewLine); // 打印完标题立即恢复正常字号,避免后续内容格式错乱 printContent.Append((char)29 + "!" + (char)0); } else if (i == 2) { // 第三行开启加粗 printContent.Append((char)27 + "E" + (char)1); printContent.Append(line + Environment.NewLine); // 打印完立即关闭加粗 printContent.Append((char)27 + "E" + (char)0); } else { // 普通行直接打印 printContent.Append(line + Environment.NewLine); } } printContent.Append(CUT_COMMAND); RawPrinterHelper.SendStringToPrinter(PrinterName, printContent.ToString()); }
注意事项
- 格式指令全局生效,设置后所有后续打印内容都会沿用该格式,不需要特殊格式时一定要插入恢复默认的指令
- 少部分小众品牌打印机可能使用自定义指令集,可查询对应型号的编程手册,指令插入逻辑和上述示例完全一致
内容的提问来源于stack exchange,提问作者user2997393
相关产品推荐
相关产品推荐

