1. Productos
  2.   PDF
  3.   Java
  4.   Tabula-Java
 
  

Biblioteca Java PDF gratuita para extraer tablas de PDFs

API Java de código abierto que extrae tablas de archivos PDF de forma programática. Puede convertir fácilmente las tablas extraídas a CSV y transforma tablas PDF bloqueadas en formatos de datos estructurados.

¿Qué es Tabula-Java?

Los archivos PDF están en todas partes en el mundo empresarial—informes, facturas, artículos de investigación y estados financieros. Pero hay un problema persistente: extraer datos tabulares de estos documentos es notoriamente difícil. Copiar y pegar a menudo produce datos desordenados, y volver a escribir manualmente es tedioso y propenso a errores. Ahí es donde entra Tabula-Java. Tabula-Java es una poderosa biblioteca de código abierto que extrae tablas de documentos PDF de forma programática. Construida sobre sólidas bases de procesamiento de PDF, esta biblioteca Java transforma tablas PDF bloqueadas en formatos de datos estructurados con los que realmente puedes trabajar. Ya sea que estés construyendo canalizaciones de datos, automatizando el procesamiento de informes, o simplemente cansado de luchar con tablas PDF, Tabula-Java ofrece una solución elegante.

A diferencia de los analizadores genéricos de PDF que tratan todo como texto no estructurado, Tabula-Java comprende las estructuras de tabla. Reconoce filas, columnas y celdas, preservando las relaciones entre los puntos de datos. Esta distinción es crucial—la diferencia entre obtener \"John 42 Engineer\" como un bloque de texto versus registros estructurados con la separación adecuada de campos. La biblioteca funciona como una implementación pura de Java, lo que la hace perfecta para aplicaciones empresariales, servicios backend y cualquier sistema donde necesite extracción automática y fiable de tablas PDF sin intervención manual. Es el motor detrás de la popular aplicación de escritorio Tabula, demostrado a lo largo de años de uso real por periodistas, investigadores y analistas de datos en todo el mundo. Sus algoritmos de detección inteligente, modos de extracción flexibles y una API sencilla la convierten en una herramienta esencial para cualquiera que trabaje con datos tabulares atrapados en PDFs.

Previous Next

Comenzando con Tabula-Java

Utilice el siguiente comando para agregar la dependencia de Maven en su proyecto.

Dependencia Maven de OpenPDF

<dependency>
  <groupId>technology.tabula</groupId>
  <artifactId>tabula</artifactId>
  <version>1.0.5.</version>
</dependency>

Instalar Tabula-Java mediante Gradle

implementation 'technology.tabula:tabula:1.0.5' 

Extracción básica de tablas mediante la API de Java

La forma más sencilla de usar la biblioteca de código abierto Tabula-Java es permitir que detecte automáticamente todas las tablas en un PDF usando su algoritmo de detección predeterminado. Esto funciona bien para PDFs con tablas claras, similares a hojas de cálculo. Comencemos con un ejemplo sencillo que extrae todas las tablas de un documento PDF. Este ejemplo muestra el flujo de trabajo fundamental. Cargamos el PDF usando Apache PDFBox (el motor PDF subyacente de Tabula-Java), creamos un algoritmo de extracción y iteramos por las páginas.

¿Cómo extraer una tabla de PDF mediante la API de Java?

import technology.tabula.*;
import technology.tabula.extractors.SpreadsheetExtractionAlgorithm;
import org.apache.pdfbox.pdmodel.PDDocument;

import java.io.File;
import java.io.IOException;
import java.util.List;

public class BasicExtraction {
    public static void main(String[] args) throws IOException {
        // Load the PDF document
        File pdfFile = new File("data_report.pdf");
        PDDocument document = PDDocument.load(pdfFile);
        
        // Create an extraction algorithm
        SpreadsheetExtractionAlgorithm extractor = new SpreadsheetExtractionAlgorithm();
        
        // Create a page iterator
        ObjectExtractor objectExtractor = new ObjectExtractor(document);
        PageIterator pages = objectExtractor.extract();
        
        // Process each page
        while (pages.hasNext()) {
            Page page = pages.next();
            
            // Extract tables from the page
            List<Table> tables = extractor.extract(page);
            
            // Print each table
            for (Table table : tables) {
                System.out.println("Found table with " + table.getRowCount() + " rows");
                
                // Iterate through rows
                for (List row : table.getRows()) {
                    for (RectangularTextContainer cell : row) {
                        System.out.print(cell.getText() + "\t");
                    }
                    System.out.println();
                }
            }
        }
        
        document.close();
    }
}


Extraer tabla de regiones específicas de la página

A menudo, no deseas extraer todo. Puede que necesites datos de una tabla específica en una ubicación concreta de la página. Tabula-Java permite definir un "área de selección" usando coordenadas. La clase Rectangle define un área específica en la página usando el espacio de coordenadas PDF (donde 72 puntos equivalen a una pulgada). El método getArea() recorta la página a esta región antes de la extracción, mejorando la precisión y el rendimiento cuando solo necesitas datos de una ubicación específica. Aquí tienes un ejemplo muy útil que muestra cómo realizar esta operación.

¿Cómo extraer una tabla de regiones específicas de una página usando la API de Java?

import technology.tabula.Rectangle;

public class RegionExtraction {
    public static void extractRegion(String pdfPath) throws IOException {
        File pdfFile = new File(pdfPath);
        PDDocument document = PDDocument.load(pdfFile);
        
        ObjectExtractor objectExtractor = new ObjectExtractor(document);
        Page page = objectExtractor.extract(1);
        
        // Define the region (x, y, width, height)
        // Coordinates are in points (72 points = 1 inch)
        Rectangle region = new Rectangle(50, 100, 500, 400);
        Page subPage = page.getArea(region);
        
        SpreadsheetExtractionAlgorithm extractor = new SpreadsheetExtractionAlgorithm();
        List<Table> tables = extractor.extract(subPage);
        
        // Process the extracted table
        for (Table table ; tables) {
            System.out.println("Extracted " + table.getRowCount() + " rows from region");
        }
        
        document.close();
    }
}

Convertir tablas a CSV mediante la API de Java

Un caso de uso común es exportar tablas extraídas directamente al formato CSV para su uso en aplicaciones de hojas de cálculo o bases de datos. La clase CSVWriter maneja toda la complejidad del formato CSV, incluyendo el escape adecuado de caracteres especiales y el manejo de contenido de celdas multilínea. Esto hace que sea trivial integrar Tabula-Java en canalizaciones de procesamiento de datos que esperan entrada CSV. Aquí hay un ejemplo de código Java que muestra cómo manejar tablas de manera eficiente dentro de aplicaciones Java.

¿Cómo exportar tablas extraídas al formato CSV mediante la API de Java?

import technology.tabula.writers.CSVWriter;
import java.io.FileWriter;

public class CSVExtraction {
    public static void exportToCSV(String pdfPath, String csvPath) throws IOException {
        File pdfFile = new File(pdfPath);
        PDDocument document = PDDocument.load(pdfFile);
        
        SpreadsheetExtractionAlgorithm extractor = new SpreadsheetExtractionAlgorithm();
        ObjectExtractor objectExtractor = new ObjectExtractor(document);
        Page page = objectExtractor.extract(1);
        
        List<Table< tables = extractor.extract(page);
        
        // Write to CSV file
        if (!tables.isEmpty()) {
            Table table = tables.get(0);
            
            try (FileWriter writer = new FileWriter(csvPath)) {
                CSVWriter csvWriter = new CSVWriter();
                csvWriter.write(writer, table);
            }
        }
        
        document.close();
    }
}

Procesar múltiples páginas mediante la API de Java

Muchos PDFs del mundo real contienen tablas distribuidas en varias páginas. La biblioteca ha incluido soporte para procesar múltiples páginas al mismo tiempo y permite a los desarrolladores iterar a través de todas las páginas del documento, extrayendo e informando sobre las tablas encontradas. La numeración de páginas comienza en 1 (no en 0), lo que coincide con la forma en que los humanos suelen referirse a los números de página.

 Español