制作包含所有内容和属性的段落的精确副本?

问题描述 投票:1回答:1

我正在尝试将一个段落的精确副本复制到另一个段落中(我正在将模板复制到新文档以进行单词替换)。我正在为表格单元格中的段落执行此操作,但我不认为这是重要的。以下代码几乎可以工作:

for (XWPFParagraph p : cell.getParagraphs()) {
    XWPFParagraph np = newCell.addParagraph();
    np.getCTP().set(p.getCTP());
}

问题是,虽然np.getCTP().xmlText().equals(p.getCTP().xmlTest()是真的,np.getText()是空白的,而p.getText()有段落的内容。看起来我的段落并不知道我对XML所做的根本性改变。这导致我的输出文档包含占位符文本,因为我的代码似乎无法再看到段落的内容以执行替换。

如何制作包含所有内容和属性的段落的完美副本?

java apache-poi
1个回答
9
投票

这似乎正在完成工作。我不确定整个cloneRun()方法不能被nr.getCTR().set(r.getCTR());取代,但这似乎比抱歉更安全。

public static void cloneParagraph(XWPFParagraph clone, XWPFParagraph source) {
    CTPPr pPr = clone.getCTP().isSetPPr() ? clone.getCTP().getPPr() : clone.getCTP().addNewPPr();
    pPr.set(source.getCTP().getPPr());
    for (XWPFRun r : source.getRuns()) {
        XWPFRun nr = clone.createRun();
        cloneRun(nr, r);
    }
}

public static void cloneRun(XWPFRun clone, XWPFRun source) {
    CTRPr rPr = clone.getCTR().isSetRPr() ? clone.getCTR().getRPr() : clone.getCTR().addNewRPr();
    rPr.set(source.getCTR().getRPr());
    clone.setText(source.getText(0));
}
© www.soinside.com 2019 - 2024. All rights reserved.