Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/06/2011, 09:26
Antrim
 
Fecha de Ingreso: marzo-2011
Mensajes: 20
Antigüedad: 13 años, 8 meses
Puntos: 0
Mostrar PDF en navegador

Buenas. Estoy diseñando una tienda virtual y me encuentro con el siguiente problema.

Cuando se realiza un pedido, el sistema crea un .pdf con la factura/tícket de compra y lo mete en la tabla 'factura' de la base de datos, que tiene un campo BLOB llamado 'doc'.

Ahora, lo que quiero es que cuando un usuario va a la página de su pedido, al hacer click en el hipervínculo "Ver factura" se vea el .pdf en la página. Mi ignorancia del tema de archivos binarios y flujos de datos es suprema, así que estoy teniendo bastantes problemas para deducir cómo seguir. Por el momento lo que he conseguido, a base de robar trocitos de código de distintos sitios, es que al hacer click en el hipervínculo "Ver factura" se descargue el .pdf. He aquí mi código:

try {
Connection conexion = DriverManager.getConnection( CONNECTION_URL );
Statement s = conexion.createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM factura WHERE idPedido='" + request.getParameter("id") + "'");
while (rs.next()) {
Blob blob = rs.getBlob(5);
InputStream is = blob.getBinaryStream();
byte[] data = new byte[is.available()];
is.read(data);

response.setContentType("application/pdf;");
response.setHeader("Content-Disposition","attachment;filename=\"" + request.getParameter("id") + ".pdf\";");
response.setContentLength(data.length);
javax.servlet.ServletOutputStream servletoutputstream = response.getOutputStream();

servletoutputstream.write(data);
servletoutputstream.flush();
servletoutputstream.close();
}
rs.close();
s.close();
conexion.close();
} catch (Exception e) {
e.printStackTrace();
}


En resumen, lo que hace ahora al hacer click en el hipervínculo es descargar el .pdf, y lo que deseo que haga es redirigirme a una página en la que se muestra el .pdf

Me da la sensación de que hacer lo que quiero tiene que ser cosa de una o dos líneas más -ya que tengo un flujo de datos con el .pdf en sí, y lo tengo porque efectivamente se descarga correctamente, me extrañaría que no hubiera ninguna forma de plasmar ese flujo en pantalla, usando un PrintWriter o por el estilo-, el problema es que como ya he dicho tengo más bien poca idea del tema y puedo estar contento por poder descargar el fichero a estas alturas, porque me cuesta bastante entender el código.
A ver si alguien que entienda un poquito me puede echar una mano.

Gracias!