feat: bookmark replace
This commit is contained in:
parent
6e32047bcd
commit
3168c49e1a
@ -52,6 +52,8 @@ public class BookmarkExec {
|
||||
List<XWPFRun> runs = paragraph.getRuns();
|
||||
List<BookmarkInfo> info = queryBookmarkInfo(paragraph);
|
||||
Map<String, BookmarkInfo> bkMap = info.stream().collect(Collectors.toMap(BookmarkInfo::getBookmarkName, bk -> bk));
|
||||
|
||||
List<Integer> waitRemoveIdx = new ArrayList<>();
|
||||
for (Map.Entry<String, BookmarkInfo> bk : bkMap.entrySet()) {
|
||||
String name = bk.getKey();
|
||||
BookmarkInfo bkInfo = bk.getValue();
|
||||
@ -63,16 +65,23 @@ public class BookmarkExec {
|
||||
int endIdx = bkInfo.getEndIdx();
|
||||
XWPFRun run = runs.get(startIdx);
|
||||
CTR ctr = run.getCTR();
|
||||
List<CTText> tList = ctr.getTList();
|
||||
// 修改第一个run的内容
|
||||
for (int i = 0; i < ctr.getTList().size(); i++) {
|
||||
ctr.removeT(i);
|
||||
}
|
||||
CTText newTextNode = ctr.addNewT();
|
||||
newTextNode.setStringValue(model.getExtData().getValue());
|
||||
for (int i = 0; i < endIdx - startIdx; i++) {
|
||||
paragraph.removeRun(i);
|
||||
|
||||
// 删除其余的run
|
||||
for (int i = startIdx + 1; i < endIdx; i++) {
|
||||
waitRemoveIdx.add(i);
|
||||
}
|
||||
}
|
||||
|
||||
waitRemoveIdx.sort(Comparator.naturalOrder());
|
||||
for (Integer idx : waitRemoveIdx) {
|
||||
paragraph.removeRun(idx);
|
||||
}
|
||||
}
|
||||
|
||||
File outFile = FileUtil.newFile(tmpDir + "gen/" + FileNameUtil.getName(file));
|
||||
@ -120,7 +129,7 @@ public class BookmarkExec {
|
||||
CTR ctr = run.getCTR();
|
||||
Node node = ctr.getDomNode();
|
||||
Node currentNode = node.getPreviousSibling();
|
||||
|
||||
int idx = runs.indexOf(run);
|
||||
// 递归查找前一个兄弟节点
|
||||
while (currentNode != null) {
|
||||
String nodeName = currentNode.getNodeName();
|
||||
@ -131,7 +140,7 @@ public class BookmarkExec {
|
||||
|
||||
// 匹配书签ID或名称
|
||||
if (id.equals(info.getBookmarkId())) {
|
||||
info.setStartIdx(i); // 记录当前Run的索引为起始位置
|
||||
info.setStartIdx(idx); // 记录当前Run的索引为起始位置
|
||||
foundStart = true;
|
||||
break;
|
||||
}
|
||||
@ -142,7 +151,7 @@ public class BookmarkExec {
|
||||
|
||||
// 匹配书签ID
|
||||
if (id.equals(info.getBookmarkId())) {
|
||||
info.setEndIdx(i); // 记录当前Run的索引为结束位置
|
||||
info.setEndIdx(idx); // 记录当前Run的索引为结束位置
|
||||
foundEnd = true;
|
||||
break;
|
||||
}
|
||||
@ -155,6 +164,10 @@ public class BookmarkExec {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundEnd) {
|
||||
info.setEndIdx(runs.size());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user