Апач POI. Как передать docx/XWPFDocument в ZipOutputStream

У меня есть по существу следующий код:

ZipOutputStream out = new ZipOutputStream( outputStream );

for ( Person person: people ) {

         XWPFDocument document = new XWPFDocument();
         out.putNextEntry( new ZipEntry( person.getName() ) );
         document.write( out );
         out.closeEntry();
}

Когда я запускаю это, создается zip-файл, но файл docx внутри разделен на составные части, и он не создает более одного расширенного файла docx.

Можно ли передавать несколько файлов docx в zip-файл с помощью apache poi?


person user1740752    schedule 16.12.2013    source источник
comment
docx уже заархивирован, так что вы просто пытаетесь упаковать их вместе? Если это так, вам не нужно открывать документ, чтобы сделать это, просто заархивируйте их как отдельные файлы.   -  person awm    schedule 16.12.2013
comment
@awm Да, я хочу создать ZIP-файл, полный файлов docx. Я также не уверен, как изменить имя сгенерированного файла docx.   -  person user1740752    schedule 17.12.2013


Ответы (1)


Вам не нужен POI. POI используется для дизассемблирования офисных файлов 2010+ для внутреннего управления ими.

Вам просто нужно заархивировать их, используя: http://www.programcreek.com/java-api-examples/index.php?api=java.util.zip.ZipEntry

person awm    schedule 17.12.2013
comment
Привет, спасибо за ваш ответ. Мой пример кода был немного надуманным, так как я хотел включить только самое необходимое. Однако я хочу отредактировать документ для каждого «человека» в коллекции «люди», а затем сохранить все отредактированные документы с новым именем файла в один zip-файл. - person user1740752; 18.12.2013
comment
Теоретически вы можете сделать все это за один шаг, используя DocumentOutputStream из POI и добавляя его как ZipInputStream как сущность, но с практической точки зрения и с точки зрения отладки это ужасный вариант. - person awm; 18.12.2013