fix:合同签章位置不正确问题

This commit is contained in:
zzs 2025-01-13 16:35:28 +08:00
parent 7504c5d218
commit 09cac84450

View File

@ -10,8 +10,10 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;
import java.io.*;
import java.net.URL;
@ -65,9 +67,38 @@ public class ContactSignUtils {
String name = bookmark.getName();
if (name.contains(bookmarkName)) {
List<XWPFRun> runs = paragraph.getRuns();
XWPFRun run;
if (!runs.isEmpty()) {
run = runs.get(0);
XWPFRun run = null;
int idx = 0;
// for (int i = 0; i < runs.size(); i++) {
// String nodeName = runs.get(i).getCTR().getDomNode().getPreviousSibling().getNodeName();
// if ("w:bookmarkEnd".equals(nodeName) && name.equals(runs.get(i).getCTR().getDomNode().getPreviousSibling().getPreviousSibling().getAttributes().getNamedItem("w:name").getNodeValue())) {
// idx = i - 1;
// break;
// }
// }
//当前分词的上一个分词是不是书签的结尾如果是就在上一个分词后面插入图片
for (int i = 0; i < runs.size(); i++) {
Node previousSibling = runs.get(i).getCTR().getDomNode().getPreviousSibling();
if (previousSibling != null) {
String nodeName = previousSibling.getNodeName();
if ("w:bookmarkEnd".equals(nodeName)) {
Node bookmarkStart = previousSibling.getPreviousSibling();
if (bookmarkStart != null) {
Node nameAttribute = bookmarkStart.getAttributes().getNamedItem("w:name");
if (nameAttribute != null && name.equals(nameAttribute.getNodeValue())) {
idx = i - 1;
break;
}
}
}
}
}
if (idx >= 0 && idx < runs.size()) {
run = runs.get(idx);
} else {
run = paragraph.createRun();
}