Los de las tierras del Norte aprenden pronto la futilidad de las palabras y el valor inestimable de los hechos.
Jack London

iText, librería para generar ficheros PDF

iText in ActioniText es una librería Java gratuita que permite generar ficheros en formato PDF desde nuestro código Java.

En su contra diré que el código es difícil de generar (y de mantener) cuando queremos presentar muchos datos y listados, ya que su filosofía de funcionamiento es similiar al elemento <table> de HTML: para estructuras complejas tenemos que anidar elementos.

Además no existe el concepto rowspan, con lo cual tenemos que anidar más elementos.

Nos permite asociar código a eventos, como :

public class Eventos extends PdfPageEventHelper {

  public void onOpenDocument(PdfWriter writer, Document document) {
     
 

  public void onCloseDocument(PdfWriter pdfwriter, Document document){

  }

  public void onStartPage(PdfWriter pdfwriter, Document document){

     

  }

  public void onEndPage(PdfWriter pdfwriter, Document document){

      ..

  }

}

Más ejemplo de código:

Font bf = BaseFont.createFont(contextPath.getRealPath("/pdf/fonts/") + "/arial.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED);

Font fh8 = new Font(bf,9.5f, Font.NORMAL, new Color(0×33, 0×33, 0×33));

Font fb10 = new Font(bf, 10.5f, Font.BOLD, Color.black);

 

 tabla.setSpacingBefore(0);

 tabla.deleteBodyRows();

 PdfPTable t = new PdfPTable(1);

 t.setWidthPercentage(100);

 t.getDefaultCell().setPadding(4);

 t.getDefaultCell().setBorderWidth(0.4f);

 t.getDefaultCell().setVerticalAlignment(Element.ALIGN_TOP);

 t.getDefaultCell().setLeading(3,1.3f);

 PdfPTable tAux = getTableAuxDatosPropu(new float[]{4,29,67});

 tAux.getDefaultCell().setColspan(3);

 HashMap hAux = gestionSolicitud.datosRepresentante(cod_solicitud,"3");

 tAux.addCell(getPhraseLabelValor("NOMBRE:", hAux, "NOMBRE"));

 tAux.addCell( (new Phrase("CARGO: ", fb10)).add(new Chunk( ((hAux==null ||hAux.get("CARGO")==null)?"":String.valueOf(hAux.get("CARGO"))), fh8)) );

  t.addCell(tAux);

 tabla.addCell(t);

Más en:

16 Comentarios hasta el momento »

  1. Lycka Bonita » iReport dijo

    10 de June del 2008 a las 3:07 pm

    [...] hablé de iText como herramienta para generar ficheros PDF desde Java. Su gran debilidad es su forma de componer el [...]

  2. Patricia dijo

    6 de November del 2008 a las 9:47 pm

    Hola que tal estoy trabajando con Itext aunque no muy bien con tablas ya que ejecuto una cosulta de la base de datos de donde me trae valores mi duda es como le hago para que me aparezcan dentro de una tabla. Te agradeceria cualquier cosa que me ayudara. Ah cabe mencionar que ya utilice listas y me despliega favorablemente los datos de la consulta. Bueno gracias yo espero alguna respuesta.

    Bye Paty

  3. yoyoooyoy dijo

    7 de November del 2008 a las 9:44 am

    Hola Patricia,

    no sé si he entendido muy bien tu duda. Te recomiendo que primero recuperes todos los datos que necesites y luego los “pintes” con iText.

    En el ejemplo, haux es un Hashmap con los datos que necesitamos pintar. (Yo prefiero utilizar objetos, pero para el ejemplo vale)

    Para pintar una frase (objeto Phrase en iText) utiliza simplemente el constructor Phrase (String) dentro de cada celda.

    Si quieres algo más editado, como poner una etiqueta y un valor, yo utilizaba mi método propio Phrase getPhraseLabelValor(String label, HashMap h, String keyVal), y no mostraba su implementación. Ahora pinto el cargo con la implementación para que lo veas. fb10 y fh8 son tipos de fuente que he definido previamente.

    Más documentación la puedes encontrar en el libro “iText in Action” o en la web del autor http://www.lowagie.com/iText/

    Espero que te sirva esto !

  4. Raúl dijo

    4 de March del 2009 a las 4:50 pm

    Hola, estoy trabajando con hibernate y spring en el IDE eclipse. Necesito generar PDF y utilizo iText, sin embargo, añado el API iText a mi proyecto y no me identifica los métodos de iText, me da un error en tiempo de ejecución en el servidot Tomcat. No se si adicionalmente a incluír al API en mi proyecto necesito configurar algo mas.

    mil gracias por su ayudad.

  5. yoyoooyoy dijo

    5 de March del 2009 a las 9:45 am

    Hola Raúl,

    sin más pistas entiendo que te se trata de un problema de librerías, comprueba si te falta alguna. No es necesario configurar nada extra, con tener las clases importadas en tu proyecto sería suficiente.

    Echa un vistazo a la página del autor para saber más o mándame un correo con alguna traza o el war de lo que tengas y si saco tiempo le echo un ojo. También intentaré hacer un tutorial más detallado de esta librería.

    Saludos y gracias por tu comentario

  6. Patricia dijo

    23 de March del 2009 a las 5:45 pm

    Buenas, estoy trabajando con hibernate en eclipse y hasta ahora utilizaba el iReport para generar los pdf para los informes de las diferentes pantallas de gestión de mi aplicación. Ahora se me presenta un problemilla, tengo una pantalla con una lista de pdf adjuntos, para sacarlos como informe me gustaría tener un pdf plantilla digamos, con una cabecera(titulo) y un pie de pagina, y luego incluir esos pdf dentro de ese pdf plantilla, ¿sería posible con iText?, porque con iReport no.
    Gracias por vuestra atención. Si tuvieseis un ejemplo por ahí me ayudaría.

  7. yoyoooyoy dijo

    24 de March del 2009 a las 10:20 am

    Hola Patricia,

    iText es también una librería para generar PDF, no para manipularlo.

    Quizás te sirva algún programa de OCR, pero por lo que comentas creo que simplemente cambiando la plantilla de iReport (copipasteando se entiende XD) y pintando los mismos datos te debería de valer.

    Bueno, me voy a desayunar, si necesitas más mándame un correo !

  8. daniel dijo

    20 de August del 2009 a las 1:25 am

    Hola Lycka Bonita, tengo una enorme duda y espero me puedas ayudar:

    Tengo la libreria itext en una application de escritorio (Java) que es un Jframe y dentro del Jframe hay un Jpanel mi pregunta es como le hago para mostrar un pdf dentro de ese jpanel? basicamente cuales son los comandos porque no los localizo por ningun lugar, Agradesco mucho tu tiempo.

  9. Omar D Berroteran (LKF) dijo

    1 de September del 2009 a las 7:10 pm

    Buen dia/tarde/noche.

    Io he trabajado con iText desde el 2005 y ya desde ese tiempo soportaba respuesta a eventos.

    Creo que no has investigado bien como utilizar esta libreria.

  10. AngelFQC dijo

    6 de September del 2009 a las 2:38 am

    me puedes ayudar?
    necesito mostrar los datos en un tabla
    como lo hago?

  11. yoyoooyoy dijo

    7 de September del 2009 a las 9:16 am

    Hola Ángel,

    precisamente el código de ejemplo que adjunto en el artículo muestra una tabla con datos.

    Saludos

  12. Oscar dijo

    22 de October del 2009 a las 9:15 am

    Hola, tengo un problema con el iText y esque cuando genero el pdf me esta generando pantallas en blanco cuando en el documento html todo esta completo y sin espacios, lo que ago es generar el byte array con una variable string asi:

    stringStream = new java.io.ByteArrayInputStream(screenContent.getBytes(“UTF-8″));

    Despues ago lo siguiente:

    builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    doc = (Document) builder.parse(stringStream);

    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(doc, context);
    renderer.layout();
    renderer.createPDF(baos);

    pero lo dicho, me genera pantallas en blanco, no creo que sea por esta parte del codigo, quiza sea la configuracion o algo por el estilo. Me puedes ayudar? muchas gracias.

  13. lalo dijo

    19 de May del 2010 a las 10:34 pm

    Tengo una `pregunta como le doy un ancho especifico a una tabla con el itext ??????????

  14. Maxmax33 dijo

    1 de September del 2010 a las 9:12 pm

    Si tengo un parrafo y quiero colocar en negrita algunas palabras especifica sera que con Itexs se puede hace y cual seria la sugerencia.

    Esperando respuesta

  15. sorpi dijo

    25 de June del 2011 a las 7:54 am

    soy nuevo en MAC y me gustaria que alguien me diga como desactivar iTEXT Express ya q la opcion de apagarlo no esta activado y no me deja apagar la maquina si alguien me lo puede decir MUCHAS GRACIAS

  16. Rafaelius dijo

    23 de August del 2011 a las 2:32 pm

    He estado trabajado con itext, en realidad si es dificil de mantener sin embrago no le veo limitacion, para mantener una cabeecera, lo que he hecho es realizar un servlet que contiene una tabla con el logo, info y ademas lineas de cabecera y pie de pagina, la construccion del reporte como tal la manejo con condiciones y dentro de estas construyo la tabla, el ancho de la columna si hay como controlarla, mi recomendacion de leer itext in action.
    Espero les sirva mi comentario.

Comentarios RSS · TrackBack URI

Dejanos tu Comentario

Nombre: (Requerido)

E-Mail: (Requerido)

Sitio WEB:

Comentario:

Comenta