Biblioteca Java PDF Gratuita para Extrair Tabelas de PDFs
API Java de código aberto que extrai tabelas de arquivos PDF programaticamente. Pode converter facilmente tabelas extraídas em CSV e transformar tabelas PDF bloqueadas em formatos de dados estruturados.
O que é Tabula-Java?
Arquivos PDF estão em toda parte no mundo dos negócios — relatórios, faturas, artigos de pesquisa e demonstrações financeiras. Mas há um problema persistente: extrair dados tabulares desses documentos é notoriamente difícil. Copiar e colar frequentemente resulta em dados corrompidos, e a digitação manual é tediosa e propensa a erros. É aí que o Tabula-Java entra. Tabula-Java é uma poderosa biblioteca de código aberto que extrai tabelas de documentos PDF programaticamente. Construída sobre bases sólidas de processamento de PDF, esta biblioteca Java transforma tabelas PDF bloqueadas em formatos de dados estruturados com os quais você realmente pode trabalhar. Seja construindo pipelines de dados, automatizando o processamento de relatórios ou simplesmente cansado de lutar com tabelas PDF, o Tabula-Java oferece uma solução elegante.
Diferente dos analisadores genéricos de PDF que tratam tudo como texto não estruturado, o Tabula-Java entende estruturas de tabelas. Ele reconhece linhas, colunas e células, preservando as relações entre os pontos de dados. Essa distinção é crucial — a diferença entre obter "John 42 Engineer" como um bloco de texto versus registros estruturados com separação adequada de campos. A biblioteca funciona como uma implementação pura em Java, tornando‑a perfeita para aplicações corporativas, serviços de backend e qualquer sistema onde você precise de extração confiável e automatizada de tabelas em PDF sem intervenção manual. É o motor por trás do popular aplicativo de desktop Tabula, comprovado ao longo de anos de uso real por jornalistas, pesquisadores e analistas de dados em todo o mundo. Seus algoritmos de detecção inteligentes, modos de extração flexíveis e API direta a tornam uma ferramenta essencial para quem trabalha com dados tabulares presos em PDFs.
Começando com Tabula-Java
Por favor, use o comando a seguir para adicionar a dependência Maven ao seu projeto.
Dependência Maven do OpenPDF
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Instalar Tabula-Java via Gradle
implementation 'technology.tabula:tabula:1.0.5' Extração Básica de Tabelas via API Java
A maneira mais simples de usar a biblioteca de código aberto Tabula-Java é deixá‑la detectar automaticamente todas as tabelas em um PDF usando seu algoritmo de detecção padrão. Isso funciona bem para PDFs com tabelas claras, semelhantes a planilhas. Vamos começar com um exemplo direto que extrai todas as tabelas de um documento PDF. Este exemplo demonstra o fluxo de trabalho fundamental. Carregamos o PDF usando o Apache PDFBox (o mecanismo PDF subjacente do Tabula-Java), criamos um algoritmo de extração e iteramos pelas páginas.
Como Extrair Tabela de PDF via API 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();
}
}
Extrair Tabela de Regiões de Página Específicas
Muitas vezes, você não quer extrair tudo. Pode ser necessário obter dados de uma tabela específica em um local específico da página. O Tabula-Java permite definir uma "área de seleção" usando coordenadas. A classe Rectangle define uma área específica na página usando o espaço de coordenadas do PDF (onde 72 pontos equivalem a uma polegada). O método getArea() recorta a página para essa região antes da extração, melhorando a precisão e o desempenho quando você precisa apenas dos dados de um local específico. Aqui está um exemplo muito útil que demonstra como realizar essa operação.
Como Extrair Tabela de Regiões de Página Específicas usando API 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();
}
}
Convertendo Tabelas para CSV via API Java
Um caso de uso comum é exportar tabelas extraídas diretamente para o formato CSV para uso em aplicativos de planilha ou bancos de dados. A classe CSVWriter lida com toda a complexidade da formatação CSV, incluindo a devida escape de caracteres especiais e o tratamento de conteúdo de célula em várias linhas. Isso torna trivial integrar o Tabula-Java em pipelines de processamento de dados que esperam entrada CSV. Aqui está um exemplo de código Java que mostra como lidar com tabelas de forma eficiente dentro de aplicações Java.
Como Exportar Tabelas Extraídas para o Formato CSV via API 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();
}
}
Processando Múltiplas Páginas via API Java
Muitos PDFs do mundo real contêm tabelas espalhadas por várias páginas. A biblioteca incluiu suporte para processar múltiplas páginas ao mesmo tempo e permite que os desenvolvedores iterem por todas as páginas do documento, extraindo e relatando as tabelas encontradas. A numeração de páginas começa em 1 (não 0), o que corresponde à forma como os humanos normalmente referenciam números de página.