生成包含 PDF 的 ZIP

  • 本文关键字:ZIP PDF 包含 java itext
  • 更新时间 :
  • 英文 :


我需要返回一个 HttpServletResponse 才能使用 iText 下载包含 PDF 的 ZIP 文件。这是我的代码:

           String fileName = "Acreditaciones.zip";
           ByteArrayOutputStream baos = new ByteArrayOutputStream();
           ZipOutputStream zos = new ZipOutputStream(baos);
           for(int i = 0; i < numAcre; i++){
               zos.putNextEntry(new ZipEntry("Acreditaciones" +  String.valueOf(i+1) + ".pdf"));
               Document document = new Document();
               PdfWriter.getInstance(document, baos);
               //Abrimos el documento para insertarle contenido
               document.open();
               //TODO: Coger la URL de los parametros de la BD y cifrar el id del perceptor o la columna que lo identifique
               //Creamos imagen con codigo QR
               BarcodeQRCode barcodeQRCode2 = new BarcodeQRCode(URL + UtilsSeguridad.cifrar("80004244D"), 1000, 1000, null);
               Image codeQrImage2 = barcodeQRCode2.getImage();
               codeQrImage2.setAlignment(Image.RIGHT);
               codeQrImage2.scaleAbsolute(70, 70);
               document.add(codeQrImage2);
               document.close();
               zos.closeEntry();
           }
           zos.finish();
           zos.close();
           response.setHeader("Content-Disposition", "attachment; filename=""+ fileName + "";");
           // Indicamos que es un PDF
           response.setContentType("application/zip");
           // El tamaño del contenido es igual al del ByteArrayOutputStream
           response.setContentLength(baos.size());
           // Inyectamos el ByteArrayOutputStream al ServletOutputStream
           ServletOutputStream os = response.getOutputStream();
           baos.writeTo(os);
           os.flush();
           os.close();
           FacesContext.getCurrentInstance().responseComplete();

当我下载 ZIP 文件时,这伴随着所有 PDF 损坏且没有大小......我不知道我做错了什么,但似乎文档没有被实例化。

替换以下行:

PdfWriter.getInstance(document, baos);

有这两行:

PdfWriter writer = PdfWriter.getInstance(document, zos);
writer.setCloseStream(false);

不要忘记告诉writer实例不要关闭基础流,否则关闭document实例也会关闭ZipOutputStream,并且您将无法添加新条目。

最新更新