From 4b3bf2e61082c22717957242b4b8150767d1535b Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 8 Mar 2024 10:53:16 +0800 Subject: [PATCH] =?UTF-8?q?change=20-=20=E6=B7=BB=E5=8A=A0=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E6=9C=BA=E6=9C=8D=E5=8A=A1=E6=9D=A1=E5=BD=A2=E7=A0=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../printer/service/PrinterServiceImpl.java | 2 +- .../com/hw/printer/utils/HwPrintUtil.java | 72 ++++++++++++++++++- 2 files changed, 70 insertions(+), 4 deletions(-) diff --git a/hw-modules/hw-printer/src/main/java/com/hw/printer/service/PrinterServiceImpl.java b/hw-modules/hw-printer/src/main/java/com/hw/printer/service/PrinterServiceImpl.java index a2119296..c63d22cc 100644 --- a/hw-modules/hw-printer/src/main/java/com/hw/printer/service/PrinterServiceImpl.java +++ b/hw-modules/hw-printer/src/main/java/com/hw/printer/service/PrinterServiceImpl.java @@ -53,7 +53,7 @@ public class PrinterServiceImpl implements IPrinterService { params.put("materialName", barcodeInfo.getMaterialName()); params.put("date", DateUtils.getDate()); String machineName = HwPrintUtil.printBarCode(params); - barcodeInfo.setMaterialName(machineName); + barcodeInfo.setMachineName(machineName); return barcodeInfo; } diff --git a/hw-modules/hw-printer/src/main/java/com/hw/printer/utils/HwPrintUtil.java b/hw-modules/hw-printer/src/main/java/com/hw/printer/utils/HwPrintUtil.java index 891dfb7d..308ae63b 100644 --- a/hw-modules/hw-printer/src/main/java/com/hw/printer/utils/HwPrintUtil.java +++ b/hw-modules/hw-printer/src/main/java/com/hw/printer/utils/HwPrintUtil.java @@ -80,7 +80,7 @@ public class HwPrintUtil { String materialName = params.get("materialName"); String date = params.get("date"); initPrintService(); - File outputFile = printBarCode(barcodeInfo, batchCode, materialName, date); + File outputFile = printQRCode(barcodeInfo, batchCode, materialName, date); try { printPdf(outputFile); log.info("打印条码printBarCode方法,条码内容:" + barcodeInfo); @@ -91,8 +91,16 @@ public class HwPrintUtil { } } - - public static File printBarCode(String barcodeInfo, String batchCode, String materialName, String date) { + /** + * 打印二维码到PDF文件 + * + * @param barcodeInfo 条形码信息 + * @param batchCode 批次代码 + * @param materialName 物料名称 + * @param date 日期 + * @return 生成的PDF文件 + */ + public static File printQRCode(String barcodeInfo, String batchCode, String materialName, String date) { try { // 生成PDF文件 File generateFile = new File(generatePath); @@ -143,6 +151,64 @@ public class HwPrintUtil { return null; } + /** + * 打印条形码到PDF文件 + * + * @param barcodeInfo 条形码信息 + * @param batchCode 批次代码 + * @param materialName 物料名称 + * @param date 日期 + * @return 生成的PDF文件 + */ + public static File printBarCode(String barcodeInfo, String batchCode, String materialName, String date) { + try { + // 生成PDF文件 + File generateFile = new File(generatePath); + FileOutputStream out = new FileOutputStream(generateFile); + // 加载PDF模板 + PdfReader reader = new PdfReader(pdfTemplatePath); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + // 创建PdfStamper以修改PDF并将输出到字节数组 + PdfStamper stamper = new PdfStamper(reader, bos); + // 动态填充表单字段 + AcroFields form = stamper.getAcroFields(); + form.setField("code", barcodeInfo); + form.setField("name", materialName); + form.setField("spe", batchCode); + form.setField("data", date); + // 获取条形码字段的位置 + AcroFields.FieldPosition fieldPosition = form.getFieldPositions("qrcode").get(0); + // 绘制条形码 + float width = fieldPosition.position.getRight() - fieldPosition.position.getLeft(); + Barcode39 barcode39 = new Barcode39(); + barcode39.setCode(barcodeInfo); + barcode39.setBarHeight(50f); // 根据需要调整条形码大小 + Image barcodeImage = barcode39.createImageWithBarcode(stamper.getOverContent(1), null, null); + barcodeImage.setAbsolutePosition(fieldPosition.position.getLeft(), fieldPosition.position.getBottom()); + // 将条形码图像添加到第一页 + stamper.getOverContent(1).addImage(barcodeImage); + // 将表单平铺(使其不可编辑) + stamper.setFormFlattening(true); + // 关闭PdfStamper + stamper.close(); + // 创建新文档 + Document doc = new Document(); + // 创建关联到输出流的PdfCopy对象 + PdfCopy copy = new PdfCopy(doc, out); + // 打开文档 + doc.open(); + // 从字节数组创建一个PdfImportedPage对象 + PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); + // 将导入的页面添加到新文档中 + copy.addPage(importPage); + // 关闭文档 + doc.close(); + return generateFile; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } /** * 打印PDF