Просмотр исходного кода

fix: 修正 TSC 打印机标签高度参数,解决打印多张问题
问题:
- 打印一次会出 2-3 张标签,内容分散在多张上
- 标签定位错误,上下半截错位
根本原因:
- setup() 的高度参数设置错误
- 之前设置为 38.1mm(仅标签高度)
- 打印机无法正确定位下一张标签起始位置

解决方案:
- 高度参数改为 41.1mm(标签 38.1mm + 间隙 3.0mm)
- 打印机需要知道完整周期长度(从一张标签开始到下一张开始)
- 传感器类型改为 sensor=0(垂直传感器)
- 添加坐标调整:左边距 13 dots,上边距 -20 dots

修改文件:
- src/com/mes/print/tsc/TscPrinter.java
* setup() 高度参数从 38.1 改为 41.1
* 所有元素坐标应用边距调整

wangxichen 1 день назад
Родитель
Сommit
a828f3288f
2 измененных файлов с 39 добавлено и 19 удалено
  1. 5 0
      src/com/mes/print/tsc/TSCLIB.java
  2. 34 19
      src/com/mes/print/tsc/TscPrinter.java

+ 5 - 0
src/com/mes/print/tsc/TSCLIB.java

@@ -45,6 +45,11 @@ public interface TSCLIB extends Library {
     int clearbuffer();
 
     /**
+     * 校准打印机(自动检测标签间隙)
+     */
+    int calibrate();
+
+    /**
      * 打印标签
      * @param sets 打印份数
      * @param copys 每份打印的标签数

+ 34 - 19
src/com/mes/print/tsc/TscPrinter.java

@@ -27,8 +27,10 @@ public class TscPrinter {
             }
 
             // 2. 设置标签参数
-            // 标签尺寸:100mm x 60mm,速度4,浓度10,间隙传感器
-            tsc.setup("100", "60", "4", "10", "1", "0", "0");
+            // 纸张尺寸:76.2mm x 38.1mm
+            // 关键:标签高度 = 实际高度 + 间隙高度
+            // 38.1 + 3.0 = 41.1mm(告诉打印机一个完整周期的长度)
+            tsc.setup("76.2", "41.1", "4", "10", "0", "3", "0");
 
             // 3. 清除缓冲区
             tsc.clearbuffer();
@@ -50,7 +52,10 @@ public class TscPrinter {
     }
 
     /**
-     * 绘制标签内容(根据你的 T09 模板布局)
+     * 绘制标签内容(根据精确布局坐标 + 边距调整)
+     * 标签尺寸:73.7mm x 38.2mm
+     * 边距:上 0mm,左 1.6mm
+     * 打印机分辨率:203 DPI (1mm ≈ 8 dots)
      */
     private void drawLabel(String sn, int printIndex) {
         // 根据 SN 前缀判断产品型号
@@ -60,29 +65,39 @@ public class TscPrinter {
         String date = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
         String serialNo = String.format("%07d", printIndex);
 
-        // 坐标单位:dot(1mm ≈ 8 dot,根据打印机分辨率)
-        // 以下坐标需要根据实际标签布局调整
+        // 左边距:1.6mm ≈ 13 dots
+        final int LEFT_MARGIN = 13;
+        // 上边距调整:整体上移 20 dots,确保内容在一张标签内
+        final int TOP_ADJUST = -20;
 
-        // 公司名第1行:广西巨石
-        tsc.windowsfont(50, 50, 32, 0, 0, 0, "SimSun", "广西巨石");
+        // 1. 二维码(左侧中间)
+        // 原始位置:(56, 115),加上左边距和上边距调整
+        tsc.qrcode(String.valueOf(56 + LEFT_MARGIN), String.valueOf(115 + TOP_ADJUST), "L", "4", "A", "0", sn);
 
-        // 公司名第2行:新能源科技有限公司
-        tsc.windowsfont(50, 90, 24, 0, 0, 0, "SimSun", "新能源科技有限公司");
+        // 2. 文本1 - 产品名称(右上角,2行)
+        // 原始位置:(267, 32),加上左边距和上边距调整
+        // 第1行:高压电池下壳体总成
+        tsc.windowsfont(267 + LEFT_MARGIN, 32 + TOP_ADJUST, 28, 0, 1, 0, "SimSun", "高压电池下壳体总成");
 
-        // 产品名:高压电池下壳体总成
-        tsc.windowsfont(400, 50, 28, 0, 0, 0, "SimSun", "高压电池下壳体总成");
+        // 第2行:产品型号(距离第1行约 10mm = 80 dots)
+        tsc.windowsfont(267 + LEFT_MARGIN, 112 + TOP_ADJUST, 24, 0, 0, 0, "Arial", productModel);
 
-        // 产品型号
-        tsc.windowsfont(400, 90, 24, 0, 0, 0, "Arial", productModel);
+        // 3. 文本2 - 公司名称(左上角,2行)
+        // 原始位置:(6, 32),加上左边距和上边距调整
+        // 第1行:广西巨石
+        tsc.windowsfont(6 + LEFT_MARGIN, 32 + TOP_ADJUST, 26, 0, 1, 0, "SimSun", "广西巨石");
 
-        // 二维码(批次号)
-        tsc.qrcode("50", "150", "M", "5", "A", "0", sn);
+        // 第2行:新能源科技有限公司(距离第1行约 10mm = 80 dots
+        tsc.windowsfont(6 + LEFT_MARGIN, 112 + TOP_ADJUST, 22, 0, 0, 0, "SimSun", "新能源科技有限公司");
 
-        // 日期和流水号
-        tsc.windowsfont(400, 300, 24, 0, 0, 0, "Arial", date + "  NO:" + serialNo);
+        // 4. 日期 + 流水号(右侧中间)
+        // 原始位置:(208, 160),加上左边距和上边距调整
+        String dateSerial = date + " NO:" + serialNo;
+        tsc.windowsfont(208 + LEFT_MARGIN, 160 + TOP_ADJUST, 24, 0, 0, 0, "Arial", dateSerial);
 
-        // 批次号文本
-        tsc.windowsfont(400, 350, 20, 0, 0, 0, "Arial", sn);
+        // 5. 批次号(右下角)
+        // 原始位置:(208, 248),加上左边距和上边距调整
+        tsc.windowsfont(208 + LEFT_MARGIN, 248 + TOP_ADJUST, 20, 0, 0, 0, "Arial", sn);
     }
 
     /**