sábado, 1 de junio de 2013

Crear un pdf en JAVA con iText

Buenas ahora le toca el turno a hacer lo mismo que hemos hecho con .NET con JAVA. Vamos a crear un pdf usando la librería iText. Como veremos el código es similar al que hemos usado para la aplicación que crea pdfs que hemos desarrollado en .NET. Voy a explicar cómo crear una aplicación en JAVA que se conectará a una base de datos JavaDB en un servidor y que mostrará los datos en un Formulario Maestro-Detalle. Pues bien en función de los datos seleccionados por el usuario crearemos en tipo de ejecución un pdf.  Es un proyecto muy simple y además aprovecho y cuelgo el proyecto el proyecto acabado de la aplicación que calcula la retribución en especie por el uso del coche de la empresa con fines privados y añado la posibilidad de crear facturas para justificar el IVA repercutido al trabajador. Está disponible en este enlace. Si alguien quiere el proyecto en NetBeans que me lo diga y lo subo también. Bueno la creación de pdfs quedaría de esta manera:
Pero he de reconocer que el proyecto de aplicación para calcular las retribuciones en especie por el uso privativo del coche muy simple y no serviría para entregar a un cliente. ¿El motivo? Lógicamente las facturas tienen que tener un número correlativo. No vale pasar de la 5 a la 10. Además si vemos que nos hemos equivocado en algo pues tendríamos que generar de nuevo la factura rellenando todos los datos. En pocas palabras haría falta una base de datos.
Pues bien ahora cuelgo el vídeo donde explico la parte de crear pdfs en JAVA con iText.

Pues bien ese será el tema que abordaremos después de exámenes, como hacer que los datos se guarden en nuestras bases de datos y para ello quiero hablar sobre cómo usar JAVA con MySQL, con Derby (tanto para bases de datos embebidas como en un server) y con Hsqldb. Estas dos últimas son ideales para tener bases de datos locales para nuestras aplicaciones de escritorio.  Pero no quiero adelantar temas lo que si que quiero decir que me centraré en explicar el uso de bases de datos: tanto situadas en un servidor y que nuestra aplicación sea una especie de cliente que se conecta al servidor y trabaja con los datos, como de aplicaciones de escritorio que usan bases de datos locales. Para ello quiero repasar como ejecutar comandos en nuestro código JAVA, que es lo más básico, y lo que actualmente se usa cada vez más que es JPA e Hibernate para persitencia de datos en nuestras aplicaciones. Suena feo pero será muy interesante.

26 comentarios:

  1. Disculpa y si quiero agregar una imagen ¿qué hago?

    ResponderEliminar
    Respuestas
    1. Hola mira en el video donde pongo.un ejemplo de cómo añadir una imagen situada en el directorio de la aplicación al pdf. Creas un objeto Image y la añades al documento pdf. No es complicado, y si quieres en.la página del.iText hay varios ejemplos de código.

      Eliminar
    2. Hola mira en el video donde pongo.un ejemplo de cómo añadir una imagen situada en el directorio de la aplicación al pdf. Creas un objeto Image y la añades al documento pdf. No es complicado, y si quieres en.la página del.iText hay varios ejemplos de código.

      Eliminar
    3. Hola mira en el video donde pongo.un ejemplo de cómo añadir una imagen situada en el directorio de la aplicación al pdf. Creas un objeto Image y la añades al documento pdf. No es complicado, y si quieres en.la página del.iText hay varios ejemplos de código.

      Eliminar
  2. Esta Excelente tu aporte,, te agradeceria si subieras ese proyecto en netbeans en el que diseñas la factura que muestras al principio de la pagina...


    Muchas gracias

    Feliz Dia

    ResponderEliminar
    Respuestas
    1. Hola si te refieres a la factura que se ve del post de retribuciones en especie que creo que sólo está subido el archivo .jar. Lo estoy retocando porque quiero agregarle una base de datos local, así pequeñita como la derby o la hsqldb, y cuando lo acabé lo comparto.

      Saludos,

      Eliminar
    2. muchas gracias brother,,,esperare tu gran aporte

      :)

      Eliminar
  3. hola, que tal.
    disculpa....en ese reporte tu ingresas los datos y lo generas?... como le hago para que el reporte se genere en base a datos de mi base de datos(mysql) ????
    o que otra librería me recomiendas ???

    saludos....

    ResponderEliminar
    Respuestas
    1. Hola esta semana colgaré un post sobre bases de datos en java. Si vas a usar datos en una base de datos mysql está el driver, y pasa bases de datos locales derby o hsqldb. Sería sólo al recuperar los datos a través de un recorset ir generando cada pdf.
      Otra alternativa sería ireport que te lo haría más fácil.

      Eliminar
  4. Podrias subir el proyecto en netbeans por favor

    ResponderEliminar
    Respuestas
    1. Hola lo tengo que rehacer. Verás que en último post hay un fichero con un proyecto JavaApplicationLocalDB que tiene un proyecto con una base de datos local derby. Te puede servir porque crea informes y los puedes guardar en pdf, word, ...
      Ya añadiré la opción de crear pdfs y Excels.

      Saludos,

      Eliminar
  5. como puedo hacer algo asi en javaFX ? si puedes ayudarme te lo agradeceria

    ResponderEliminar
    Respuestas
    1. En principio es llamar una librería de terceros por lo que agregas un botón y con los datos introducidos no veo que haya problemas.

      Eliminar
  6. hola, me gustaría optener el código de ejempo... porque la verdd es lo que esoty intentando hacer y no me termina de quedar el formato factura así...

    ResponderEliminar
  7. Muchas gracias por tu tiempo.
    Sería de ayuda el codigo fuente en netbeans.
    Gracias.

    ResponderEliminar
  8. muchas gracias !!! me ayudast mucho

    ResponderEliminar
  9. Hola, muchas graciass, es de gran ayuda!!
    Podrías subir el código del proyecto? Lo que mas me interesa es la parte de crear el pdf
    Graciass

    ResponderEliminar
  10. Cordial Saludo:
    Yo genero PDF's en un celular android 2.2 Froyo, con la plataforma ECLIPSE, lenguaje JAVA y libreria DroidText.02 y con su base de datos SQLite; Es lo siguiente:
    Después de crear y escribir en la segunda página, tengo la necesidad de volver a escribir en la primera ¿Esto se puede lograr?, Yo ingreso el texto e imágenes en posición absoluta (x, y); trabajo con PDF's que ya tienen escritura por tanto a cada nueva página se le da un nombre distinto.
    ¿Entonces cómo hago para escribir casi simultáneamente en la página 2 y en la página 1?
    De Antemano GRACIAS.

    ResponderEliminar
    Respuestas
    1. Hola, por lo que me dices usas el plugin adt en eclipse para crear aplicaciones para Android. Creas una Activity y en el layout añades un botón que genera un pdf con datos de tu base de datos y luegolo abres mediante un Intent implicito con cualquier aplicación del móvil que abra pdfs.
      No he probado aún iText programando para Android ya que suelo programar para la web en html5 y php y hago que el diseño sea adaptativo ya para el móvil y no suelo hacer aplicaciones específicas para sólo para Android y colgar en Google Play.

      Lo que si te yo haría en este caso es trabajar con los datos en un ArrayList y una vez los tenga ya correctos creo el pdf.
      Otra forma seria crear el pdf y luego modificarlo y en este caso si que podrías desplazarte por las páginas y modificar lo que necesitaras. Mira:
      www.stackoverflow.com/questions/3992617/itextsharp-insert-text-to-an-existing-pdf

      Saludos,

      Eliminar
  11. Hola, quisiera saber si me puedes ayudar ha añadir una imagen al pdf, pero que dicha imagen sea extraída de la base de datos y no directamente de la computadora. gracias

    ResponderEliminar
  12. Hola muy buena tarde, y si el reporte quiero que se genere en un navegador, se puede?

    Gracias!! Saludos!!!

    ResponderEliminar
  13. Muy buen artículo.
    ¿Sería posible acceder al proyecto de netbeans?
    Me sería de mucha utilidad.
    Gracias!!!

    ResponderEliminar
  14. hola te consulto.. como hago para utilizar varios datos de tres tablas diferentes relacionadas entre si??? saludos

    ResponderEliminar
  15. Hola me gustaría saber si con la librería itext puedo crear un pdf a partir de un jpanel. Saludos y gracias

    ResponderEliminar