lunes, 16 de julio de 2007

Mostrando pdf usando struts.

Problema: Queremos poner un enlace para que se llame un action y se muestre un pdf (típica ventana para abrir o descargar). El pdf nos viene en un array de bytes.

Solución: Desde la propia action que es llamada desde el enlace, colocaríamos el siguiente código:



try{
//obtengo el array de bytes del pdf
byte[] respuestaByte= this.miDelegate.getPDF();

//digo que es un pdf
response.setContentType("application/pdf");

//asigno el nombre del pdf, para cuando el usuario lo abra o descargue
response.setHeader("Content-Disposition",("attachment;filename=\"" +
nombrePDF+ ".pdf\""));

int longitud = respuestaByte.length;

//especifico el tamaño
response.setContentLength(longitud);

/*volcando a fichero*/
ServletOutputStream ouputStream = response.getOutputStream();

ouputStream.write(respuestaByte);

ouputStream.flush();

ouputStream.close();

}
catch(Exception e){
logger.error("No se ha podido regenerar correctamente el pdf");
}

2 comentarios:

Anónimo dijo...

Una explicación un poquito más detalla acerca del this.miDelegate.getPDF(); Gracias.

Unknown dijo...

Dicho método lo que hace es pedir los bytes de un pdf (generado con un diseñador de pdf's), en este caso me venía por medio de un servicio web. Yo usaba normalmente el IReport, pero en este caso no estaba hecho así, y lo que recibía era dicho array de bytes