lunes, 23 de diciembre de 2013

Agregar imágen a reporte con IText y Java

IText es una librería de código abierto que nos permite crear y manipular archivos PDF. Entre las bondades de esta librería está el poder manejar imágenes en nuestros documentos generados de manera dinámica. En este artículo les voy a mostrar cómo insertar imágenes en un tabla dentro de un reporte. Lo primero que debemos hacer es tener agregado el archivo jar a nuestro proyecto tal como se muestra en la siguiente imagen:


Luego de esto, deberíamos tener una clase como la que se muestra:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rolandopalermo.blog.facturacion;

/**
 *
 * @author Rolando
 */
import com.itextpdf.text.BadElementException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.net.MalformedURLException;

public class Reporte {

    public static final String RESULTADO = "D:\test.pdf";

    public void crearPDF(String filename) throws IOException, DocumentException {
        // Paso 1
        Document document = new Document(PageSize.A4, 30, 30, 30, 30);
        // Paso 2
        PdfWriter.getInstance(document, new FileOutputStream(filename));
        // Paso 3
        document.open();
        // Paso 4
        PdfPTable table = crearTabla();
        document.add(table);
        // Paso 5
        document.close();
    }

    public static PdfPTable crearTabla() throws DocumentException, BadElementException, MalformedURLException, IOException {
        PdfPTable table = new PdfPTable(2);
        table.setWidthPercentage(100f);
        PdfPCell cell;
        Image image = Image.getInstance("mudvayne.jpg");
        cell = new PdfPCell(image);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase("Mudvayne es una banda de metal alternativo formada en Peoria, Illinois en 1996. Consta de cuatro miembros, el cantante principal Chad Gray, Greg Tribbett en guitarras, Ryan Martinie en bajos y Matthew McDonough en batería."));
        table.addCell(cell);
        return table;
    }

    public static void main(String[] args) throws IOException, DocumentException {
        new Reporte().crearPDF(RESULTADO);
    }
}
Y este sería el resultado sería el siguiente:


Como vemos, poder agregar imágenes con iText es relativmanete sencillo. En un siguiente artículo les mostraré algunas cosas adicionales que podemos hacer con iText. Saludos y hasta una próxima oportunidad.

domingo, 1 de diciembre de 2013

Java a XML (Marshalling)

En este artículo vamos a hablar un poco acerca de cómo convertir objetos Java a XML. Este proceso de conversión recibe el nombre de Marshalling, que en computación define el proceso de transformar la representación de un objeto en memoria a un formato de transmisión o almacenamiento. En este contexto Marshalling es convertir un objeto Java en su respectiva representción XML.

Bien, empecemos creando una clase en Java con una serie de atributos.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rolandopalermo.test;

/**
 *
 * @author Rolando
 */
@XmlRootElement
public class Factura {

    protected String razonSocial;
    protected String nombreComercial;
    protected String ruc;
    protected String claveAcceso;
    protected String codigoDoc;

    public String getClaveAcceso() {
        return claveAcceso;
    }

    public void setClaveAcceso(String claveAcceso) {
        this.claveAcceso = claveAcceso;
    }

    public String getCodigoDoc() {
        return codigoDoc;
    }

    public void setCodigoDoc(String codigoDoc) {
        this.codigoDoc = codigoDoc;
    }

    public String getNombreComercial() {
        return nombreComercial;
    }

    public void setNombreComercial(String nombreComercial) {
        this.nombreComercial = nombreComercial;
    }

    public String getRazonSocial() {
        return razonSocial;
    }

    public void setRazonSocial(String razonSocial) {
        this.razonSocial = razonSocial;
    }

    public String getRuc() {
        return ruc;
    }

    public void setRuc(String ruc) {
        this.ruc = ruc;
    }
}
A partir de esa clase nosotros podemos crear su representación XML a través del siguiente código:
public static void main(String[] args) {
    Factura f = new Factura();
    f.setClaveAcceso("123456789");
    f.setCodigoDoc("0149");
    f.setNombreComercial("Rolando Palermo Consulting");
    f.setRuc("10456095424");
    OutputStreamWriter out = null;
    try {
        JAXBContext context = JAXBContext.newInstance(
                new Class[]{Factura.class});
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty("jaxb.encoding", "UTF-8");
        marshaller.setProperty("jaxb.formatted.output",
                Boolean.valueOf(true));
        out = new OutputStreamWriter(new FileOutputStream(
                "D:\test01.xml"), "UTF-8");
        marshaller.marshal(f, out);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
El resultado de la ejecución de este método main dará el siguiente resultado:


   123456789
   0149
   Rolando Palermo Consulting