【问题标题】:How to merge pdf files and download it in a zip file如何合并 pdf 文件并将其下载为 zip 文件
【发布时间】:2021-02-09 18:53:06
【问题描述】:

我希望你能帮助我。 我有很多 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();          
    }       
}

【问题讨论】:

    标签: java pdf zip pdfbox


    【解决方案1】:

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

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

    【讨论】:

    • 我无法打开生成的 zip 文件,它似乎已损坏。
    • Zip 文件将其“目录”保留在文件末尾,因此如果有未刷新的输出,则很容易损坏文件。所以我会重申在方法末尾添加zout.close(); 的建议。否则我看不出代码有任何明显的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2021-03-07
    • 1970-01-01
    相关资源
    最近更新 更多