Я надеюсь, что вы можете мне помочь. У меня много файлов pdf, они в формате byte [], потому что я получил их из базы данных. Мне нужно их объединить, но в итоговом файле не может быть более 1000 листов, поэтому, если общее количество моих файлов pdf превышает 1000 листов, мне придется создать много файлов pdf, ограниченных этим размером листов.

Я только что это сделал, я построил алгоритм, который возвращает List

Теперь это моя проблема. Как я могу получить каждый файл, объединить их и поместить в zip-файл для загрузки?

Я пробовал это ...

public static void openZipFile(HttpServletResponse response, String fileName, List<ByteArrayInputStream[]> conteudosZIP)
        throws Exception {

    response.setContentType("application/zip");
    response.setHeader("Content-Disposition", "attachment;filename=" + fileName.replaceAll("\u0020", "_").replaceAll(",", "_") + ".zip");
    
    ServletOutputStream out = response.getOutputStream();
    ZipOutputStream zout = new ZipOutputStream(out);
    Integer cont = 1;
    
    for(ByteArrayInputStream[] conteudoArray : conteudosZIP ) {
        PDDocument result = new PDDocument();
        PDFMergerUtility ut = new PDFMergerUtility();
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        for(ByteArrayInputStream conteudo : conteudoArray) {
            ut.appendDocument(result, PDDocument.load(conteudo));
        }
        result.save(byteArrayOutputStream);
        ZipEntry ze = new ZipEntry(fileName + '_' + cont++ + ".pdf");
        zout.putNextEntry(ze);
        zout.write(byteArrayOutputStream.toByteArray());
        zout.closeEntry();          
    }       
}
1
Anderson Barbosa 9 Фев 2021 в 21:53

1 ответ

Лучший ответ

Непонятно, какая часть из этого вам не подходит. Что произойдет, когда вы запустите это?

Вы можете добавить zout.close() в конце.

1
Erik 9 Фев 2021 в 19:49