我发现人们使用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之前添加文本,而不是之后?另外,我想保持代码干净,易于阅读。
答案 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();
}
}
}