From 539d392212af80ad20b2d52285413571dec02a6f Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Mon, 1 Sep 2025 10:53:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=AA=E5=90=91=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/utils/CoordinateTransformer.java | 39 ++++++++++--------- .../modules/base/utils/ZplGenerator.java | 11 ++++-- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/gaotao/modules/base/utils/CoordinateTransformer.java b/src/main/java/com/gaotao/modules/base/utils/CoordinateTransformer.java index f47ed35..91dcfeb 100644 --- a/src/main/java/com/gaotao/modules/base/utils/CoordinateTransformer.java +++ b/src/main/java/com/gaotao/modules/base/utils/CoordinateTransformer.java @@ -10,23 +10,23 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Data public class CoordinateTransformer { - + private String orientation; private CanvasSize canvasSize; private TransformConfig config; - + public CoordinateTransformer(String orientation, CanvasSize canvasSize) { this.orientation = orientation != null ? orientation : "portrait"; this.canvasSize = canvasSize; this.config = getConfig(); } - + /** * 获取转换配置 */ private TransformConfig getConfig() { TransformConfig config = new TransformConfig(); - + if ("landscape".equals(this.orientation)) { config.setScaleX(1.0); config.setScaleY(1.0); @@ -39,10 +39,10 @@ public class CoordinateTransformer { config.setOffsetX(0.0); config.setOffsetY(0.0); } - + return config; } - + /** * 将画布坐标转换为ZPL坐标 */ @@ -53,14 +53,15 @@ public class CoordinateTransformer { (int) Math.round(canvasY * config.getScaleY()) ); } else { + int width = canvasSize.getWidth(); // 横向打印需要坐标旋转变换 return new ZplCoordinate( - (int) Math.round(canvasX * config.getScaleX()), - (int) Math.round(canvasY * config.getScaleY()) + (int) Math.round(canvasY * config.getScaleX()), + (int) Math.round((width-canvasX-100) * config.getScaleY()) ); } } - + /** * 将ZPL坐标转换为画布坐标 */ @@ -78,14 +79,14 @@ public class CoordinateTransformer { ); } } - + /** * 验证坐标是否在画布范围内 */ public boolean isInBounds(int x, int y) { return x >= 0 && x <= canvasSize.getWidth() && y >= 0 && y <= canvasSize.getHeight(); } - + /** * 将坐标限制在画布范围内 */ @@ -95,7 +96,7 @@ public class CoordinateTransformer { Math.max(0, Math.min(y, canvasSize.getHeight() - elementHeight)) ); } - + /** * 画布尺寸 */ @@ -105,7 +106,7 @@ public class CoordinateTransformer { private int height; private String name; private String description; - + public CanvasSize(int width, int height, String name, String description) { this.width = width; this.height = height; @@ -113,7 +114,7 @@ public class CoordinateTransformer { this.description = description; } } - + /** * 转换配置 */ @@ -124,7 +125,7 @@ public class CoordinateTransformer { private double offsetX; private double offsetY; } - + /** * ZPL坐标 */ @@ -132,13 +133,13 @@ public class CoordinateTransformer { public static class ZplCoordinate { private int x; private int y; - + public ZplCoordinate(int x, int y) { this.x = x; this.y = y; } } - + /** * 画布坐标 */ @@ -146,10 +147,10 @@ public class CoordinateTransformer { public static class CanvasCoordinate { private int x; private int y; - + public CanvasCoordinate(int x, int y) { this.x = x; this.y = y; } } -} \ No newline at end of file +} diff --git a/src/main/java/com/gaotao/modules/base/utils/ZplGenerator.java b/src/main/java/com/gaotao/modules/base/utils/ZplGenerator.java index cdc087f..93070fd 100644 --- a/src/main/java/com/gaotao/modules/base/utils/ZplGenerator.java +++ b/src/main/java/com/gaotao/modules/base/utils/ZplGenerator.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; import com.google.zxing.*; @@ -348,8 +349,12 @@ public class ZplGenerator { boolean showContent = element.getShowContent() != null ? element.getShowContent() : true; // 将毫米转换为ZPL单位 - double widthMM = element.getWidth() != null ? element.getWidth().doubleValue() : 2.0; - int width = Math.max(1, Math.min(10, (int) Math.round(widthMM * 1.5))); + BigDecimal width = (element.getWidth() != null ? element.getWidth() : new BigDecimal("0.33")) + .multiply(BigDecimal.valueOf(this.dpi)) + .divide(BigDecimal.valueOf(25.4), 2, RoundingMode.HALF_UP) + .setScale(0, RoundingMode.HALF_UP) + .min(BigDecimal.TEN); + // 高度:毫米转换为点数 int height = Math.max(1, Math.round((element.getHeight() != null ? element.getHeight() : 15) * this.dpi / 25.4f)); @@ -386,7 +391,7 @@ public class ZplGenerator { String data = element.getData() != null ? element.getData() : ""; return String.format("^FO%d,%d^BY%d%s,%d%s^FD%s^FS", - x, y, width, zplCommand, height, additionalParams, data); + x, y, width.setScale(3, RoundingMode.HALF_UP).intValue(), zplCommand, height, additionalParams, data); } /**