如何合并 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()
。
希望你能帮助我。 我有很多 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()
。