From 4fbe38b04aada53bebef1f83ad8a2a3ec30d25af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=A4=B4=E4=BA=BA?= <3076767823@qq.com> Date: Mon, 17 Mar 2025 10:08:19 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8Dms439=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E6=9C=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 ++ .../com/dpkj/common/utils/TemplateUtils.java | 47 +++++++++++++------ .../print/controller/RegisterController.java | 4 +- .../print/request/ReceiptPrintRequest.java | 4 +- .../service/impl/MS439PrintServiceImpl.java | 1 - 5 files changed, 41 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index f786f3d..fc7b873 100644 --- a/pom.xml +++ b/pom.xml @@ -100,6 +100,11 @@ core 3.4.1 + + com.google.zxing + javase + 3.4.1 + diff --git a/src/main/java/com/dpkj/common/utils/TemplateUtils.java b/src/main/java/com/dpkj/common/utils/TemplateUtils.java index 2aba8ee..02196ad 100644 --- a/src/main/java/com/dpkj/common/utils/TemplateUtils.java +++ b/src/main/java/com/dpkj/common/utils/TemplateUtils.java @@ -5,8 +5,11 @@ import com.dpkj.common.exception.RRException; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.common.BitMatrix; +import com.google.zxing.oned.Code128Writer; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; +import com.google.zxing.client.j2se.MatrixToImageWriter; + import lombok.extern.slf4j.Slf4j; import org.jsoup.Jsoup; import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebApplicationContext; @@ -91,9 +94,9 @@ public class TemplateUtils { // 保存图片 if (saveDir != null && !"".equals(saveDir.toString())) { - String outputPath = saveDir.toString() + "\\genera_image_" + System.currentTimeMillis() + ".png"; + String outputPath = saveDir.toString() + "/genera_image_" + System.currentTimeMillis() + ".png"; ImageIO.write(image, "PNG", new File(outputPath)); - saveDir.reverse(); + saveDir.delete(0, saveDir.length()); saveDir.append(outputPath); } ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); @@ -141,10 +144,11 @@ public class TemplateUtils { // 判单是否有图片生成,统一后面采用的是_2base64Type String[] split = key.split("_"); if (split.length > 1 && split[1].equals("2base64Type")) { - int width = split.length > 2 ? Integer.parseInt(split[2]) : 100; - int height = split.length > 3 ? Integer.parseInt(split[3]) : 100; + int type = split.length > 2 ? Integer.parseInt(split[2]) : 1; + int width = split.length > 2 ? Integer.parseInt(split[3]) : 100; + int height = split.length > 3 ? Integer.parseInt(split[4]) : 100; // 如果是图片类型,需要进行base64转换 - String base64 = this.generateQRCode(String.valueOf(data.get(key)), width, height); + String base64 = this.generateQRCode(type, String.valueOf(data.get(key)), width, height); context.setVariable(split[0], "data:image/jpeg;base64," + base64); } else { // 普通字段直接设置 @@ -161,18 +165,31 @@ public class TemplateUtils { * 根据内容生成二维码 * @param content 转换内容 */ - private String generateQRCode(String content, int width, int height) { + private String generateQRCode(int type, String content, int width, int height) { try { - Map hints = new HashMap<>(); - hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置字符编码为 UTF-8 - hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // 设置纠错级别 + BufferedImage qrImage = null; + BitMatrix bitMatrix = null; + if (type == 1) { + Map hints = new HashMap<>(); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置字符编码为 UTF-8 + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // 设置纠错级别 - QRCodeWriter qrCodeWriter = new QRCodeWriter(); - BitMatrix bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints); + QRCodeWriter qrCodeWriter = new QRCodeWriter(); + bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints); + + qrImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + }else if (type == 2) { + Map hints = new HashMap<>(); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); + + Code128Writer barcodeWriter = new Code128Writer(); + bitMatrix = barcodeWriter.encode(content, BarcodeFormat.CODE_128, width, height, hints); + + qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); + } - BufferedImage qrImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); qrImage.createGraphics(); - Graphics2D graphics = (Graphics2D) qrImage.getGraphics(); graphics.setColor(Color.WHITE); graphics.fillRect(0, 0, width, height); @@ -190,8 +207,8 @@ public class TemplateUtils { ImageIO.write(qrImage, "png", baos); return Base64.getEncoder().encodeToString(baos.toByteArray()); }catch (Exception e){ - log.error("二维码生成失败"); - throw new RRException("二维码生成失败"); + log.error("二维码/条形码生成失败", e); + throw new RRException("二维码/条形码生成失败"); } } diff --git a/src/main/java/com/dpkj/modules/print/controller/RegisterController.java b/src/main/java/com/dpkj/modules/print/controller/RegisterController.java index 1a3d4f8..25a57c3 100644 --- a/src/main/java/com/dpkj/modules/print/controller/RegisterController.java +++ b/src/main/java/com/dpkj/modules/print/controller/RegisterController.java @@ -40,9 +40,9 @@ public class RegisterController { */ @PostMapping("/print") public Result registerByFilePath(@RequestBody @Validated ReceiptPrintRequest request){ -// String testData = "{\"hospitalName\":\"澜沧县中医医院\",\"registeTerminalName\":\"中国农业银行自助终端\",\"registeType\":\"自助挂号\",\"name\":\"刘博雅\",\"gender\":\"男\",\"age\":28,\"birthDate\":\"1996-06-31\",\"cardNumber\":\"6221**********0731\",\"outpatientNumber\":\"2501150038\",\"department\":\"普外科门诊\",\"visitLevel\":\"普通号\",\"doctor\":\"普通门诊\",\"sequence\":\"1\",\"registerDate\":\"2025-01-15\",\"totalFee\":4.00,\"paymentMethod\":\"微信扫码支付\",\"orderNumber\":\"\",\"transactionNumber\":\"2025011513090412092794szztzzj\",\"qrCodeBase64_2base64Type_1_250_250\":\"maby this is a Base64 code data if has\",\"terminalNumber\":\"12092794\",\"printTime\":\"2025-01-15 13:10:08\"}"; + String testData = "{\"hospitalName\":\"澜沧县中医医院\",\"registeTerminalName\":\"中国农业银行自助终端\",\"registeType\":\"自助挂号\",\"name\":\"刘博雅\",\"gender\":\"男\",\"age\":28,\"birthDate\":\"1996-06-31\",\"cardNumber\":\"6221**********0731\",\"outpatientNumber\":\"2501150038\",\"department\":\"普外科门诊\",\"visitLevel\":\"普通号\",\"doctor\":\"普通门诊\",\"sequence\":\"1\",\"registerDate\":\"2025-01-15\",\"totalFee\":4.00,\"paymentMethod\":\"微信扫码支付\",\"orderNumber\":\"\",\"transactionNumber\":\"2025011513090412092794szztzzj\",\"qrCodeBase64_2base64Type_1_250_250\":\"maby this is a Base64 code data if has\",\"terminalNumber\":\"12092794\",\"printTime\":\"2025-01-15 13:10:08\"}"; // String testData = "{\"hospitalName\":\"澜沧县中医医院\",\"registeTerminalName\":\"中国农业银行自助终端\",\"registeType\":\"自助挂号\",\"name\":\"刘博雅\",\"gender\":\"男\",\"age\":28,\"birthDate\":\"1996-06-31\",\"cardNumber\":\"6221**********0731\",\"outpatientNumber\":\"2501150038\",\"department\":\"普外科门诊\",\"visitLevel\":\"普通号\",\"doctor\":\"普通门诊\",\"sequence\":\"1\",\"registerDate\":\"2025-01-15\",\"totalFee\":4.00,\"paymentMethod\":\"微信扫码支付\",\"orderNumber\":\"\",\"transactionNumber\":\"2025011513090412092794szztzzj\",\"qrCodeBase64_2base64Type_2_500_160\":\"maby this is a Base64 code data if has\",\"terminalNumber\":\"12092794\",\"printTime\":\"2025-01-15 13:10:08\"}"; - return Result.ok((LexMarkResultDTO)printService.printImage(JSONObject.parseObject(request.getTemplateFillData()), request.getTemplateName(), request.getWidth(), request.getHeight(), request.getFileDir())); + return Result.ok((LexMarkResultDTO)printService.printImage(JSONObject.parseObject(testData), request.getTemplateName(), request.getWidth(), request.getHeight(), request.getFileDir())); } /** diff --git a/src/main/java/com/dpkj/modules/print/request/ReceiptPrintRequest.java b/src/main/java/com/dpkj/modules/print/request/ReceiptPrintRequest.java index 082c95c..7abbfac 100644 --- a/src/main/java/com/dpkj/modules/print/request/ReceiptPrintRequest.java +++ b/src/main/java/com/dpkj/modules/print/request/ReceiptPrintRequest.java @@ -48,12 +48,12 @@ public class ReceiptPrintRequest implements Serializable { /** * 小票渲染宽度,默认为:600 */ - private Integer width = 730; + private Integer width = 600; /** * 生成的模板的高度,默认为:950 */ - private Integer height = 1350; + private Integer height = 950; } diff --git a/src/main/java/com/dpkj/modules/print/service/impl/MS439PrintServiceImpl.java b/src/main/java/com/dpkj/modules/print/service/impl/MS439PrintServiceImpl.java index fcbc23e..6457f2c 100644 --- a/src/main/java/com/dpkj/modules/print/service/impl/MS439PrintServiceImpl.java +++ b/src/main/java/com/dpkj/modules/print/service/impl/MS439PrintServiceImpl.java @@ -64,7 +64,6 @@ public class MS439PrintServiceImpl implements MS439PrintService { JSONObject param = new JSONObject(); - // printType 选择箱子 // param.put("prtData", String.format("PrintType=%d;pagesource=%s;copies=%d;file[0]=%s;stamp=%d;duplex=%d;color=%d;direction=%d", // request.getPagesource(), request.getCopies(), request.getFileDir(), request.getStamp(),