Lectura de PDF con Java

Enero 26 2010Se el primero en comentar

Guardado en : General

PDF´s (Portable Document Format) es un formato de documentos que se utiliza de manera generalizada en muchos ámbitos. Actualmente con el Boom de los lectores de libros electrónicos han surgido nuevos formatos como Kindle/Mobipocket, ePub, eReader, etc.

Aun con la existencia de estos formatos hay dispositivos de lectura que si soportan PDF, pero hay algunos que prefieren formatos menos amplios para poder así interpretar su contenido.

Algo interesante a nivel de programación seria construir transformadores de formatos para que fácilmente de una fuente de información como PDF´s u otras se pueda pasar y así facilitar la distribución a estos dispositivos de lectura.

Por tal motivo y en vista de que el formato PDF´s se utiliza mucho en este ámbito de libros electrónicos les muestro un ejemplo práctico de lectura de PDF´s. Tecnológicamente hay bastantes herramientas y lenguajes que pueden realizar esta lectura. En mi caso y por mi pasión por java he utilizado este lenguaje y la librería PDFBox http://pdfbox.apache.org que tiene bastantes cosas muy buenas para la extracción y clasificación de la información que tiene un PDF.

El código es el siguiente:

package ubicuos.com.test.lecturapdf;
 
import java.awt.Rectangle;
import java.awt.print.PageFormat;
import java.io.IOException;
import java.util.List;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.util.PDFTextStripperByArea;
 
/**
 *
 * @author www.ubicuos.com
 */
public class LecturaPdf {
 
    public static void main(String args[]) {
        LecturaPdf pdf = new LecturaPdf();
        pdf.lecturaPdf();
    }
 
    public void lecturaPdf() {
        try {
            // carga de documento
            PDDocument pd = PDDocument.load("C:/prueba/PDFPrueba.pdf");
            // obtiene las paginas y las almacena en una lista
            List l = pd.getDocumentCatalog().getAllPages();
            Object[] obj = l.toArray();
            //exploramos la lista para obtener las paginas
            for (int i = 0; i < obj.length; i++) {
                System.out.println("---------Pagina" + (i + 1) + "-----------------------");
                PDPage page = (PDPage) obj[i];
                //Obtenemos el formato de la pagina
                PageFormat pageFormat = pd.getPageFormat(i);
                //Obtenemos las dimensiones de la pagina
                Double d1 = new Double(pageFormat.getHeight());
                Double d2 = new Double(pageFormat.getWidth());
                int width = d1.intValue();
                int eigth = d2.intValue();
                //Este componente nos ayudara a obtener el texto
                PDFTextStripperByArea stripper = new PDFTextStripperByArea();
                //Definimos un area en donde buscaremos texto
                Rectangle rect = new Rectangle(0, 0, width, eigth);
                //se registra la region
                stripper.addRegion("area1", rect);
                //extraemos el texto del area
                stripper.extractRegions(page);
                //Imprimimos el contenido
                System.out.println("Texto leido:" + rect);
                System.out.println(stripper.getTextForRegion("area1"));
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

Como se puede ver es muy sencillo procesar un PDF. Lo que seguiría seria hacer algo que estandarice y le haga el proceso necesario para poder publicar a otros formatos. Eso se los dejo de tarea.

Comparte esta información:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • BarraPunto
  • LinkedIn
  • Technorati
  • TwitThis

Deja un comentario