wms/nflg-qms-pdf-extract/CLAUDE.md

3.7 KiB
Raw Blame History

根目录 > nflg-qms-pdf-extract

nflg-qms-pdf-extract - QMS PDF 数据提取模块

模块职责

独立的 PDF 数据提取工具库,不可独立启动。从工程图纸 PDF 中提取尺寸标注(含公差)信息,供 QMS 质量检验使用。核心能力:

  • 从 PDF 中提取带位置信息的文本元素
  • 将相邻文本元素分组合并
  • 识别尺寸标注(含对称/非对称公差、配合公差、螺纹标注等)
  • 处理 PDFBox 在 Windows/Mac 上的乱码字符修正Symbol 字体、GBK 编码等)
  • 过滤标题栏区域、表面粗糙度、GD&T 公差等非尺寸文本
  • 按区域筛选和合并提取结果

关键依赖

  • Apache PDFBox 3.0.4 (PDF 解析)
  • Lombok
  • SLF4J

关键目录说明

路径 说明
service/PdfExtractionService.java 主服务入口 -- 从本地文件或 URL 加载 PDF 并提取尺寸数据
service/RegionFilterService.java 区域筛选服务 -- 按页面+矩形区域过滤提取结果,支持多结果合并
extraction/PositionedTextStripper.java 带位置信息的文本提取器(继承 PDFTextStripper包含乱码字符修正逻辑
extraction/TextGrouper.java 文本分组器 -- 将相邻文本元素按位置/字号合并为 TextGroup
extraction/DimensionIdentifier.java 尺寸识别器 -- 通过正则模式识别各类尺寸标注(核心,~490 行)
extraction/TextNormalizer.java 文本规范化 -- 修正 Mac/Windows/GBK 乱码字符 + Unicode NFC 规范化
extraction/TitleBlockFilter.java 标题栏过滤器 -- 按区域和关键词过滤非尺寸文本
model/TextElement.java 文本元素模型 -- 单个文本片段(位置/大小/字号/页码)
model/TextGroup.java 文本分组模型 -- 合并后的文本组
model/DimensionResult.java 尺寸结果模型 -- 尺寸值+公差+类型+位置+页码

尺寸识别模式

DimensionIdentifier 支持以下模式(按优先级排列):

  1. 对称公差 -- 如 50 +/- 0.1Phi 280 +/- 0.5
  2. 非对称公差(斜线) -- 如 100 +0.2/-0.1
  3. 非对称公差(空格) -- 如 100 +0.2 -0.1
  4. 配合公差 -- 如 50 H7Phi 30 m6
  5. 螺纹标注 -- 如 M12x1.5G1/2Rc3/4
  6. 纯尺寸 + 邻近公差 -- 尺寸数值与公差分属不同 TextGroup通过邻近搜索关联
  7. 区域模式兜底 -- 未匹配的文本直接作为原始内容输出

乱码修正

PDF 工程图中 Symbol 字体的直径符号(Phi)、角度符号等常被 PDFBox 误读为乱码字符:

  • Windows (GBK): ¡¤ -> Phi, ¡ã -> degree, ¡À -> +/-
  • Mac: Ãnà -> Phi
  • 修正在 PositionedTextStripperwriteString 层)和 TextNormalizer二次清理中双重执行

数据模型

DimensionResult:
  - dimension: String    (尺寸文本,如 "Phi 50", "M12x1.5")
  - tolerance: String    (公差文本,如 "+/- 0.1", "H7", "+0.2/-0.1")
  - type: String         (固定值 "dimension")
  - x, y: double         (PDF 页面坐标)
  - width, height: double(边界框尺寸)
  - page: int            (所在页码)
  - sortOrder: int       (排序序号)

被引用方

  • nflg-qms-admin -- 通过 PdfExtractConfig 配置类将 PdfExtractionService、RegionFilterService 注册为 Spring Bean

测试

无独立测试文件。

相关文件清单

  • src/main/java/service/ -- 2 个服务类
  • src/main/java/extraction/ -- 5 个提取/过滤类
  • src/main/java/model/ -- 3 个数据模型
  • pom.xml -- 模块依赖定义
  • pdf数据提取方案.md -- 设计方案文档

变更记录 (Changelog)

时间 操作 说明
2026-05-23 14:28:57 新增 首次扫描遗漏的模块,本次增量更新补充