escpos.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package service
  2. // ESC/POS commands for 58mm thermal printer (EMD807 compatible)
  3. const (
  4. ESC = 0x1B
  5. GS = 0x1D
  6. )
  7. var (
  8. InitCmd = []byte{ESC, '@'} // 初始化打印机
  9. AlignLeftCmd = []byte{ESC, 'a', 0} // 左对齐
  10. AlignCenterCmd = []byte{ESC, 'a', 1} // 居中对齐
  11. CutPaperCmd = []byte{GS, 'V', 66, 0} // 切纸
  12. DoubleHeightCmd = []byte{ESC, '!', 0x11} // 双倍高度
  13. NormalCmd = []byte{ESC, '!', 0x00} // 正常大小
  14. BoldOnCmd = []byte{ESC, 'E', 1} // 加粗
  15. BoldOffCmd = []byte{ESC, 'E', 0} // 取消加粗
  16. )
  17. // ESCPOS_Text 打印一行文字(自动加换行符)
  18. func ESCPOS_Text(text string) []byte {
  19. return append([]byte(text), '\n')
  20. }
  21. // ESCPOS_QRCode 打印二维码(GS ( k 指令,兼容 EMD807)
  22. func ESCPOS_QRCode(data string) []byte {
  23. // GS ( k pL pH cn fn [params]
  24. // cn=49 (QR Code), fn=65 (model), fn=67 (size), fn=80 (store), fn=81 (print)
  25. pL := byte(len(data) + 3)
  26. pH := byte((len(data) + 3) >> 8)
  27. cmd := []byte{GS, '('} // 模型选择
  28. cmd = append(cmd, 0x04, 0x00, 0x31, 0x41, 0x32, 0x00) // QR Model 2
  29. cmd = append(cmd, 0x03, 0x00, 0x31, 0x43, 0x08) // Cell size 8
  30. // Store data
  31. cmd = append(cmd, GS, '(')
  32. cmd = append(cmd, pL, pH, 0x31, 0x50, 0x30) // fn=80 store
  33. cmd = append(cmd, []byte(data)...)
  34. // Print QR
  35. cmd = append(cmd, GS, '(')
  36. cmd = append(cmd, 0x03, 0x00, 0x31, 0x51, 0x30) // fn=81 print
  37. return cmd
  38. }