From 4c4349dbb551f6d8fd7f6121318665f66c1aca5a Mon Sep 17 00:00:00 2001 From: zzs Date: Tue, 4 Mar 2025 11:46:33 +0800 Subject: [PATCH] feat: bookmark replace --- .../farmwork/word/core/BookmarkQuery.java | 20 +++++++++++++++++++ .../word/core/enums/BookmarkType.java | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/BookmarkQuery.java b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/BookmarkQuery.java index 91c7266..3c38a85 100644 --- a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/BookmarkQuery.java +++ b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/BookmarkQuery.java @@ -1,7 +1,10 @@ package com.wmyun.farmwork.word.core; import cn.hutool.core.io.IoUtil; +import com.wmyun.farmwork.word.core.enums.BookmarkType; import com.wmyun.farmwork.word.core.model.BookmarkQueryDataModel; +import com.wmyun.farmwork.word.core.model.BookmarkReplaceDataModel; +import com.wmyun.farmwork.word.core.model.ext.PictureExData; import org.apache.poi.xwpf.usermodel.*; import org.apache.xmlbeans.impl.common.IOUtil; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark; @@ -32,6 +35,7 @@ public class BookmarkQuery { Set results = new HashSet<>(); List bookmarks = new ArrayList<>(); try (XWPFDocument doc = new XWPFDocument(in)) { + List allParagraphs = new ArrayList<>(doc.getParagraphs()); for (XWPFParagraph paragraph : doc.getParagraphs()) { bookmarks.addAll(paragraph.getCTP().getBookmarkStartList()); } @@ -41,6 +45,7 @@ public class BookmarkQuery { for (XWPFTableCell cell : row.getTableCells()) { for (XWPFParagraph para : cell.getParagraphs()) { bookmarks.addAll(para.getCTP().getBookmarkStartList()); + allParagraphs.add(para); } } } @@ -49,11 +54,13 @@ public class BookmarkQuery { for (XWPFHeader header : doc.getHeaderList()) { for (XWPFParagraph para : header.getParagraphs()) { bookmarks.addAll(para.getCTP().getBookmarkStartList()); + allParagraphs.add(para); } for (XWPFTable table : header.getTables()) { for (XWPFTableRow row : table.getRows()) { for (XWPFTableCell cell : row.getTableCells()) { for (XWPFParagraph para : cell.getParagraphs()) { + allParagraphs.add(para); bookmarks.addAll(para.getCTP().getBookmarkStartList()); } } @@ -63,18 +70,31 @@ public class BookmarkQuery { for (XWPFFooter footer : doc.getFooterList()) { for (XWPFParagraph para : footer.getParagraphs()) { + allParagraphs.add(para); bookmarks.addAll(para.getCTP().getBookmarkStartList()); } for (XWPFTable table : footer.getTables()) { for (XWPFTableRow row : table.getRows()) { for (XWPFTableCell cell : row.getTableCells()) { for (XWPFParagraph para : cell.getParagraphs()) { + allParagraphs.add(para); bookmarks.addAll(para.getCTP().getBookmarkStartList()); } } } } } + + for (XWPFParagraph paragraph : allParagraphs) { + List runs = paragraph.getRuns(); + for (XWPFRun run : runs) { + List pictures = run.getEmbeddedPictures(); + for (XWPFPicture picture : pictures) { + String description = picture.getDescription(); + results.add(new BookmarkQueryDataModel(description, BookmarkType.PICTURE_DESC)); + } + } + } } catch (IOException e) { throw new RuntimeException(e); } diff --git a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/enums/BookmarkType.java b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/enums/BookmarkType.java index 4203c10..1cd9197 100644 --- a/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/enums/BookmarkType.java +++ b/wmyun-framework/wmyun-spring-boot-starter-word/src/main/java/com/wmyun/farmwork/word/core/enums/BookmarkType.java @@ -16,8 +16,9 @@ public enum BookmarkType { TEXT("TEXT"), - PICTURE("PICTURE"); + PICTURE("PICTURE"), + PICTURE_DESC("PICTURE_DESC"); private final String type;