feat: bookmark replace

This commit is contained in:
zzs 2025-03-08 14:05:05 +08:00
parent 0abe958069
commit 1ab8bc9f71

View File

@ -76,7 +76,6 @@ public class BookmarkExec {
if (bk.isListMark()) listMark.add(bk.getBookmarkName());
}
Map<String, BookmarkInfo> bkMap = info.stream()
.filter(b -> !b.isListMark())
.collect(Collectors.toMap(BookmarkInfo::getBookmarkName, bk -> bk));
List<Integer> waitRemoveIdx = new ArrayList<>();
@ -117,7 +116,7 @@ public class BookmarkExec {
if (allDataMap.containsKey(mk)) {
BookmarkReplaceDataModel model = allDataMap.get(mk);
if (model.getExtData() instanceof ListExData exData) {
handleListContent(doc, exData.getValue(), mk);
handleListContent(doc, exData.getValue(), mk, allDataMap);
}
}
}
@ -287,7 +286,6 @@ public class BookmarkExec {
BigInteger numID = paragraph.getNumID();
if (numID != null) {
info.setListMark(true);
continue;
}
queryBookmarkIdx(paragraph, info);
@ -401,7 +399,7 @@ public class BookmarkExec {
/**
* 处理列表行新增
*/
public static void handleListContent(XWPFDocument doc, List<String> newListItems, String bookmarkName) {
public static void handleListContent(XWPFDocument doc, List<String> newListItems, String bookmarkName, Map<String, BookmarkReplaceDataModel> allDataMap) {
// 查找书签所在的段落
XWPFParagraph bookmarkParagraph = findBookmarkParagraph(doc, bookmarkName);
if (bookmarkParagraph == null) {
@ -416,11 +414,11 @@ public class BookmarkExec {
// 插入新的列表项
insertNewListItems(doc, newListItems, numId, ilvl, bookmarkParagraph, bookmarkName);
// 删除原列表段落
removeOriginalListParagraphs(doc, bookmarkName);
removeOriginalListParagraphs(doc, bookmarkName, allDataMap);
}
private static void removeOriginalListParagraphs(XWPFDocument doc, String bookmarkName) {
private static void removeOriginalListParagraphs(XWPFDocument doc, String bookmarkName, Map<String, BookmarkReplaceDataModel> allDataMap) {
List<XWPFParagraph> paragraphs = doc.getParagraphs();
List<Integer> indexesToRemove = new ArrayList<>();
@ -434,8 +432,11 @@ public class BookmarkExec {
for (CTBookmark bookmark : bookmarks) {
if (bookmark.getName().equals(bookmarkName)) {
if (bkMap.containsKey(bookmarkName) && bkMap.get(bookmarkName).isListMark()) {
indexesToRemove.add(i);
break;
BookmarkReplaceDataModel model = allDataMap.get(bookmarkName);
if (model.getExtData() instanceof ListExData) {
indexesToRemove.add(i);
break;
}
}
}
}