elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Duda con Creación dinamica de PDF en entorno web JAVA con Itext
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con Creación dinamica de PDF en entorno web JAVA con Itext  (Leído 6,756 veces)
h3ct0r

Desconectado Desconectado

Mensajes: 108


Hail to the king baby!


Ver Perfil
Duda con Creación dinamica de PDF en entorno web JAVA con Itext
« en: 22 Abril 2011, 07:31 am »

Buenos días amigos, me he visto en la necesidad de que en mi sitio de e-commerce (Tienda online) se encuentre la opción de imprimir la "factura" o "comprobante" de la compra, así como la capacidad de guardar esa factura en formato PDF.

Estoy utilizando java web para esto, y conseguí una buena y sencilla librería llamada Itext que me permite la creación de los PDF.

Mi pregunta es, ¿Cual seria la manera mas óptima de presentar el PDF a los usuarios?. Estaba pensando en crear el PDF en memoria y mostrárselo al usuario directamente, esto a travez de un servlet que reciba los parámetros de la factura (Nombre, productos, fecha, etc) por GET, POST, o a travez de una variable de sesión (Preferiblemente una variable sesión ya que así me quitaría el dolor de cabeza de algún tipo de mal uso del servlet si se le pasan valores incorrectos por GET o POST), para luego crear el PDF y mostrárselo al usuario. Quisiera evitar en lo posible crear los documentos dentro de algún directorio en el servidor ya que tendría que crear alguna especie de cron para cada cierto tiempo eliminarlos despues de un tiempo específico.

Quisiera saber que opinan ustedes de esta manera de realizarlo, o si existe un mejor enfoque.

Muchisimas gracias!  ;)

PD: Si necesitan que les de mas información o si no se entiende bien la pregunta o el problema por favor avisenme para modificar el tema. Me parece raro que ya mas de 100 personas vean el tema y no opinen nada!


« Última modificación: 23 Abril 2011, 02:09 am por h3ct0r » En línea

[img[/img]
madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Re: Duda con Creación dinamica de PDF en entorno web JAVA con Itext
« Respuesta #1 en: 23 Abril 2011, 17:43 pm »

Citar
Estaba pensando en crear el PDF en memoria y mostrárselo al usuario directamente,

Es justamente lo que hacen la mayoría de los sitios, crear el PDF "on the fly" y mostrárselo al usuario.

Para que el navegador interprete correctamente el PDF tendrías que usar tipos MIME en las cabeceras HTTP (solo si tu librería no lo hace),
el MIME sería algo así: text/pdf.

El otro proceso(el de crearlo en el servidor, enviarlo al usuario y borrarlo) es más lento y no te lo recomiendo.


En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
h3ct0r

Desconectado Desconectado

Mensajes: 108


Hail to the king baby!


Ver Perfil
Re: Duda con Creación dinamica de PDF en entorno web JAVA con Itext
« Respuesta #2 en: 23 Abril 2011, 21:56 pm »

Gracias por tu reply madpitbull_99 , efectivamente voy a tomar tu consejo y lo haré en memoria. Comentaré los resultados!

Saludos! ;D
En línea

[img[/img]
mikezero84

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Duda con Creación dinamica de PDF en entorno web JAVA con Itext
« Respuesta #3 en: 22 Noviembre 2012, 02:12 am »

Buen Día, Hector me he topado con ese mismo problema, hasta el momento lo que había hecho es la manera difícil, crear un pdf en una carpeta temporal pero si es muy tardado, algún ejemplo que me puedas aportar para entender como hacerlo al vuelo?, te lo agradecería.

Saludos

dejo mi codigo:
Código:
<%@page contentType = "text/html" pageEncoding="UTF-8"%>
<%@page import = "java.io.IOException"%>
<%@page import = "java.io.OutputStream"%>
<%@page import = "java.io.FileOutputStream"%>
<%@page import = "java.io.File"%>
<%@page import = "java.io.BufferedWriter"%>
<%@page import = "java.io.OutputStreamWriter"%>
<%@page import = "javax.servlet.ServletException"%>
<%@page import = "javax.servlet.http.HttpServlet"%>
<%@page import = "javax.servlet.http.HttpServletRequest"%>
<%@page import = "javax.servlet.http.HttpServletResponse"%>
<%@page import = "org.xhtmlrenderer.pdf.ITextRenderer"%>
<%@page import = "javax.servlet.http.HttpSession"%>
<%@page import = "java.sql.SQLException"%>
<%@page import = "java.io.PrintWriter"%>


<%@page import = "java.util.Vector"%>
<%@page import = "java.io.InputStream"%>
<%@page import = "java.io.FileInputStream"%>

<%@ page import="java.util.Vector" %>
<%@page import="java.util.ArrayList"%>

<%@page import= "java.sql.Timestamp"%>
<%@page import= "java.util.Date"%>
<%@page import= "java.text.SimpleDateFormat"%>



<%
   
    String strCadena = "";
    String htmlPDF = "";
    String strOrientacion = "";
    String strResultado = "";
    String strDependencia = "";
    String DATE_FORMAT = "yyMMddHHmmss";
    String fecha = "";
   
    int iPagina = 1;
    int iTotalEmpleados = 0;
    int iPaginaInicio = 0;
    int iPaginaFinal = 0;
    long iTotalPaginas = 0;
    int iOpcion = 0;
    int iRangoDesde = 0;
    int iRangoHasta = 0;
    int iOrdenar = 1;
    int iRegsXpagina = 10000;
   
    ArrayList vcResultado = null;
    Vector vcColumnas = null;

    int iColumnas = 0;
   
    File inputFile;
   
    ResultSQL result = null;
   
    try{
       
        if (request.getParameter("input-opcion")!= null
                && !request.getParameter("input-opcion").equals("undefined")){
                String tmp = request.getParameter("input-opcion");
            iOpcion = Integer.parseInt(tmp);
            }
       
         if (iOpcion == 4){
                    if (request.getParameter("input-rangoDesde")!= null
                        && !request.getParameter("input-rangoDesde").equals("undefined")){
                        iRangoDesde = Integer.parseInt(request.getParameter("input-rangoDesde"));
                    }
                   
                    if (request.getParameter("input-rangoHasta")!= null
                        && !request.getParameter("input-rangoHasta").equals("undefined")){
                        iRangoHasta = Integer.parseInt(request.getParameter("input-rangoHasta"));
                    }
            }else{
                if (request.getParameter("input-buscarCadena")!= null
                    && !request.getParameter("input-buscarCadena").equals("undefined")){
                    strCadena = request.getParameter("input-buscarCadena");
                }
            }
       
            if(request.getParameter("ordenar")!= null
                && !request.getParameter("ordenar").equals("")
                && !request.getParameter("ordenar").equals("undefined")){
            iOrdenar = Integer.parseInt(request.getParameter("ordenar"));
            }

            if (request.getParameter("orientacion")!= null
                && !request.getParameter("orientacion").equals("undefined")){
            strOrientacion = request.getParameter("orientacion");
            }
       
        //**XHTML
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        fecha += sdf.format(date);
        inputFile = new File(getServletContext().getRealPath("tmp/temporal"+fecha+".xhtml"));

        if(!inputFile.exists()){ 
            inputFile.createNewFile();
        }
       
        result = new ResultSQL();
        result.setStrSever(request.getHeader("host"));
        result.setStrUbicacion(getServletContext().getRealPath("").toString());
        result.setiRegistrosXPagina(iRegsXpagina);
       
        result.resultSQLConecta("logsweb");
       
        String strTempEmpleados = "";
       
        if (iOpcion !=  4){
            vcResultado = (ArrayList) result.getConsultaEmpleados(strCadena, iOpcion, false, iPagina, iOrdenar, strOrientacion, true);
        }
        else{
            vcResultado = (ArrayList) result.getConsultaEmpleadosRangos(iRangoDesde,iRangoHasta, false, iPagina, iOrdenar, strOrientacion, true);
        }
                       
        Empleado empleado = null;
       
        strResultado +="    <div id='tbConsultasRecibidas' class='tabla-seguimiento'> "+
                                     "    <table class='tabla' id='tbConsultasRecibidas-tabla' align='center'>"+
                                     "              <thead>"+
                                     "    <tr class='thead'>";
       
        if (iOpcion != 2){
       
            strResultado +="                              <th>Dependencia</th>"+
                                         "                              <th>Nombre</th>"+
                                         "                              <th>Puesto</th>"+
                                         "                              <th>Sueldo Bruto (Incluye prestaciones)</th>"+
                                         "                              <th>Prima Vacacional</th>"+
                                         "                              <th>Aguinaldo</th>"+
                                         "                              <th>Pagos Anuales</th>"+
                                         "    </tr>"+
                                         "              </thead>"+
                                         "              <tbody>";
        }
        else{
                strResultado +="                              <th>Nombre</th>"+
                                         "                              <th>Puesto</th>"+
                                         "                              <th>Sueldo Bruto (Incluye prestaciones)</th>"+
                                         "                              <th>Prima Vacacional</th>"+
                                         "                              <th>Aguinaldo</th>"+
                                         "                              <th>Pagos Anuales</th>"+
                                            "    </tr>"+
                                            "              </thead>"+
                                            "              <tbody>";
        }
       
        for(int i = 0 ; i < vcResultado.size(); i++){

                empleado = (Empleado) vcResultado.get(i);

                String strOpcion = "";
                   
                if (iOpcion != 2){
                   
                    strResultado += "<tr class='fila1'>  "+
                                                  "     <td id='cadena'>"+empleado.getStrDependencia() + "</td>"+
                                                  "     <td id='cadena'>"+empleado.getStrNombre() + "</td>"+
                                                  "     <td id='cadena'>"+empleado.getStrPuesto() + "</td>"+
                                                  "     <td id='moneda'>"+empleado.getStrSueldo() + "</td>"+
                                                  "     <td id='moneda'>"+empleado.getStrPrimaVacacional() + "</td>"+
                                                  "     <td id='moneda'>"+empleado.getStrAguinaldo() + "</td>"+
                                                  "     <td id='moneda'>"+empleado.getStrPagosAnuales() + "</td>";
                    strResultado += "</tr>" ;
                   
                    }else{
                       
                            strResultado += "<tr class='fila1'>  "+
                                                          "     <td id='cadena'>"+empleado.getStrNombre() + "</td>"+
                                                          "     <td id='cadena'>"+empleado.getStrPuesto() + "</td>"+
                                                          "     <td id='moneda'>"+empleado.getStrSueldo() + "</td>"+
                                                          "     <td id='moneda'>"+empleado.getStrPrimaVacacional() + "</td>"+
                                                          "     <td id='moneda'>"+empleado.getStrAguinaldo() + "</td>"+
                                                          "     <td id='moneda'>"+empleado.getStrPagosAnuales() + "</td>";
                            strResultado += "</tr>" ;
                            strDependencia = empleado.getStrDependencia().toUpperCase();
                    }
        }
        strResultado+="             </tbody> "+
                                    "               <tfoot>  "+
                                    "               </tfoot> "+
                                    "           </table> "+
                                    "       </div>";
       
       
        htmlPDF +=     "<!DOCTYPE html>  "+
                                "<html> "+
                                "<head> "+
                                "<meta charset='UTF-8'></meta> "+
                                "<title>Sueldos de Personal</title> "+
                                "<link rel='stylesheet' media='print' href='../css/print.css' type='text/css'></link> "+
                                "</head> "+
                                "<body> "+
                                "<div class='contenedor-Principal'> "+
                                "    <div class='titulos'> "+
        if (iOpcion == 2){
            htmlPDF +="        <h4>"+strDependencia+"</h4> ";
        }
            htmlPDF +="    </div> "+
                                "    <br/> "+
                                "    <br/> "+
                                "    <br/> "+
                                        strResultado+
                                "</div> "+
                                "</body> "+
                                "</html>";
       
        BufferedWriter Fescribe=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(inputFile,false), "utf-8"));   
        Fescribe.write(htmlPDF); 
        Fescribe.close();

        //***PDF
        String outputFile = getServletContext().getRealPath("tmp/sueldosplantilla"+ fecha +".pdf");

        OutputStream os = new FileOutputStream(outputFile);
               
        ITextRenderer renderer = new ITextRenderer();
       
        renderer.setDocument(inputFile);   
        renderer.layout();
        renderer.createPDF(os);
        os.close();

        //***Borrar XHTML
        if(inputFile.exists()){   
            inputFile.delete();   
        }
       
     }catch(Exception e){
        out.println("-1");
        Bitacora bitacora = new Bitacora();
        bitacora.setStrServer(request.getHeader("host"));
        bitacora.setStrUbicacion(getServletContext().getRealPath("").toString());
        bitacora.setITipoBitacora(1);
        bitacora.setStrInformacion(e, request.getServletPath());
        bitacora.grabaBitacora();
    }finally{
       
    }

%>
<!DOCTYPE html>
<html>
  <head>
    <title>
    </title>
      <script type='text/javascript' src='js/jquery-1.8.2.js'></script>
      <script type="text/javascript">
          window.location.replace("../tmp/sueldosplantilla<%=fecha%>.pdf");
      </script>
  </head>
  <body>
    <header>Header</header>
    <div id='content'>Content</div>
    <div id='footer'>Footer</div>
  </body>
</html>

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Creacion de firma dinamica
PHP
GreatSaiyan 1 5,039 Último mensaje 2 Octubre 2004, 04:52 am
por Azielito
Creacion dinamica de botones (FLASH)
Diseño Gráfico
DownRate 1 2,867 Último mensaje 25 Julio 2006, 18:28 pm
por DownRate
creacion dinamica de botones con flash
Diseño Gráfico
DownRate 0 1,712 Último mensaje 24 Julio 2006, 23:23 pm
por DownRate
Creación dinámica de jButtons/Buttons « 1 2 »
Java
NelxoN 11 14,242 Último mensaje 30 Abril 2013, 00:32 am
por JacobJankowski
creacion y manipulacion dinamica de objetos
.NET (C#, VB.NET, ASP)
rulovive 7 3,729 Último mensaje 2 Febrero 2018, 11:56 am
por Tazmania40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines