Acceder a imagenes desde el .JAR con iText

Estándar

Al momento de crear un programa en java, es posible que desee hacerlo lo mas auto contenido posible, de modo que la instalación sea tan sencilla como copiar el archivo de una computadora a otra.

Una de las cosas que tienden a evitar que se pueda hacer esto son las imágenes que se usan para los documentos que el programa vaya a generar, usualmente el logotipo de la empresa, sin embargo es perfectamente posible almacenar el archivo *dentro* de nuestro archivo .JAR y que los documentos creados con iText puedan acceder a dicha imagen y presentarla en el documento.

Estructura del proyecto.

Para este ejemplo necesitara crear un proyecto en Eclipse donde agregue las librerías iText, puede tomar el proyecto como ejemplo, ya que halla agregado las librerias al proyecto cree el paquete mx.hashSoft.inJar como se ve la figura 1, no cree ninguna clase aun.

Figura 1 - Proyecto

Figura 1 – Proyecto

Ubicación de la imagen en el proyecto.

Como seguramente ya sabrá, un paquete de Java es una representación de una estructura de carpetas las cuales contienen el código del programa, pero también pueden contener cualquier tipo de archivos, como recursos, imágenes o archivos de propiedades.

Con este conocimiento en mano vaya a la carpeta inJar y copie ahi la imagen que desea usar en su documento, como puede ver en la figura 2

Figura 2 - Imagen

Figura 2 – Imagen

 Accediendo a recursos dentro del proyecto.

Si a tenido oportunidad de leer la documentación de la clase Image de iText, posiblemente halla notado que el constructor toma como argumento una cadena de texto que contenga el URL (Localizador de recurso uniforme) de la imagen que desea mostrar, bueno este lo podemos obtener gracias a la clase URL del paquete java.net lo cual nos da la información necesaria para acceder a la imagen.

Código.

Ya habiendo tocado la teoría, procederemos al ejemplo practico, en su proyecto de “Actualizar” al proyecto (lo que hará que el archivo de la imagen aparezca en el paquete inJar) y cree una nueva clase llamada InJar en la cual debe poner el código mostrado a continuación:

Figura 3 - Contenido del proyecto

Figura 3 – Contenido del proyecto

package mx.org.hashSoft.inJAR;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import com.itextpdf.text.Image;
import java.io.FileOutputStream;
import com.itextpdf.text.Element;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.DocumentException;

public class InJar {
    
    public void crearPdf(String filename) throws MalformedURLException, IOException, DocumentException {
        Document document = new Document(PageSize.LETTER, 36, 36, 54, 36);
        Paragraph parrafo;
        String nombreLogo = “logo.png”;
        Image imagen;
        
        URL resUrl = this.getClass().getResource(nombreLogo);
        
        imagen = Image.getInstance(resUrl);
        
        PdfWriter.getInstance(document, new FileOutputStream(filename));

        document.open();

        parrafo = new Paragraph(“La imagen esta contenida en el archivo .JAR”);
        parrafo.setAlignment(Element.ALIGN_CENTER);
        imagen.setAlignment(Element.ALIGN_CENTER);

        document.add(parrafo);
        document.add(imagen);
        
        document.close();
    }
    
    static public void main(String[] args) {
        InJar doc = new InJar();

        try {
            // Creamos el documento Pdf
            doc.crearPdf(“documento.pdf”);

        } catch (DocumentException ed) {
            System.err.println(“Error al crear el documento Pdf”);
        } catch (IOException ex) {
            System.err.println(“Error General de Entrada/Salida”);
        }
    }
}

Como ya es costumbre, las lineas en rojo son las principales y su función se describirá a continuación.

import java.net.MalformedURLException;
import java.net.URL;   Importamos los paquetes necesarios para hacer uso de la clase URL

String nombreLogo = “logo.png”; Indicamos el nombre de la imagen que deseamos cargar, puede especificar la ruta relativa o absoluta desde la raiz del proyecto

URL resUrl = this.getClass().getResource(nombreLogo); Obtenemos el URL de la imagen con relación a la clase en la que estamos

imagen = Image.getInstance(resUrl); Abrimos la imagen y creamos el objecto que la referencia

doc.crearPdf(“documento.pdf”); Llamamos a los metodos para crear el documento y lo almacenamos en el directorio donde ejecutemos el programa

Ahora para demostrar todo exportamos el proyecto como un archivo Jar Ejecutable, como se ve en la figura 4

Figura 4 - Exportar

Figura 4 – Exportar

Recuerde exportar las librerías junto con el resto del proyecto, ahora mueva el archivo a la ubicación que desee en el sistema, como se ve en la figura 5 y ejecutelo, si esta en windows bastara un doble click, en linux necesitara la linea de comando, vera que se crea un nuevo archivo llamado “documento.pdf”, Figura 6

Figura 5 - Archivo .jar

Figura 5 – Archivo .jar

Figura 6 - Documento creado

Figura 6 – Documento creado

Y al abrir el documento vera que la imagen como se ve en la figura 7

Figura 7 - Resultado

Figura 7 – Resultado

Espero que esta entrada haya sido de ayuda y nos vemos en la próxima

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s