ESC/POS 指令
ESC/POS 是 Epson 开发的热敏打印机指令集,已成为 POS 打印机的行业标准,具有最好的兼容性。
ESC/POS 与 ESC 指令类似,同样使用二进制形式的控制指令。由于其广泛的行业采用,是小票打印的首选方案。
与 ESC 指令对比
Section titled “与 ESC 指令对比”| 特性 | ESC | ESC/POS |
|---|---|---|
| 指令格式 | 二进制 | 二进制 |
| 行业标准 | 否 | ✅ Epson 标准 |
| 兼容性 | 一般 | 优秀 |
| 主要用途 | 便携打印机 | POS 收银系统 |
打印机控制指令
Section titled “打印机控制指令”初始化打印机 (ESC @)
Section titled “初始化打印机 (ESC @)”初始化打印机,清除打印缓冲区,恢复默认设置。
ESC @十六进制: 1B 40打印并换行 (LF)
Section titled “打印并换行 (LF)”打印缓冲区内容并换行。
LF十六进制: 0A打印并回车 (CR)
Section titled “打印并回车 (CR)”打印缓冲区内容并回车。
CR十六进制: 0D走纸 (ESC J)
Section titled “走纸 (ESC J)”向前走纸 n 个单位。
ESC J n十六进制: 1B 4A n| 参数 | 范围 | 说明 |
|---|---|---|
| n | 0-255 | 走纸点数 |
走纸 n 行 (ESC d)
Section titled “走纸 n 行 (ESC d)”向前走纸 n 行。
ESC d n十六进制: 1B 64 n| 参数 | 范围 | 说明 |
|---|---|---|
| n | 0-255 | 走纸行数 |
文本格式指令
Section titled “文本格式指令”设置字符大小 (GS !)
Section titled “设置字符大小 (GS !)”设置字符的宽度和高度放大倍数。
GS ! n十六进制: 1D 21 n参数 n 的位设置:
- Bit 0-2: 水平放大倍数 (0-7,表示 1-8 倍)
- Bit 4-6: 垂直放大倍数 (0-7,表示 1-8 倍)
| n 值 | 效果 |
|---|---|
0x00 | 正常大小 (1x1) |
0x10 | 倍高 (1x2) |
0x01 | 倍宽 (2x1) |
0x11 | 倍宽倍高 (2x2) |
0x22 | 3倍宽3倍高 (3x3) |
0x77 | 8倍宽8倍高 (8x8) |
示例:
1D 21 11 // 设置倍宽倍高设置对齐方式 (ESC a)
Section titled “设置对齐方式 (ESC a)”设置文本对齐方式。
ESC a n十六进制: 1B 61 n| n 值 | 对齐方式 |
|---|---|
| 0 | 左对齐 |
| 1 | 居中 |
| 2 | 右对齐 |
示例:
1B 61 01 // 居中对齐设置加粗 (ESC E)
Section titled “设置加粗 (ESC E)”开启或关闭加粗模式。
ESC E n十六进制: 1B 45 n| n 值 | 效果 |
|---|---|
| 0 | 取消加粗 |
| 1 | 启用加粗 |
设置下划线 (ESC -)
Section titled “设置下划线 (ESC -)”设置下划线模式。
ESC - n十六进制: 1B 2D n| n 值 | 效果 |
|---|---|
| 0 | 关闭下划线 |
| 1 | 1点下划线 |
| 2 | 2点下划线 |
设置反白 (GS B)
Section titled “设置反白 (GS B)”设置黑白反转打印模式。
GS B n十六进制: 1D 42 n| n 值 | 效果 |
|---|---|
| 0 | 关闭反白 |
| 1 | 启用反白 |
设置字体 (ESC M)
Section titled “设置字体 (ESC M)”选择字体类型。
ESC M n十六进制: 1B 4D n| n 值 | 字体 |
|---|---|
| 0 | 字体 A (12x24) |
| 1 | 字体 B (9x17) |
设置行间距 (ESC 3)
Section titled “设置行间距 (ESC 3)”设置行间距。
ESC 3 n十六进制: 1B 33 n| 参数 | 说明 |
|---|---|
| n | 行间距(点数) |
恢复默认行间距 (ESC 2)
Section titled “恢复默认行间距 (ESC 2)”恢复默认行间距。
ESC 2十六进制: 1B 32条码打印指令
Section titled “条码打印指令”设置条码高度 (GS h)
Section titled “设置条码高度 (GS h)”设置条码的高度。
GS h n十六进制: 1D 68 n| 参数 | 范围 | 说明 |
|---|---|---|
| n | 1-255 | 条码高度(点) |
示例:
1D 68 50 // 设置条码高度为 80 点设置条码宽度 (GS w)
Section titled “设置条码宽度 (GS w)”设置条码的宽度。
GS w n十六进制: 1D 77 n| 参数 | 范围 | 说明 |
|---|---|---|
| n | 2-6 | 条码宽度系数 |
设置 HRI 字符位置 (GS H)
Section titled “设置 HRI 字符位置 (GS H)”设置条码下方可读字符 (HRI) 的打印位置。
GS H n十六进制: 1D 48 n| n 值 | 位置 |
|---|---|
| 0 | 不打印 |
| 1 | 条码上方 |
| 2 | 条码下方 |
| 3 | 上方和下方 |
打印条码 (GS k)
Section titled “打印条码 (GS k)”打印一维条码。
GS k m n [数据]十六进制: 1D 6B m n [数据]| 参数 | 说明 |
|---|---|
| m | 条码类型 |
| n | 数据长度 |
| m 值 | 条码类型 | 数据要求 |
|---|---|---|
| 0 | UPC-A | 11-12 位数字 |
| 1 | UPC-E | 6-8 位数字 |
| 2 | EAN-13 | 12-13 位数字 |
| 3 | EAN-8 | 7-8 位数字 |
| 4 | CODE39 | 字母数字 |
| 5 | ITF | 偶数位数字 |
| 6 | CODABAR | 数字 + A-D |
| 65 | UPC-A | 11-12 位数字 |
| 66 | UPC-E | 6-8 位数字 |
| 67 | EAN-13 | 12-13 位数字 |
| 68 | EAN-8 | 7-8 位数字 |
| 69 | CODE39 | 字母数字 |
| 70 | ITF | 偶数位数字 |
| 71 | CODABAR | 数字 + A-D |
| 72 | CODE93 | ASCII |
| 73 | CODE128 | ASCII(推荐) |
示例:
1D 68 60 // 设置条码高度 961D 77 03 // 设置条码宽度 31D 48 02 // HRI 打印在下方1D 6B 49 0D 7B 42 31 32 33 34 35 36 37 38 39 30 31 32 33 // 打印 CODE128 条码 "1234567890123"二维码打印指令
Section titled “二维码打印指令”QR Code 打印步骤
Section titled “QR Code 打印步骤”QR Code 打印需要按顺序发送多条指令:
1. 设置单元大小 (GS ( k)
Section titled “1. 设置单元大小 (GS ( k)”GS ( k pL pH cn fn n十六进制: 1D 28 6B 03 00 31 43 n| 参数 | 范围 | 说明 |
|---|---|---|
| n | 1-16 | 单元格大小(点) |
2. 设置纠错级别 (GS ( k)
Section titled “2. 设置纠错级别 (GS ( k)”GS ( k pL pH cn fn n十六进制: 1D 28 6B 03 00 31 45 n| n 值 | 纠错级别 | 纠错能力 |
|---|---|---|
| 48 (0x30) | L | 7% |
| 49 (0x31) | M | 15% |
| 50 (0x32) | Q | 25% |
| 51 (0x33) | H | 30% |
3. 存储数据 (GS ( k)
Section titled “3. 存储数据 (GS ( k)”GS ( k pL pH cn fn m [数据]十六进制: 1D 28 6B pL pH 31 50 30 [数据]| 参数 | 说明 |
|---|---|
| pL pH | 数据长度 + 3(低位 高位) |
| 数据 | QR Code 内容 |
4. 打印 (GS ( k)
Section titled “4. 打印 (GS ( k)”GS ( k pL pH cn fn m十六进制: 1D 28 6B 03 00 31 51 30完整示例:
1D 28 6B 03 00 31 43 06 // 设置单元大小为 61D 28 6B 03 00 31 45 31 // 设置纠错级别为 M1D 28 6B 13 00 31 50 30 68 74 74 70 73 3A 2F 2F 65 78 61 6D 70 6C 65 2E 63 6F 6D // 存储数据 "https://example.com"1D 28 6B 03 00 31 51 30 // 打印二维码全切纸 (GS V)
Section titled “全切纸 (GS V)”执行全切纸动作。
GS V m十六进制: 1D 56 m| m 值 | 效果 |
|---|---|
| 0 | 全切 |
| 1 | 半切 |
走纸后切纸 (GS V)
Section titled “走纸后切纸 (GS V)”走纸 n 行后切纸。
GS V m n十六进制: 1D 56 m n| m 值 | 效果 |
|---|---|
| 65 (0x41) | 走纸 n 行后全切 |
| 66 (0x42) | 走纸 n 行后半切 |
示例:
1D 56 42 03 // 走纸 3 行后切纸图片打印指令
Section titled “图片打印指令”打印光栅位图 (GS v 0)
Section titled “打印光栅位图 (GS v 0)”打印光栅位图图片。
GS v 0 m xL xH yL yH [数据]十六进制: 1D 76 30 m xL xH yL yH [数据]| 参数 | 说明 |
|---|---|
| m | 打印模式(0=正常,1=倍宽,2=倍高,3=倍宽倍高) |
| xL xH | 水平字节数(宽度/8) |
| yL yH | 垂直点数(高度) |
| 数据 | 位图数据 |
钱箱控制指令
Section titled “钱箱控制指令”打开钱箱 (ESC p)
Section titled “打开钱箱 (ESC p)”控制钱箱开启。
ESC p m t1 t2十六进制: 1B 70 m t1 t2| 参数 | 说明 |
|---|---|
| m | 钱箱引脚(0 或 1) |
| t1 | 开启时间(t1 × 2ms) |
| t2 | 关闭时间(t2 × 2ms) |
示例:
1B 70 00 19 FA // 打开钱箱状态查询指令
Section titled “状态查询指令”查询打印机状态 (DLE EOT)
Section titled “查询打印机状态 (DLE EOT)”实时查询打印机状态。
DLE EOT n十六进制: 10 04 n| n 值 | 查询内容 |
|---|---|
| 1 | 打印机状态 |
| 2 | 脱机状态 |
| 3 | 错误状态 |
| 4 | 纸张状态 |
完整小票示例
Section titled “完整小票示例”示例指令序列
Section titled “示例指令序列”1B 40 // 初始化打印机
// 打印标题1B 61 01 // 居中1D 21 11 // 倍宽倍高[GBK: XX便利店]0A
// 打印副标题1D 21 00 // 恢复正常大小[GBK: 订单号: 20240115001]0A[GBK: ================================]0A
// 打印商品列表1B 61 00 // 左对齐[GBK: 可乐 500ml x2 ¥6.00]0A[GBK: 薯片 大包 x1 ¥8.50]0A[GBK: 矿泉水 x3 ¥4.50]0A[GBK: --------------------------------]0A
// 打印合计1D 21 10 // 倍高1B 45 01 // 加粗[GBK: 合计: ¥19.00]1B 45 00 // 取消加粗1D 21 00 // 恢复正常0A 0A
// 打印二维码1B 61 01 // 居中1D 28 6B 03 00 31 43 05 // 二维码单元大小1D 28 6B 03 00 31 45 31 // 纠错级别 M1D 28 6B ... 31 50 30 [URL数据] // 存储数据1D 28 6B 03 00 31 51 30 // 打印二维码[GBK: 扫码关注店铺]0A
// 打印条码1D 68 50 // 条码高度1D 77 02 // 条码宽度1D 48 02 // HRI 位置1D 6B 49 ... [条码数据] // 打印条码
// 走纸并切纸1B 64 03 // 走纸 3 行1D 56 42 00 // 切纸收银小票结构
Section titled “收银小票结构”┌─────────────────────────────┐│ XX便利店 │ ← 居中、倍宽倍高│ 订单号: 20240115001 │ ← 居中、正常大小│ ════════════════════════════││ 可乐 500ml x2 ¥6.00 │ ← 左对齐│ 薯片 大包 x1 ¥8.50 ││ 矿泉水 x3 ¥4.50 ││ ────────────────────────────││ 合计: ¥19.00 │ ← 倍高、加粗│ ││ [二维码] │ ← 居中│ 扫码关注店铺 ││ ││ ||||||||||||||| │ ← 条码│ 6901234567890 │└─────────────────────────────┘SDK 集成
Section titled “SDK 集成”如需在各语言中使用 ESC/POS 指令,请参考:
- Dart SDK - Flutter 跨平台开发
- Java SDK - Android 原生开发
- JavaScript SDK - 小程序开发
- OpenHarmony SDK - HarmonyOS / OpenHarmony 应用
- Objective-C SDK - iOS 原生开发
- Swift SDK - iOS/macOS 开发