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