如何合并 pdf 文件并将其下载为 zip 文件

How to merge pdf files and download it in a zip file

希望你能帮助我。 我有很多 pdf 文件,它们是 byte[] 格式,因为我是从数据库中获取它们的。 我需要合并它们,但生成的文件不能超过 1000 张,所以如果我的 pdf 文件总数超过 1000 张,我将不得不构建许多限制在这种尺寸的 pdf 文件。

我刚刚完成,我构建了一个算法 returns 一个 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();          
    }       
}

不清楚这其中的哪一部分不适合您。当你 运行 这个时会发生什么?

您可能想在末尾添加一个 zout.close()