Seraphinux
“Lloramos por el lamento de un pájaro pero no por la sangre de un pez, benditos aquellos que tienen voz.”
September 17th, 2008
Visitada: 725 veces, 11 en este dia.

iText: Generar un PDF con Java apartir de MySQL

Un saludo a todos, ya me canse de decir esto (sobretodo por que parece excusa) pero en verdad he andado un poco atareado estos días y no he tenido tiempo de contestar a todas sus peticiones, así que no se desesperen poco apoco iré sacando los pendientes.

Tal como menciona el titulo, este post muestra como generar un PDF usando la libreria iText (de la cual ya hablamos anteriormente) a partir de los datos generados de una consulta a MySQL. Para este caso en particular utilice la DB de prueba de mi blog; El PDF generado consta de 45 pag. y pesa 68KB. El código es de lo mas sencillo, solo nos conectamos a MySQL (esto no lo explicare aquí) pedimos los primeros 100 post del blog, los almacenamos en un String y posteriormente lo imprimimos en nuestro archivo PDF.


import java.io.FileOutputStream;
import java.io.IOException;

/*** Paquetes para trabajar con iText ***/
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;

/*** Importaciones para trabajar con MySQL ***/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Main {
  public static void main(String[] args) {
    System.out.println("Este ejemplo genera un PDF apartir " +
                "del resultado a una consulta a MySQL");

    String salida = resMySQL();

    Document documento = new Document();
    try {
      PdfWriter.getInstance(documento,
          new FileOutputStream("iTextMySQL.pdf"));
      documento.open();

      documento.add(new Paragraph(salida));
    } catch (DocumentException de) {
      System.err.println(de.getMessage());
    } catch (IOException ioe) {
      System.err.println(ioe.getMessage());
    }

    documento.close();
    System.exit(0);
  }

  public static String resMySQL()
  {
    Connection conn = null;
    Statement stmt = null;
    String uDB = "usuarioDB";
    String pDB = "passDB";
    String DB = "blog_db";
    String resultado = "";

    try {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      conn = DriverManager.getConnection("jdbc:mysql://localhost/" +
           DB + "?" +
           "user=" + uDB + "&password=" + pDB);

      stmt = conn.createStatement();
      StringBuffer query = new StringBuffer("SELECT" +
          "  p.post_title" +
          ", p.post_content" +
          " FROM wp_posts p" +
          " LIMIT 0, 100");

      ResultSet rset = stmt.executeQuery(query.toString());

      while(rset.next()) {
        resultado += " Titulo: " + rset.getString(1) +
             " Contenido: " + rset.getString(2);
      }

      stmt.close();
      conn.close();

    }catch(SQLException sqlex) {
      System.out.println("SQLException:" + sqlex.getMessage());
      System.out.println("SQLState:" + sqlex.getSQLState());
      System.out.println("VendorError:" + sqlex.getErrorCode());
    }catch (Exception ex) {
      System.err.println("Error: " + ex.getMessage());
    }
      return resultado;
    }
}

Como pueden observar el ejemplo es identico al del post anterior, lo único que agregamos fue la conexion a la DB MySQL, la pregunta obligada y que se que muchos tienen es: ¿Como le doy formato? eso es relativamente facil… Una opción es usar expresiones regulares, por ejemplo en HTML el texto dentro de la etiqueta strong va en negritas, ok? Pues bien siempre que encontremos esa etiqueta solo tendremos que extraer el texto y usar el siguiente codigo:


negritas.add(
  new Phrase("Texto en negritas.\n",
    new Font(Font.TIMES_ROMAN, 8, Font.BOLD)));

El código anterior fue sacado de la documentación de iText, y existen muchos formatos mas, para texto en cursiva, para texto subrayado, etc. etc.

De igual forma para listas, tablas y cualquier otro elemento en HTML usando expresiones regulares podemos reemplazarlo por su formato iText correspondiente. Espero que esto resuelva la duda que tenian con respecto al uso de iText.

Posts Relacionados

Una Respuesta to “iText: Generar un PDF con Java apartir de MySQL”

  1. Hola m gustaria seber como puede usar la libreria itext para pasar un report a un pedf desd una jframe, datos de la BD y ademas colocar un icono

Dejanos un comentario.