escpos.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package service
  2. // ESC 指令集 for EMD807 (79.5mm 热敏打印机)
  3. // Font A = 12×24 dots, 每行 32 字符; Font B = 9×17 dots, 每行 42 字符
  4. const (
  5. ESC = 0x1B
  6. GS = 0x1D
  7. DC2 = 0x12 // 设备控制
  8. )
  9. var (
  10. InitCmd = []byte{ESC, '@'} // 初始化打印机
  11. SelfTestCmd = []byte{DC2, 'T'} // DC2 T — 打印自测页
  12. AlignLeftCmd = []byte{ESC, 'a', 0} // 左对齐
  13. AlignCenterCmd = []byte{ESC, 'a', 1} // 居中对齐
  14. CutPaperCmd = []byte{ESC, 'i'} // ESC i — EMD807 全切纸
  15. HalfCutCmd = []byte{ESC, 'm'} // ESC m — 半切(留一点连接)
  16. DoubleHeightCmd = []byte{ESC, '!', 0x11} // 双倍高度+宽度
  17. NormalCmd = []byte{ESC, '!', 0x00} // 正常大小
  18. BoldOnCmd = []byte{ESC, 'E', 1} // 加粗
  19. BoldOffCmd = []byte{ESC, 'E', 0} // 取消加粗
  20. FontBCmd = []byte{ESC, 'M', 1} // Font B (9×17, 42 chars/line)
  21. PaperStatusCmd = []byte{ESC, 'v'} // 查询纸张状态
  22. FeedLineCmd = []byte{0x0A} // 换行
  23. )
  24. // ESCPOS_Text 打印一行文字(自动加换行符)
  25. func ESCPOS_Text(text string) []byte {
  26. return append([]byte(text), '\n')
  27. }
  28. // ESCPOS_QRCode 打印二维码(GS ( k 指令)
  29. func ESCPOS_QRCode(data string) []byte {
  30. pL := byte(len(data) + 3)
  31. pH := byte((len(data) + 3) >> 8)
  32. cmd := []byte{GS, '('}
  33. cmd = append(cmd, 0x04, 0x00, 0x31, 0x41, 0x32, 0x00) // QR Model 2
  34. cmd = append(cmd, 0x03, 0x00, 0x31, 0x43, 0x08) // Cell size 8
  35. // Store data
  36. cmd = append(cmd, GS, '(')
  37. cmd = append(cmd, pL, pH, 0x31, 0x50, 0x30)
  38. cmd = append(cmd, []byte(data)...)
  39. // Print QR
  40. cmd = append(cmd, GS, '(')
  41. cmd = append(cmd, 0x03, 0x00, 0x31, 0x51, 0x30)
  42. return cmd
  43. }