gpt4 book ai didi

java - 在 XWPFDocument 中插入一个段落

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:35 25 4
gpt4 key购买 nike

我正在对 .docx 文件进行搜索和替换,在某些情况下,替换文本包含换行符。我为此尝试了几种技术。第一个是将替换文本分成几行并执行:

run.setText(lines[0], 0);
for(int x=1; x<lines.length; x++) {
run.addCarriageReturn();
run.setText(lines[x]);
}

结果全部在一行中运行。

然后我做了一些搜索,找到了这段代码,用于用每行一组段落替换现有段落:

private void replaceParagraph(XWPFParagraph p, String[] paragraphs) {
if (p != null) {
XWPFDocument doc = p.getDocument();
for (int i = 0; i < paragraphs.length; i++) {
XmlCursor cursor = p.getCTP().newCursor();
XWPFParagraph newP = doc.insertNewParagraph(cursor);
newP.setAlignment(p.getAlignment());
newP.getCTP().insertNewR(0).insertNewT(0).setStringValue(paragraphs[i]);
newP.setNumID(p.getNumID());
}
doc.removeBodyElement(doc.getPosOfParagraph(p));
}
}

问题是 insertNewParagraph 每次都返回 null。这可能是因为该段落位于表格单元格内,但我没有将其作为原因。我检查了游标,cursor.isStart() 为 true,这似乎符合文档的要求。

Add a new paragraph at position of the cursor. The cursor must be on the XmlCursor.TokenType.START tag of an subelement of the documents body. When this method is done, the cursor passed as parameter points to the XmlCursor.TokenType.END of the newly inserted paragraph.

我已经仔细检查过 doc != null,我想不出任何其他可能返回 null 的原因。有什么建议吗?

最佳答案

事实证明,这解决了问题。

private void createParagraphs(XWPFParagraph p, String[] paragraphs) {
if (p != null) {
XWPFDocument doc = p.getDocument();
XmlCursor cursor = p.getCTP().newCursor();
for (int i = 0; i < paragraphs.length; i++) {
XWPFParagraph newP = doc.createParagraph();
newP.getCTP().setPPr(p.getCTP().getPPr());
XWPFRun newR = newP.createRun();
newR.getCTR().setRPr(p.getRuns().get(0).getCTR().getRPr());
newR.setText(paragraphs[i]);
XmlCursor c2 = newP.getCTP().newCursor();
c2.moveXml(cursor);
c2.dispose();
}
cursor.removeXml(); // Removes replacement text paragraph
cursor.dispose();
}
}

关于java - 在 XWPFDocument 中插入一个段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20667619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com