2013-10-07 4 views
0

Я нашел, что люди используют docx4j для изменения docx's. Я прошел «начало», и я полагаю, что у меня есть базовые знания об этой работе lib.Как добавить текст в начало docx java

Что я хочу достичь, так это добавить основной текст в начало документа (перед любым другим текстом). Мне удалось добавить текст в конец файла. Вот код:

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

Не следует ли иметь дополнительные API, помимо 'addParagraphOfText'? – GGrec

ответ

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

Я не знаю, как это сделать с 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(); 
     } 
    } 
}