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()); if (bk.isListMark()) listMark.add(bk.getBookmarkName());
} }
Map<String, BookmarkInfo> bkMap = info.stream() Map<String, BookmarkInfo> bkMap = info.stream()
.filter(b -> !b.isListMark())
.collect(Collectors.toMap(BookmarkInfo::getBookmarkName, bk -> bk)); .collect(Collectors.toMap(BookmarkInfo::getBookmarkName, bk -> bk));
List<Integer> waitRemoveIdx = new ArrayList<>(); List<Integer> waitRemoveIdx = new ArrayList<>();
@ -117,7 +116,7 @@ public class BookmarkExec {
if (allDataMap.containsKey(mk)) { if (allDataMap.containsKey(mk)) {
BookmarkReplaceDataModel model = allDataMap.get(mk); BookmarkReplaceDataModel model = allDataMap.get(mk);
if (model.getExtData() instanceof ListExData exData) { 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(); BigInteger numID = paragraph.getNumID();
if (numID != null) { if (numID != null) {
info.setListMark(true); info.setListMark(true);
continue;
} }
queryBookmarkIdx(paragraph, info); 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); XWPFParagraph bookmarkParagraph = findBookmarkParagraph(doc, bookmarkName);
if (bookmarkParagraph == null) { if (bookmarkParagraph == null) {
@ -416,11 +414,11 @@ public class BookmarkExec {
// 插入新的列表项 // 插入新的列表项
insertNewListItems(doc, newListItems, numId, ilvl, bookmarkParagraph, bookmarkName); 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<XWPFParagraph> paragraphs = doc.getParagraphs();
List<Integer> indexesToRemove = new ArrayList<>(); List<Integer> indexesToRemove = new ArrayList<>();
@ -434,8 +432,11 @@ public class BookmarkExec {
for (CTBookmark bookmark : bookmarks) { for (CTBookmark bookmark : bookmarks) {
if (bookmark.getName().equals(bookmarkName)) { if (bookmark.getName().equals(bookmarkName)) {
if (bkMap.containsKey(bookmarkName) && bkMap.get(bookmarkName).isListMark()) { if (bkMap.containsKey(bookmarkName) && bkMap.get(bookmarkName).isListMark()) {
indexesToRemove.add(i); BookmarkReplaceDataModel model = allDataMap.get(bookmarkName);
break; if (model.getExtData() instanceof ListExData) {
indexesToRemove.add(i);
break;
}
} }
} }
} }