如何在开始docx java中添加文本

时间:2013-10-07 21:21:43

标签: java parsing docx4j

我发现人们使用docx4j来修改docx。我经历了“开始”,我相信我对这个lib工作有基本的了解。

我想要实现的是将基本文本添加到文档的开头(在任何其他文本之前)。我设法将文本添加到文件末尾。这是代码:

    for(File file: folder.listFiles())
    {
        if(file.getName().contains("docx"))
        {
            try
            {
                WordprocessingMLPackage docx = WordprocessingMLPackage.load(file);
                docx.getMainDocumentPart().addParagraphOfText(toAppend);
                docx.save(new File(file.getAbsolutePath()));
            }
            catch (Docx4JException e)
            {
                e.printStackTrace();
            }
        }
    }

但它没有按照我的预期行事。它将文本附加到eof。如何在MainDocumentPart之前添加文本,而不是之后?另外,我想保持代码干净,易于阅读。

2 个答案:

答案 0 :(得分:2)

这是一个可以做你想做的简单方法:

    public org.docx4j.wml.P addParaAtIndex(MainDocumentPart mdp, String simpleText, int index) {

    org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory();
    org.docx4j.wml.P  para = factory.createP();

    if (simpleText!=null) {
        org.docx4j.wml.Text  t = factory.createText();
        t.setValue(simpleText);

        org.docx4j.wml.R  run = factory.createR();
        run.getContent().add(t); 

        para.getContent().add(run); 
    }

    mdp.getContent().add(index, para);

    return para;
}

我没有在这个例子中检查IndexOutOfBoundsException

答案 1 :(得分:1)

我不知道用docx4j做到这一点的方法,但我对这个库也不是很熟悉。如果您要尝试使用其他库,则可以下载Apache POI并执行以下操作:

for(File file: folder.listFiles())
{
    if(file.getName().contains("docx"))
    {
        try
        {
            HWPFDocument docx= new HWPFDocument(new java.io.FileInputStream(file));
            docx.getRange().insertBefore(toAppend);
            FileOutputStream fileOut = new FileOutputStream(file);
            docx.write(fileOut);
            fileOut.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}