Foros del Web » Programación para mayores de 30 ;) » Java »

Generar PDF con un servlet

Estas en el tema de Generar PDF con un servlet en el foro de Java en Foros del Web. Estoy tratando de generar un pdf con un serlet, el tema es que genero un sevrlet y en el metodo @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Java: Ver ...
  #1 (permalink)  
Antiguo 27/10/2015, 07:45
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 9 años, 8 meses
Puntos: 0
Generar PDF con un servlet

Estoy tratando de generar un pdf con un serlet, el tema es que genero un sevrlet y en el metodo

Código Java:
Ver original
  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
  2.         response.setContentType("application/pdf");
  3.         PrintWriter out = response.getWriter();
  4.        
  5.         out.println("<html>");
  6.          out.println("<body>");
  7.          out.println("PETER");
  8.          out.println("</body>");
  9.           out.println("</html>");
  10.           out.close();
  11.     }

Si le pongo en el contentype text/html funciona bien, application/xml tambien funciona bien.

application/pdf en cambio no funciona, en PHP metiendo el contentype pdf lo convierte, hay alguna forma de hacer lo mismo en Java?

Vi algunas APIS pero no funcionan como necesito.

Alguna idea?
  #2 (permalink)  
Antiguo 27/10/2015, 07:58
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
Respuesta: Generar PDF con un servlet

http://soloinformaticayalgomas.blogs...esde-java.html

Yo no he usado nunca pdfs desde java, pero esto parece fácil.
  #3 (permalink)  
Antiguo 27/10/2015, 08:40
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Generar PDF con un servlet

Una librería muy fácil de usar y con mucha info por todos lados es iText.

De acá la podes descargar: http://sourceforge.net/projects/itext/

Acá tenes un ejemplo de como usarla: http://www.ibm.com/developerworks/op...ry/os-javapdf/

Tambien podes hacerlo directamente sin libreria de esta forma:

Código Java:
Ver original
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.OutputStream;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. public class TestPdfServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
  11.  
  12.     private static final long serialVersionUID = 1L;
  13.  
  14.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  15.         performTask(request, response);
  16.     }
  17.  
  18.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
  19.             IOException {
  20.         performTask(request, response);
  21.     }
  22.  
  23.     private void performTask(HttpServletRequest request, HttpServletResponse response) throws ServletException,
  24.             IOException {
  25.  
  26.         String pdfFileName = "pdf-test.pdf";
  27.         String contextPath = getServletContext().getRealPath(File.separator);
  28.         File pdfFile = new File(contextPath + pdfFileName);
  29.  
  30.         response.setContentType("application/pdf");
  31.         response.addHeader("Content-Disposition", "attachment; filename=" + pdfFileName);
  32.         response.setContentLength((int) pdfFile.length());
  33.  
  34.         FileInputStream fileInputStream = new FileInputStream(pdfFile);
  35.         OutputStream responseOutputStream = response.getOutputStream();
  36.         int bytes;
  37.         while ((bytes = fileInputStream.read()) != -1) {
  38.             responseOutputStream.write(bytes);
  39.         }
  40.  
  41.     }
  42.  
  43. }

Última edición por ipraetoriux; 27/10/2015 a las 08:47
  #4 (permalink)  
Antiguo 27/10/2015, 09:59
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Generar PDF con un servlet

Gracias a ambos, voy a estar estudiando ambas respuestas.

Con tu ejemplo de crear PDF sin librerias me queda la duda de como escribo los datos en el fichero, pero bueno, lo voy a investigar.

Gracias a ambos de nuevo
  #5 (permalink)  
Antiguo 27/10/2015, 12:45
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Generar PDF con un servlet

Buenas,

En realidad en ambos casos te han recomendado la misma libreria: iText.

A mi tambien me parece la mejor opcion para tu caso. Adjunto otro tutorial:
http://www.ibm.com/developerworks/library/os-javapdf/


De verdad lo que pones en el primer post funciona directamente en PHP sin ninguna libreria ni modulo Apache?


Un salduo
__________________
If to err is human, then programmers are the most human of us
  #6 (permalink)  
Antiguo 17/11/2015, 09:40
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Generar PDF con un servlet

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

En realidad en ambos casos te han recomendado la misma libreria: iText.

A mi tambien me parece la mejor opcion para tu caso. Adjunto otro tutorial:
http://www.ibm.com/developerworks/library/os-javapdf/


De verdad lo que pones en el primer post funciona directamente en PHP sin ninguna libreria ni modulo Apache?


Un salduo
Lo hice hace tiempo, cuando llegue a casa me fijo en mis proyectos y te copio/pego un ejemplo siquieres


EDIT: Me confundi, hace tiempo lo que habia hecho es pasar por acbecera XLS y doc, sin frameworks podes crear esos ficheros, para pdf use dompdf y ezpdf, ambos 100000000 veces más faciles de usar que iText

Última edición por Hyemin; 20/11/2015 a las 12:55

Etiquetas: metodo, pdf, servlet
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:19.