Organización del código de un proyecto iText

Estándar

En uno de los comentarios de la entrada iText, Generación de archivo Pdf en Java se me pregunto si había una forma de no poner todo el código de generación de archivo en un solo método y separarlo en métodos mas concisos y que sigan mejor las practicas y convenciones de Java, esto es perfectamente posible y aquí presentare un ejemplo de como hacerlo aunque cabe mencionar que este es un ejemplo bastante simple, pero tiene como objeto dar una idea de como hacerlo.

Figura 1 - Proyecto iText

Figura 1 – Proyecto iText

Antes de comenzar, como vemos en la Figura 1, es necesario que cree un proyecto en Eclipse que contenga las librerías iText, en entradas anteriores del blog puede encontrar como configurar el proyecto , a su vez necesitara agregar una imagen en la raíz del proyecto, como se ve en la figura 2, con el fin de que el programa pueda agregarla al documento final.

Figura 2 - Archivos del proyecto

Figura 2 – Archivos del proyecto

Ya que tenga la imagen y las librerías listas procederemos con el código, el cual puede ver en la siguiente sección, en este caso el proyecto contiene dos clases, una que se contiene los métodos de creación del documento pdf y otra con el método principal.

Codigo

// Modular.java

package mx.com.hashSoft.iTextModular;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Image;
/**
* Clase de ejemplo de como organizar el uso de la libreria iText
* Generando el archivo desde un punto del programa y agregando los
* elementos desde metodos especializados
*
* Esta clase esta pensada como un ejemplo de como organizar el codigo de un proyecto de iText
* @author david
*/

public class Modular {
      private Document documento;

      /**
      * Incializa el documento iText para agregar elementos, abre el documento por default
      * @param nombreArchivo Ruta del archivo pdf que se creara
      * @throws FileNotFoundException
      * @throws DocumentException
      */
      public Modular(String nombreArchivo) throws FileNotFoundException, DocumentException {
            setDocumento(new Document());

            PdfWriter.getInstance(documento, new FileOutputStream(nombreArchivo));
            documento.open();
      }

      /**
      * Agrega la cadena de texto indicada como un parrafo
      * @param parrafo Texto del parafo
      * @throws DocumentException
      */
      public void agregarParrafo(String parrafo) throws DocumentException {
            Paragraph par = new Paragraph(parrafo);
            documento.add(par);
      }

      /**
      * Agrega una imagen al documento
      * @param rutaImagen Ruta de la imagen a agregar
      * @throws MalformedURLException
      * @throws IOException
      * @throws DocumentException
      */
      public void agregarImagen(String rutaImagen) throws MalformedURLException, IOException, DocumentException {
            Image imagen = Image.getInstance(rutaImagen);
            documento.add(imagen);
      }

      /**
      * Cierra el documento
      */
      public void cerrarDocumento() {
            documento.close();
      }

      public Document getDocumento() {
            return documento;
      }

      public void setDocumento(Document documento) {
            this.documento = documento;
      }

}

/// Main.java

package mx.com.hashSoft.iTextModular;

import java.io.IOException;
import com.itextpdf.text.DocumentException;

public class Main {
      static public void main(String[] args) {
            Modular test;

            // Dentro del bloque try-catch creamos el archivo

            try {
                  test = new Modular(“archivo.pdf”);

                  // Agremaos un parrafo
                  test.agregarParrafo(“Parrafo de ejemplo del documento, despues de este agregaremos una imagen con el metodo agregarImagen”);

                  // una imagen, recuerde cambiar el nombre de la imagen por la que halla puesto en el directorio del proyecto
                  test.agregarImagen(“mickey_mouse.png”);

                  // Otro parrafo
                  test.agregarParrafo(“Segundo parrafo, ambos agregados con una llamada al metodo agregarParrafo”);

                  // Y finalmente cerramos el documento
                  test.cerrarDocumento();

            } catch (DocumentException | IOException e) {
                  System.out.println(“Error generando el archivo pdf.”);
                  e.printStackTrace();
            }
      }
}

Al ejecutar el programa debería aparecer un nuevo archivo pdf con el nombre indicado con el código en el directorio, como se ve en la figura 3

Figura 3 - Resultado del programa

Figura 3 – Resultado del programa

Y al abrir el archivo pdf veremos lo que hallamos escrito en los párrafos, como se ve en la figura 4

Figura 4 - Salida

Figura 4 – Salida

En este caso contare que la documentación agregada en el propio código detalla que hacen cada método, pero como puede observar los diferentes métodos que la librería iText pueden ser puestos en metodos separados, lo que nos da un código mas limpio y ordenado y dándonos la posibilidad de pasarles argumentos haciéndolos mas reusables, como vemos en el método main.

Espero que esta entrada halla sido de utilidad y nos vemos en la proxima :D.

Anuncios