使用Apache POI通过子弹完整地复制docx中的内容

时间:2015-05-21 12:34:06

标签: java apache-poi docx docx4j

我正在尝试将docx文件中的内容最终复制到剪贴板。我到目前为止提出的代码是:

package config;

public class buffer {

    public static void main(String[] args) throws IOException, XmlException {
        XWPFDocument srcDoc = new XWPFDocument(new FileInputStream("D:\\rules.docx"));

        XWPFDocument destDoc = new XWPFDocument();
        OutputStream out = new FileOutputStream("D:\\test.docx");

        for (IBodyElement bodyElement : srcDoc.getBodyElements()) {
            XWPFParagraph srcPr = (XWPFParagraph) bodyElement;
            XWPFParagraph dstPr = destDoc.createParagraph();
            dstPr.createRun();
            int pos = destDoc.getParagraphs().size() - 1;
            destDoc.setParagraph(srcPr, pos);
        }

        destDoc.write(out);
        out.close();
    }
}

这确实会获取子弹但会对它们进行编号。我想保留原始的子弹格式。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

您需要正确处理编号定义(在编号部分中)。

最可靠的做法是将定义(实例列表和抽象列表)复制到一起,然后重新编号(即给它一个新ID),使其独一无二。

当然,您需要更新段落中的ID才能匹配。

请注意,上述内容仅适用于您提出的问题。

如果您的内容包含对其他部分(例如图像)的rel,则会遇到问题。并且您没有处理样式定义等。