iText - ¿Como generar un PDF con iText? - Clases fundamentales en iText - ¿Como ingresar texto a un PDF con iText?

Continuando con nuestros pasos por  iText (Link introducción a itext), hoy vamos a ensuciarnos un poco viendo código.
Antes de comenzar a codificar vamos hablar de las clases fundamentales y su funcionamiento.

Clases fundamentales en iText

  • com.lowagie.text.Document: Es la clase principal para la generación de documentos PDF. Esta es la primera clase que es instanciada. Una vez que el documento es creado, se deberá proceder a escribir dentro de él. Contiene el tamaño y margenes del documento.
  • com.lowagie.text.pdf.PdfWriter: Es la clase que permite escribir en el PDF.
  • com.lowagie.text.Paragraph: Es la clase que representa el párrafo a escribir.
  • com.lowagie.text.Chapter: Es la clase que representa un capítulo en el documento PDF. Este es creado utilizando un párrafo como título y un entero como número del capítulo.
  • com.lowagie.text.Font: esta clase contiene todas las especificaciones de las fuentes, tamaños, estilos y colores de las letras a utilizar en el documento. Varias de las fuentes son declaradas estáticamente en esta clase.



¿Como generar un PDF con iText?


Como dijimos mas arriba, lo primero que tenemos que hacer es una instancia de la clase Document.

Document documento = new Document();

Esta clase contiene los siguientes constructores:
  • Document(): Constructor que utiliza por defecto el tipo de hoja A4.
  • Document(Rectangle pageSize): Constructor al cual se le pasa por parámetro el tamaño de hoja y toma por defecto los margenes  36, 36, 36, 36.
  • Document(Rectangle pageSize, float marginLeft, float marginRight,float marginTop, float marginBottom): Constructor al cual se le pasa por parámetro el tamaño de la hoja y los margenes a gusto.
Tenemos que definir el tipo de documento que vamos a escribir.

  • PdfWriter getInstance(final Document document, final OutputStream os): Constructor en el cual se le pasa el documento el cual se va a escribir (document) y el path de salida del pdf generado, incluyendo en el mismo el nombre del pdf el cual se generar y la extensión .pdf. 
Al utilizar el PdfWriter  hay que contemplar las siguientes excepciones:
  • DocumentException: Excepción producida en la generación del documento.
  • IOException: Excepción producida por algún error con el archivo de salida, pudiendo ser de lectura y/o escritura.
"(En versiones viejas de iText se podía usar escritores RTF y HTML, pero a partir de la versión 5.0 ya no hay soporte para los mismos)."

A modo de ejemplo le pasare el documento previamente generado y el nombre del archivo el cual sera "Ejemplo.pdf". (Al poner el nombre del archivo sin la ubicación completa lo generara en el mismo lugar donde se esta ejecutando.)

PdfWriter.getInstance(documento, new FileOutputStream("Ejemplo.pdf"));

Una vez configurada la estructura del documento,  se debe abrir antes de comenzar a insertar párrafos, textos, figuras, etc.

documento.open();

"No se puede agregar Meta-Información o escribir el header luego que se haya abierto el archivo."

Para agregar párrafos al documentos iText nos brinda la clase Paragraph.
Esta clase contiene los siguientes constructores:

  • Paragraph(String string): El constructor recibe por parámetro una cadena, la cual representa el texto a ingresar.
  • Paragraph(String string, Font font): El constructor recibe por parámetro una cadena, la cual representa el texto a ingresar y tambien el tipo de fuente.
  • Paragraph(Phrase phrase): El constructor recibe por parámetro otro párrafo.

Paragraph parrafo = new Paragraph("Ejemplo de iText - El lado oscuro de java");


Una ves que obtuvimos el párrafo solo quedaría agregarlo al documento.

documento.add(parrafo);

Finalmente cerramos el documento.

documento.close();

Resultado:


iText - ¿Como generar un PDF con iText?
PDF generado con iText


Código completo:
iText - ¿Como generar un PDF con iText?


Bueno espero que les allá resultado fácil y entendible! Cualquier cosa me comentan.
Saludos


iText - ¿Como generar un PDF con iText? - Clases fundamentales en iText - ¿Como ingresar texto a un PDF con iText? iText - ¿Como generar un PDF con iText? - Clases fundamentales en iText - ¿Como ingresar texto a un PDF con iText? Reviewed by El lado oscuro de java on noviembre 19, 2013 Rating: 5

16 comentarios:

  1. Disculpa amigo no tienes una clase que me ayude a leer un PDF
    y luego obtener linea por linea los párrafos del documento... Por favor es algo que necesito urgente. Gracias!

    ResponderEliminar
    Respuestas
    1. Hola amigo Leonel puedo decirte como leer un pdf ya creado con itext pero todavía no he llegado a ver la parte de lectura párrafo por párrafo. Avísame y cualquier cosa te envió las lineas de código. Saludos

      Eliminar
    2. Buenas noches amigo me podrias indicar como leer un pdf creado con itext, gracias de ante mano

      Eliminar
    3. Hola Luis disculpa la demora, mira es algo que tengo pendiente para nuevos post el tema de leer pdf ya generados, pero te podes ir adelantando mirando esta clase PdfReader. Saludos

      Eliminar
  2. Una pregunta amigo.. hay manera de con itext enumerar las lineas de cada parrafo de mi pdf???

    ResponderEliminar
    Respuestas
    1. Hola Alex, fijate si es esto lo que estas buscando.

      http://java-white-box.blogspot.com.ar/2013/12/itext-clase-list-en-itext-clase.html

      Saludos

      Eliminar
  3. Hola Como estas?
    La verdad muy bueno este resumen de las principales clases. Podrias indicar como hago al momento de crear un document para unificar PDF, tenga la opcion de bajar la calidad de la imagen? te paso el codigo que estoy trabajando.:

    PdfReader localPdfReader = new PdfReader(output.toByteArray());// en el out.toByteArray estoy pasandolo los pdf que se van a unificar.

    com.lowagie.text.Document localDocument = new com.lowagie.text.Document(localPdfReader.getPageSizeWithRotation(1));
    localPdfCopy = new PdfCopy(localDocument, new FileOutputStream(archivoUni));
    localDocument.open();
    this.setLocalPdfCopy(localPdfCopy);

    la idea en si es que el document tenga la forma de indicarle de bajarle la calidad y disminuir el tamaño en si del PDF.

    desde ya muchas gracias

    Pablo.

    ResponderEliminar
    Respuestas
    1. Hola Pablo, mira es algo que tengo pendiente para nuevos post el tema de leer pdf ya generados, pero la idea para bajarle la calidad de la imagen se me ocurren 2 cosas, primero intenta encontrar la imagen y convertirla a otro tipo de formato ejemplo si es bmp pasala a jpg, si bien disminuye un poco la calidad pero lo haces mas lijero, y si no trata de convertilo despues de generado el documento a un zip. de manera que el usuario final reciba algo de menos peso, coméntame en que estas trabajando puntualmente y veo si te puedo dar una mano. Yo particularmente trabaje en la generación de los resúmenes de tarjetas de crédito. (3.000.000 de usuarios.) .

      Eliminar
  4. hola, disculpa me genera un error en FileOutputStream me dice cannot be resolved to a type, no se porque, me podrias ayudar, gracias

    ResponderEliminar
    Respuestas
    1. Hola Jorge, mira no estas trayendo los imports necesarios, en este caso necesitas el import java.io.FileOutputStream. Si programas con el IDE eclipse se resuelve presionando Ctrol+Shift+O, si no agregra el import "import java.io.FileOutputStream;"

      Saludos

      Eliminar
  5. hola amigo me puedes ayudar a aumentar el tamaño de las tablas

    ResponderEliminar
    Respuestas
    1. hola amigo, fijate si esto te sirve de algo sino me comentas y apenas tenga un rato te presto una mano.
      http://java-white-box.blogspot.com.ar/2014/03/itext-pdfptable-como-agregar-una-tabla.html

      Eliminar
  6. yo tengo una pregunta
    como pones dos imagenes y un pequeño texto en una tabla

    ResponderEliminar
  7. hola,

    me podría colaborar con la librería itext.

    estoy tratando de crear columnas en el documento generado. en el documento no en tabla. alguna recomendación.

    Gracias

    ResponderEliminar
  8. Buenas tardes. Muchas gracias por la información que publicas, me a ayudado mucho, pero tengo una duda fíjate que quiero mover un texto en dimensiones XY dentro de documento, pero estoy buscando y no encuentro como poder hacerlo. De nuevo gracias por si me poder ayudar con esta duda.

    ResponderEliminar
  9. Hola tengo un problem al generar pdf con itext, mi problema es el siguiente y es que empieza a escribir el contenido del pdf en la cabecera ¿hay alguna manera de solucionar esto?.

    ResponderEliminar

Con la tecnología de Blogger.