2013-05-16 2 views
0

Я использую POI Apache для работы с документами docx с использованием java. Принцип прост:Скопируйте docx в конец другого

  • У меня есть базовый шаблон для отображения данных (с текстом, заголовки и таблицы)
  • у меня есть данные, которые будут заполнить шаблон
  • Мне нужно, чтобы получить окончательный документ, который будет содержит шаблон, повторяющийся для каждой строки данных

Мне удалось загрузить документ-документ, и я также создал конечный объект документа, который ничего не содержит (из пустого документа, содержащего стили, которые я хочу, потерять их). Я могу изменить свои поля данных в шаблоне, просмотрев абзацы и таблицы, но то, что я не могу сделать, это скопировать содержимое, которое было изменено на окончательный документ.

В принципе, это то, что у меня есть:

for (int i=0; i<10; i++) { 
    finalDoc.removeBodyElement(i); 
} 
for (int i=0; i<10; i++) { 
    //EditableDocX is a subclass of XWPFDocument, for purpose of my project 
    EditableDocX document = new EditableDocX("template.docx"); 

    replacementMap.put("[field1]", "Content1_"+i); 
    replacementMap.put("[field2]", "Content2_"+i); 

    document.replaceWithMap(replacementMap); //I've have this working 
    finalDoc.addContentOfDoc(document); //I don't have this working :(
} 
finalDoc.saveFile("result.docx"); 

Есть ли способ, чтобы скопировать содержимое document объекта до конца finalDoc объекта? (есть абзацы и таблицы со стилями)

ответ

1

Я закончил смену библиотеки: docx4j более полезен для того, что я хотел сделать. FYI, вот фрагмент кода необходимо добавить в документ в конце другого:

public static void append(WordprocessingMLPackage docDest, WordprocessingMLPackage docSource) { 
    List<Object> objects = docSource.getMainDocumentPart().getContent(); 
    for(Object o : objects){ 
     docDest.getMainDocumentPart().getContent().add(o); 
    } 
} 

Это работает для меня, он копирует содержимое из docSource в docDest, сохраняя формат.