0

docx4j を使用して docx を変更する人がいることがわかりました。私は「はじめに」を経験しましたが、このライブラリの動作に関する基本的な知識があると思います。

私が達成したいのは、基本的なテキストをドキュメントの先頭 (他のテキストの前) に追加することです。ファイルの最後にテキストを追加することができました。コードは次のとおりです。

    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 の前にテキストを追加するにはどうすればよいですか? また、コードをクリーンで読みやすくしたいと考えています。

4

2 に答える 2

3

これがあなたが望むことをする簡単な方法です:

    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 をチェックしていません。

于 2013-10-08T00:04:31.463 に答える
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();
        }
    }
}
于 2013-10-07T23:10:05.237 に答える