Apache 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 се използва за разглобяване на файловете на Office 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 като en entity, но от практическа гледна точка и гледна точка на отстраняване на грешки това е ужасна опция. - person awm; 18.12.2013