Monday, June 13, 2016

Extraer texto de un pdf

La extración de texto de los PDF es fácil cuando sabes como hacerlo. Yo he usado las librerias pdfbox version 2.0.2

    <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.2</version>
        </dependency>

Simplemente se define un área  de extraccion de texto. Lo malo que no sabes si las coordenadas del xy empiezan (0,0) arriba o abajo.

Cuando agregas un rectangulo a un PDAnnotationLink() las coorenadas de las Y empiezan en lo alto de la página 

Cuando invocas    PDFTextStripperByArea() las coordenadas de la Y empieza en el pié de la página

PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition(true);
Rectangle2D rect = new Rectangle2D.Float(x, y, width, height);
stripper.addRegion("region", rect);
stripper.extractRegions(page);
stripper.getTextForRegion("region")

Para realizar el cambio de coordenada, se ha realizado esta función. 


private Rectangle2D changeUpper2Lower(Rectangle2D rect ,PDPage page){
 
    return new Rectangle2D.Float(
      (float)rect.getX(),
      (float)page.getMediaBox().getHeight() - (float) rect.getY()-(float)rect.getHeight(),
      (float)rect.getWidth(),
      (float)rect.getHeight());
 
  }