From 9eccd96b007dfb5f332a834afd5bba4c6775e283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Fri, 8 May 2026 09:03:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(pdf-extract):=20=E6=96=B0=E5=A2=9EPDF?= =?UTF-8?q?=E5=B0=BA=E5=AF=B8=E5=8C=BA=E5=9F=9F=E6=8F=90=E5=8F=96=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在PdfExtractionService中实现从PDF URL中提取尺寸数据 - 通过URL读取PDF字节流并加载文档进行文本位置解析 - 利用文本分组和维度识别器提取尺寸信息列表 - 在QmsInspectionStandardController添加GET接口,支持通过URL参数提取尺寸数据 - 在QmsInspectionStandardControllerService中添加对应服务方法调用pdfExtractionService接口 --- .../QmsInspectionStandardController.java | 9 +++++++ ...msInspectionStandardControllerService.java | 4 +++ .../java/service/PdfExtractionService.java | 25 +++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java index 2065acae..3e4a53bb 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java @@ -13,6 +13,7 @@ import jakarta.annotation.Resource; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import model.DimensionResult; +import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -106,4 +107,12 @@ public class QmsInspectionStandardController extends BaseController { public ApiResult> pdfExtractRegion(@Valid @RequestBody QmsPdfExtractRegionQO request) throws IOException { return ApiResult.success(inspectionStandardControllerService.pdfExtractRegion(request)); } + + /** + * 提取PDF文件的所有区域数据 + */ + @GetMapping("/pdf/dimensions") + public ApiResult> extractDimensions(@RequestParam String url) throws IOException { + return ApiResult.success(inspectionStandardControllerService.extractDimensions(url)); + } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java index e75db1cd..273473ee 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java @@ -713,4 +713,8 @@ public class QmsInspectionStandardControllerService { ); return regionFilterService.mergeRegionResults(filtered); } + + public List extractDimensions(String url) throws IOException { + return pdfExtractionService.extractDimensions(url); + } } diff --git a/nflg-qms-pdf-extract/src/main/java/service/PdfExtractionService.java b/nflg-qms-pdf-extract/src/main/java/service/PdfExtractionService.java index d1c8d3e3..f7d1aa20 100644 --- a/nflg-qms-pdf-extract/src/main/java/service/PdfExtractionService.java +++ b/nflg-qms-pdf-extract/src/main/java/service/PdfExtractionService.java @@ -15,6 +15,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; +import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Path; import java.util.List; @@ -80,6 +81,30 @@ public class PdfExtractionService { } } + public List extractDimensions(String pdfUrl) throws IOException { + byte[] pdfBytes; + try (InputStream in = new URL(pdfUrl).openStream(); + ByteArrayOutputStream buffer = new ByteArrayOutputStream()) { + byte[] chunk = new byte[8192]; + int len; + while ((len = in.read(chunk)) != -1) { + buffer.write(chunk, 0, len); + } + pdfBytes = buffer.toByteArray(); + } + try (PDDocument document = Loader.loadPDF(pdfBytes)) { + int totalPages = document.getNumberOfPages(); + PositionedTextStripper stripper = new PositionedTextStripper(); + stripper.setSortByPosition(true); + StringWriter writer = new StringWriter(); + stripper.writeText(document, writer); + List allElements = stripper.getElements(); + + List groups = textGrouper.groupTextElements(allElements); + return dimensionIdentifier.identifyDimensions(groups); + } + } + public static class ExtractionResult { private final List dimensions; private final int totalPages;