跳转到内容

ESC/POS 指令

ESC/POS 是 Epson 开发的热敏打印机指令集,已成为 POS 打印机的行业标准,具有最好的兼容性。

ESC/POS 与 ESC 指令类似,同样使用二进制形式的控制指令。由于其广泛的行业采用,是小票打印的首选方案。

特性ESCESC/POS
指令格式二进制二进制
行业标准✅ Epson 标准
兼容性一般优秀
主要用途便携打印机POS 收银系统

初始化打印机,清除打印缓冲区,恢复默认设置。

ESC @
十六进制: 1B 40

打印缓冲区内容并换行。

LF
十六进制: 0A

打印缓冲区内容并回车。

CR
十六进制: 0D

向前走纸 n 个单位。

ESC J n
十六进制: 1B 4A n
参数范围说明
n0-255走纸点数

向前走纸 n 行。

ESC d n
十六进制: 1B 64 n
参数范围说明
n0-255走纸行数

设置字符的宽度和高度放大倍数。

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)
0x223倍宽3倍高 (3x3)
0x778倍宽8倍高 (8x8)

示例:

1D 21 11 // 设置倍宽倍高

设置文本对齐方式。

ESC a n
十六进制: 1B 61 n
n 值对齐方式
0左对齐
1居中
2右对齐

示例:

1B 61 01 // 居中对齐

开启或关闭加粗模式。

ESC E n
十六进制: 1B 45 n
n 值效果
0取消加粗
1启用加粗

设置下划线模式。

ESC - n
十六进制: 1B 2D n
n 值效果
0关闭下划线
11点下划线
22点下划线

设置黑白反转打印模式。

GS B n
十六进制: 1D 42 n
n 值效果
0关闭反白
1启用反白

选择字体类型。

ESC M n
十六进制: 1B 4D n
n 值字体
0字体 A (12x24)
1字体 B (9x17)

设置行间距。

ESC 3 n
十六进制: 1B 33 n
参数说明
n行间距(点数)

恢复默认行间距。

ESC 2
十六进制: 1B 32

设置条码的高度。

GS h n
十六进制: 1D 68 n
参数范围说明
n1-255条码高度(点)

示例:

1D 68 50 // 设置条码高度为 80 点

设置条码的宽度。

GS w n
十六进制: 1D 77 n
参数范围说明
n2-6条码宽度系数

设置条码下方可读字符 (HRI) 的打印位置。

GS H n
十六进制: 1D 48 n
n 值位置
0不打印
1条码上方
2条码下方
3上方和下方

打印一维条码。

GS k m n [数据]
十六进制: 1D 6B m n [数据]
参数说明
m条码类型
n数据长度
m 值条码类型数据要求
0UPC-A11-12 位数字
1UPC-E6-8 位数字
2EAN-1312-13 位数字
3EAN-87-8 位数字
4CODE39字母数字
5ITF偶数位数字
6CODABAR数字 + A-D
65UPC-A11-12 位数字
66UPC-E6-8 位数字
67EAN-1312-13 位数字
68EAN-87-8 位数字
69CODE39字母数字
70ITF偶数位数字
71CODABAR数字 + A-D
72CODE93ASCII
73CODE128ASCII(推荐)

示例:

1D 68 60 // 设置条码高度 96
1D 77 03 // 设置条码宽度 3
1D 48 02 // HRI 打印在下方
1D 6B 49 0D 7B 42 31 32 33 34 35 36 37 38 39 30 31 32 33
// 打印 CODE128 条码 "1234567890123"

QR Code 打印需要按顺序发送多条指令:

GS ( k pL pH cn fn n
十六进制: 1D 28 6B 03 00 31 43 n
参数范围说明
n1-16单元格大小(点)
GS ( k pL pH cn fn n
十六进制: 1D 28 6B 03 00 31 45 n
n 值纠错级别纠错能力
48 (0x30)L7%
49 (0x31)M15%
50 (0x32)Q25%
51 (0x33)H30%
GS ( k pL pH cn fn m [数据]
十六进制: 1D 28 6B pL pH 31 50 30 [数据]
参数说明
pL pH数据长度 + 3(低位 高位)
数据QR Code 内容
GS ( k pL pH cn fn m
十六进制: 1D 28 6B 03 00 31 51 30

完整示例:

1D 28 6B 03 00 31 43 06 // 设置单元大小为 6
1D 28 6B 03 00 31 45 31 // 设置纠错级别为 M
1D 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 m
十六进制: 1D 56 m
m 值效果
0全切
1半切

走纸 n 行后切纸。

GS V m n
十六进制: 1D 56 m n
m 值效果
65 (0x41)走纸 n 行后全切
66 (0x42)走纸 n 行后半切

示例:

1D 56 42 03 // 走纸 3 行后切纸

打印光栅位图图片。

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垂直点数(高度)
数据位图数据

控制钱箱开启。

ESC p m t1 t2
十六进制: 1B 70 m t1 t2
参数说明
m钱箱引脚(0 或 1)
t1开启时间(t1 × 2ms)
t2关闭时间(t2 × 2ms)

示例:

1B 70 00 19 FA // 打开钱箱

实时查询打印机状态。

DLE EOT n
十六进制: 10 04 n
n 值查询内容
1打印机状态
2脱机状态
3错误状态
4纸张状态

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 // 纠错级别 M
1D 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 // 切纸
┌─────────────────────────────┐
│ XX便利店 │ ← 居中、倍宽倍高
│ 订单号: 20240115001 │ ← 居中、正常大小
│ ════════════════════════════│
│ 可乐 500ml x2 ¥6.00 │ ← 左对齐
│ 薯片 大包 x1 ¥8.50 │
│ 矿泉水 x3 ¥4.50 │
│ ────────────────────────────│
│ 合计: ¥19.00 │ ← 倍高、加粗
│ │
│ [二维码] │ ← 居中
│ 扫码关注店铺 │
│ │
│ ||||||||||||||| │ ← 条码
│ 6901234567890 │
└─────────────────────────────┘

如需在各语言中使用 ESC/POS 指令,请参考:

ESC/POS 完整指令文档 (PDF)