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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了制作包含所有内容和属性的段落的精确副本?相关的知识,希望对你有一定的参考价值。

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

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所做的根本性改变。这导致我的输出文档包含占位符文本,因为我的代码似乎无法再看到段落的内容以执行替换。

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

答案

这似乎正在完成工作。我不确定整个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));
}

以上是关于制作包含所有内容和属性的段落的精确副本?的主要内容,如果未能解决你的问题,请参考以下文章

制作一个 uiview 的精确副本,除了制作它的精确副本实例外,它希望永远不会被自己使用

如何制作 UIComponent 的精确副本? (iPad)

如何使用 XSLT 制作 xml 节点的子节点的精确副本?

Listview builder 创建列表项的副本

Python:将 HTML 片段分隔为段落

三行java代码解析pdf获取文档内容(包含表格及段落)