From 0ed582cc8fcec1282117d6fac3068355154300ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=91=A3=E5=93=B2=E5=A5=87?= <13840175730@139.com>
Date: Wed, 22 Jan 2025 13:43:23 +0800
Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E7=9C=8B=E6=9D=BF=E9=97=AE?=
=?UTF-8?q?=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 11 ++
src/main/java/com/dsic/gj_erp/Test.java | 131 ++++++++++++++++--
.../com/dsic/gj_erp/mapper/KbanMapper.java | 4 +-
.../com/dsic/gj_erp/service/KbanService.java | 42 +++++-
.../resources/mappers/kban/KbanMapper.xml | 119 ++++++++--------
5 files changed, 231 insertions(+), 76 deletions(-)
diff --git a/pom.xml b/pom.xml
index 43f4223..a1eb8f0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -282,6 +282,17 @@
org.springframework.boot
spring-boot-starter-websocket
+
+
+ com.google.zxing
+ core
+ 3.4.1
+
+
+ com.google.zxing
+ javase
+ 3.4.1
+
diff --git a/src/main/java/com/dsic/gj_erp/Test.java b/src/main/java/com/dsic/gj_erp/Test.java
index 6da244f..cebc834 100644
--- a/src/main/java/com/dsic/gj_erp/Test.java
+++ b/src/main/java/com/dsic/gj_erp/Test.java
@@ -1,32 +1,143 @@
package com.dsic.gj_erp;
import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.date.TimeInterval;
+import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.extra.qrcode.QrConfig;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.WriterException;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.PDPageTree;
+import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
+import org.apache.pdfbox.text.PDFTextStripper;
+import org.apache.pdfbox.text.PDFTextStripperByArea;
+import java.awt.*;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
public class Test {
public static void main(String[] args) throws IOException {
- System.out.println(DateUtil.thisYear());
+// System.out.println(DateUtil.thisYear());
// System.out.println(StrUtil.padPre("1",3,"0"));
//String aaa="gagagag";
//System.out.println(aaa.split("@")[0]);
//System.out.println("aaa = " + String.format("%03d",1));
+// MatrixToImageWriter.
-// String pdfFilePath = "E:/B046HC103HN第046批量数控套料图2023-05-11.pdf"; // PDF文件路径
-// PDDocument document = PDDocument.load(new File(pdfFilePath));
+ TimeInterval timer = DateUtil.timer();
+ String pdfFilePath = "E:\\T300K-130_1_20250106\\PDF\\B001HC103HN数控套料图.pdf"; // PDF文件路径
+ PDDocument document = PDDocument.load(new File(pdfFilePath));
// PDFTextStripper stripper = new PDFTextStripper();
// String text = stripper.getText(document);
-// document.close();
+// String[] split = text.split("\\n");
+
+// List list = new ArrayList<>();
+ QrConfig config = new QrConfig(300, 300);//二维码宽/高
+ // 设置边距,既二维码和背景之间的边距(即白边大小)
+ config.setMargin(0);
+ // 设置前景色,既二维码颜色(青色)
+ //config.setForeColor(Color.CYAN.getRGB());
+ // 设置背景色(灰色)
+ //config.setBackColor(Color.GRAY.getRGB());
+
+// for (int i = 0; i < split.length; i++) {
+// String str = split[i];
+
+// if (str.contains("船名 批量 图纸比例 套料图号 图号 页码")) {
+// str = split[i - 4];
+// QrCodeDto qrCodeDto = new QrCodeDto();
+// try {
+// qrCodeDto.page = Integer.parseInt(str.split(" ")[0]);
+// }catch (Exception e){
+// str = split[i - 3];
+// qrCodeDto.page = Integer.parseInt(str.split(" ")[0]);
+// }
//
-// // 输出提取的文本到控制台
+// list.add(qrCodeDto);
+// }
+// if (str.contains("序号 零件属性零件编号 零件属性 零件属性 零件属性序号 序号 序号零件编号 零件编号 零件编号")) {
+// str = split[i + 1];
+// if (!list.isEmpty()) {
+// String[] split1 = str.split(" ");
+// String dcch = split1[0];
+// String dcpl = split1[1];
+// String tzbh = split1[3];
+// QrCodeDto qrCodeDto = list.get(list.size() - 1);
+//// BitMatrix qrcode = createQrcode(String.format("%s_%s_%s", dcch, dcpl, tzbh));
+//// assert qrcode != null;
+// //qrCodeDto.bufferedImage = MatrixToImageWriter.toBufferedImage(qrcode);
+// qrCodeDto.bufferedImage = QrCodeUtil.generate(String.format("%s_%s_%s", dcch, dcpl, tzbh), config);
+////
+// }
+// }
+// }
+
+ for (int pageNumber = 1; pageNumber < document.getNumberOfPages(); ++pageNumber) {
+ PDPage page = document.getPage(pageNumber);
+ String textByRegion = getTextByRegion(page, 80, 50, 1100, 40);
+// System.out.println(textByRegion);
+ String[] split = textByRegion.split(" ");
+ String dcch = split[1];
+ String dcpl = split[3];
+ String tzbh = split[7];
+ String pageIndex = split[12];
+ BufferedImage bufferedImage = QrCodeUtil.generate(String.format("%s_%s_%s", dcch, dcpl, tzbh), config);
+ PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
+ PDImageXObject qrCodeImage = JPEGFactory.createFromImage(document, bufferedImage);
+ contentStream.drawImage(qrCodeImage, 10, 10, 75, 75); // 在PDF中的坐标位置添加二维码
+ contentStream.close();
+ }
+
+ document.save("E:/updated_document.pdf");
+ document.close();
+ System.out.println(timer.interval());
+ // 输出提取的文本到控制台
// System.out.println(text);
-//
-// // 可以选择将文本写入文件
-// String outputPath = "E:/B046HC103HN第046批量数控套料图2023-05-11.txt"; // 输出文本文件路径
-// Files.write(Paths.get(outputPath), text.getBytes());
+
+ // 可以选择将文本写入文件
+ //String outputPath = "E:/B001HC103HN数控套料图.txt"; // 输出文本文件路径
+ //Files.write(Paths.get(outputPath), text.getBytes());
}
+
+ private static BitMatrix createQrcode(String dataToEncode) {
+ QRCodeWriter qrCodeWriter = new QRCodeWriter();
+ int width = 200;
+ int height = 200;
+ BitMatrix bitMatrix = null;
+ try {
+ return qrCodeWriter.encode(dataToEncode, BarcodeFormat.QR_CODE, width, height);
+ } catch (WriterException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ private static String getTextByRegion(PDPage page,double x,double y,double width,double height) throws IOException {
+ PDFTextStripperByArea stripper = new PDFTextStripperByArea();
+ stripper.setSortByPosition(true);
+ stripper.addRegion("textRegion", new Rectangle2D.Double(x, y, width, height)); // 假设二维码区域是100x100,从(100,100)开始
+ stripper.extractRegions(page);
+ return stripper.getTextForRegion("textRegion"); // 获取二维码区域的文本
+ }
+
+
+ static class QrCodeDto {
+ public int page;
+ public BufferedImage bufferedImage;
+ }
+
}
diff --git a/src/main/java/com/dsic/gj_erp/mapper/KbanMapper.java b/src/main/java/com/dsic/gj_erp/mapper/KbanMapper.java
index 047eef3..cdf5761 100644
--- a/src/main/java/com/dsic/gj_erp/mapper/KbanMapper.java
+++ b/src/main/java/com/dsic/gj_erp/mapper/KbanMapper.java
@@ -14,7 +14,7 @@ public interface KbanMapper {
List