feat: bookmark replace

This commit is contained in:
zzs 2025-03-04 11:46:33 +08:00
parent 2f8a2aafba
commit 4c4349dbb5
2 changed files with 22 additions and 1 deletions

View File

@ -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<BookmarkQueryDataModel> results = new HashSet<>();
List<CTBookmark> bookmarks = new ArrayList<>();
try (XWPFDocument doc = new XWPFDocument(in)) {
List<XWPFParagraph> 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<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run : runs) {
List<XWPFPicture> 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);
}

View File

@ -16,8 +16,9 @@ public enum BookmarkType {
TEXT("TEXT"),
PICTURE("PICTURE");
PICTURE("PICTURE"),
PICTURE_DESC("PICTURE_DESC");
private final String type;