Quellcode durchsuchen

fix: 回退到可打印版本——保留优化排版但用ESCPOS_Text空行替代FeedLineCmd

lq vor 1 Monat
Ursprung
Commit
2662fb5ced

+ 16 - 8
internal/modules/printer/service/escpos.go

@@ -30,15 +30,23 @@ func ESCPOS_Text(text string) []byte {
 	return append([]byte(text), '\n')
 }
 
-// ESCPOS_QRCode 打印二维码(EMD807 使用 US Q 指令)
+// ESCPOS_QRCode 打印二维码(GS ( k 指令)
 func ESCPOS_QRCode(data string) []byte {
-	// US Q n m <data> — EMD807 二维码指令
-	// n = len(data) + 3 (pL + pH + m)
-	// m = 0x31 (QR code)
-	n := byte(len(data) + 3)
-	cmd := []byte{0x1F, 'Q'} // US Q
-	cmd = append(cmd, n, 0x00) // pL, pH
-	cmd = append(cmd, 0x31)    // m = QR code
+	pL := byte(len(data) + 3)
+	pH := byte((len(data) + 3) >> 8)
+
+	cmd := []byte{GS, '('}
+	cmd = append(cmd, 0x04, 0x00, 0x31, 0x41, 0x32, 0x00) // QR Model 2
+	cmd = append(cmd, 0x03, 0x00, 0x31, 0x43, 0x08)         // Cell size 8
+
+	// Store data
+	cmd = append(cmd, GS, '(')
+	cmd = append(cmd, pL, pH, 0x31, 0x50, 0x30)
 	cmd = append(cmd, []byte(data)...)
+
+	// Print QR
+	cmd = append(cmd, GS, '(')
+	cmd = append(cmd, 0x03, 0x00, 0x31, 0x51, 0x30)
+
 	return cmd
 }

+ 10 - 13
internal/modules/printer/service/service.go

@@ -56,19 +56,19 @@ func (s *PrintService) PrintTicket(printerID uint, lotName, channelCode, plateNo
 	if useCSN {
 		var buf []byte
 		add := func(b []byte) { buf = append(buf, b...) }
-		line := "--------------------------------" // 32 chars
+		line := "--------------------------------"
 
 		// 标题
 		add(InitCmd)
 		add(AlignCenterCmd); add(DoubleHeightCmd); add(BoldOnCmd)
 		add(ESCPOS_Text("PARKING TICKET"))
 		add(BoldOffCmd); add(NormalCmd)
-		add(FeedLineCmd)
+		add(ESCPOS_Text(""))
 
-		// 停车场信息
+		// 停车场
 		add(ESCPOS_Text(lotName))
 		add(ESCPOS_Text("A-General Car"))
-		add(FeedLineCmd)
+		add(ESCPOS_Text(""))
 
 		// 风险提示
 		add(BoldOnCmd)
@@ -76,31 +76,28 @@ func (s *PrintService) PrintTicket(printerID uint, lotName, channelCode, plateNo
 		add(BoldOffCmd)
 		add(ESCPOS_Text(line))
 
-		// 入场信息(左对齐)
+		// 入场信息
 		add(AlignLeftCmd)
 		add(ESCPOS_Text("In-Time::" + now))
 		if channelCode != "" { add(ESCPOS_Text("InGate::" + channelCode)) }
 		if plateNo != "" { add(ESCPOS_Text("Veh No::" + plateNo)) }
 		add(ESCPOS_Text(line))
-
-		// 票号
 		add(ESCPOS_Text("Slip No::" + slipNo))
 		add(ESCPOS_Text(line))
 
-		// 二维码(居中)
-		add(FeedLineCmd)
+		// 二维码
+		add(ESCPOS_Text(""))
 		add(AlignCenterCmd)
 		add(ESCPOS_QRCode(ticketNo))
-		add(FeedLineCmd)
+		add(ESCPOS_Text(""))
 
-		// 支付提示(居中)
-		add(AlignCenterCmd)
+		// 支付提示
 		add(ESCPOS_Text("SCAN AND PAY WITH"))
 		add(ESCPOS_Text("NEW THE CANADIA BANK APP"))
 
 		// 切纸
 		add(InitCmd)
-		add(FeedLineCmd); add(FeedLineCmd); add(FeedLineCmd)
+		add(ESCPOS_Text("")); add(ESCPOS_Text("")); add(ESCPOS_Text(""))
 		add(CutPaperCmd)
 
 		Csn_WriteData(buf)