feat: bookmark replace
This commit is contained in:
parent
17fb5cefcb
commit
431a467c8a
@ -14,6 +14,7 @@ import org.apache.poi.xwpf.usermodel.*;
|
|||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.Text;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -88,9 +89,11 @@ public class BookmarkExec {
|
|||||||
if (previousSibling != null) {
|
if (previousSibling != null) {
|
||||||
String nodeName = previousSibling.getNodeName();
|
String nodeName = previousSibling.getNodeName();
|
||||||
if ("w:bookmarkEnd".equals(nodeName)) {
|
if ("w:bookmarkEnd".equals(nodeName)) {
|
||||||
|
// end前一个是start
|
||||||
Node bookmarkStartNode = previousSibling.getPreviousSibling();
|
Node bookmarkStartNode = previousSibling.getPreviousSibling();
|
||||||
if (bookmarkStartNode != null) {
|
if (bookmarkStartNode != null) {
|
||||||
Node nameAttribute = bookmarkStartNode.getAttributes().getNamedItem("w:name");
|
Node nameAttribute = bookmarkStartNode.getAttributes().getNamedItem("w:name");
|
||||||
|
// 获取书签名称,确保同一行内多个书签情况能正确处理
|
||||||
if (nameAttribute != null && name.equals(nameAttribute.getNodeValue())) {
|
if (nameAttribute != null && name.equals(nameAttribute.getNodeValue())) {
|
||||||
idx = i - 1;
|
idx = i - 1;
|
||||||
doR = true;
|
doR = true;
|
||||||
@ -101,19 +104,25 @@ public class BookmarkExec {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (idx < runs.size() && doR) {
|
if (idx < runs.size() && doR) {
|
||||||
if (idx < 0) {
|
if (idx < 0) {// 如果是-1,说明这一段的开头有书签
|
||||||
run = paragraph.createRun();
|
// 在本段开头位置插入新的run
|
||||||
|
run = paragraph.insertNewRun(0);
|
||||||
|
// 并复制原有开头的run的所有内容,后续只修改文本内容,不改变样式
|
||||||
|
run.getCTR().set(runs.get(0).getCTR().copy());
|
||||||
} else {
|
} else {
|
||||||
run = runs.get(idx);
|
run = runs.get(idx);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// 处理一段末尾的书签(一般不存在这种情况)
|
||||||
run = runs.get(runs.size() - 1);
|
run = runs.get(runs.size() - 1);
|
||||||
}
|
}
|
||||||
BookmarkReplaceDataModel model = map.get(name);
|
BookmarkReplaceDataModel model = map.get(name);
|
||||||
BookmarkType type = model.getType();
|
BookmarkType type = model.getType();
|
||||||
|
// 处理文本
|
||||||
if (BookmarkType.TEXT.equals(type)) {
|
if (BookmarkType.TEXT.equals(type)) {
|
||||||
run.setText(model.getValue());
|
run.setText(model.getValue());
|
||||||
}
|
}
|
||||||
|
// 处理图片,以嵌入式插入图片
|
||||||
if (BookmarkType.PICTURE.equals(type)) {
|
if (BookmarkType.PICTURE.equals(type)) {
|
||||||
AbstractExData extData = model.getExtData();
|
AbstractExData extData = model.getExtData();
|
||||||
if (extData instanceof PictureExData picture) {
|
if (extData instanceof PictureExData picture) {
|
||||||
|
Loading…
Reference in New Issue
Block a user