我有一个使用iText生成的Pdf,我下载它,我需要将它附加到Zip文件并下载到,这可能吗?
这是我的代码
public ActionForward descargarConstancia(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response){
UsuarioBean usuarioBean = (request.getSession().getAttribute("infoUsuario") == null ? null : (UsuarioBean) request.getSession().getAttribute("infoUsuario"));
if (usuarioBean == null)
return mapping.findForward("cerrarSesionNominas");
try{
ConstanciaRetencionBusiness constanciasBO = new ConstanciaRetencionBusinessImpl();
UsuarioNominasBean usuarioNomBean = (request.getSession().getAttribute("usuarioNominasBean") == null ? null : (UsuarioNominasBean) request.getSession().getAttribute("usuarioNominasBean"));
String rfcOtro = request.getParameter("rfc")!=null ? request.getParameter("rfc") : usuarioNomBean.getRFC();
List listaConst = constanciasBO.selectByRFC(rfcOtro);
int noConstancia = request.getParameter("noConstancia")!=null ? Integer.parseInt(request.getParameter("noConstancia")) : 0;
List lstPdfBytes = new ArrayList();
if(listaConst!=null && listaConst.size()>noConstancia){
ConstanciaRetencionVO vo = (ConstanciaRetencionVO)listaConst.get(noConstancia);
lstPdfBytes.add(constanciasBO.generarConstancia(request, vo));
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=Constancia_"+rfcOtro+".pdf");
OutputStream out = response.getOutputStream();
concatena( lstPdfBytes, out,request);
out.flush();
out.close();
}
}catch(Exception e){
log.info(LineException.getException(e));
return mapping.findForward(mostrarRecibo);
}finally{
}
return mapping.findForward("registroCorrecto");
}
这是生成PDF的代码
public void concatena(List lstPdfBytes, OutputStream out,HttpServletRequest req) throws Exception{
try{
PdfReader reader = null;
Document document = new Document();
PdfCopy copy = new PdfCopy(document, out);
document.open();
for(int i=0; lstPdfBytes!=null && i<lstPdfBytes.size(); i++){
reader = new PdfReader((byte[])lstPdfBytes.get(i));
int paginas = reader.getNumberOfPages();
for(int j=0; j<paginas;j++){
copy.addPage(copy.getImportedPage(reader, j+1));
}
}
document.close();
}catch(Exception exc){
log.info(LineException.getException(exc));
throw new Exception(Errores.ERROR_PDF);
}
}
我正在尝试使用Zip4j库,但我遇到了
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=Constancia_"+rfcOtro+".zip");
OutputStream out = response.getOutputStream();
ConstanciaRetencionVO vo = (ConstanciaRetencionVO)listaConst.get(noConstancia);
byte []arr=constanciasBO.generarConstancia(request, vo);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
concatena( lstPdfBytes, out);
ZipParameters parametros = new ZipParameters();
parametros.setCompressionMethod(8);
parametros.setCompressionLevel(5);
parametros.setEncryptFiles(true);
parametros.setPassword("password");
parametros.setEncryptionMethod(99);
parametros.setAesKeyStrength(3);
parametros.setSourceExternalStream(true);
parametros.setFileNameInZip("constancia.pdf");
ZipOutputStream zos = new ZipOutputStream(baos);
zos.putNextEntry((File)null, parametros);
zos.write(arr);
zos.closeEntry();
zos.flush();
zos.finish();
concatena( lstPdfBytes, out);
out.flush();
out.close();
答案 0 :(得分:0)
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=Constancia_"+rfcOtro+".zip");
ConstanciaRetencionVO vo = (ConstanciaRetencionVO)listaConst.get(noConstancia);
byte[] arr = constanciasBO.generarConstancia(request, vo);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipParameters parametros = new ZipParameters();
parametros.setCompressionMethod(8);
parametros.setCompressionLevel(5);
parametros.setEncryptFiles(true);
parametros.setPassword("password");
parametros.setEncryptionMethod(99);
parametros.setAesKeyStrength(3);
parametros.setSourceExternalStream(true);
parametros.setFileNameInZip("constancia.pdf");
ZipOutputStream zos = new ZipOutputStream(baos);
zos.putNextEntry(null, parametros);
zos.write(arr);
zos.closeEntry();
zos.finish();
zos.close();
response.getOutputStream().write(baos.toByteArray());
response.flushBuffer();
baos.close();