Libreria PDF Java gratuita per estrarre tabelle da PDF
API Java Open Source che estrae programmaticamente tabelle da file PDF. Può facilmente convertire le tabelle estratte in CSV e trasformare le tabelle PDF bloccate in formati di dati strutturati.
Che cos'è Tabula-Java?
I file PDF sono ovunque nel mondo business—rapporti, fatture, articoli di ricerca e bilanci finanziari. Ma c'è un problema persistente: estrarre dati tabulari da questi documenti è notoriamente difficile. Il copia‑incolla spesso produce dati distorti, e la riscrittura manuale è noiosa e soggetta a errori. È qui che entra in gioco Tabula-Java. Tabula-Java è una potente libreria open source che estrae programmaticamente tabelle da documenti PDF. Costruita su solide basi di elaborazione PDF, questa libreria Java trasforma tabelle PDF bloccate in formati di dati strutturati con cui puoi effettivamente lavorare. Che tu stia costruendo pipeline di dati, automatizzando l'elaborazione di report, o semplicemente sia stanco di lottare con le tabelle PDF, Tabula-Java offre una soluzione elegante.
A differenza dei parser PDF generici che trattano tutto come testo non strutturato, Tabula-Java comprende le strutture delle tabelle. Riconosce righe, colonne e celle, preservando le relazioni tra i punti dati. Questa distinzione è cruciale—la differenza tra ottenere "John 42 Engineer" come un blocco di testo versus record strutturati con corretta separazione dei campi. La libreria funziona come una pura implementazione Java, rendendola perfetta per applicazioni enterprise, servizi backend e qualsiasi sistema in cui è necessario un estrazione affidabile e automatizzata di tabelle PDF senza intervento manuale. È il motore dietro la popolare applicazione desktop Tabula, dimostrato attraverso anni di utilizzo reale da parte di giornalisti, ricercatori e analisti di dati in tutto il mondo. I suoi algoritmi di rilevamento intelligenti, le modalità di estrazione flessibili e l'API semplice la rendono uno strumento essenziale per chiunque lavori con dati tabulari intrappolati nei PDF.
Iniziare con Tabula-Java
Utilizza il seguente comando per aggiungere la dipendenza Maven al tuo progetto.
Dipendenza Maven di OpenPDF
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Installa Tabula-Java tramite Gradle
implementation 'technology.tabula:tabula:1.0.5' Estrazione di tabelle di base tramite API Java
Il modo più semplice per utilizzare la libreria open source Tabula-Java è lasciarla rilevare automaticamente tutte le tabelle in un PDF usando il suo algoritmo di rilevamento predefinito. Questo funziona bene per i PDF con tabelle chiare, simili a fogli di calcolo. Iniziamo con un esempio semplice che estrae tutte le tabelle da un documento PDF. Questo esempio dimostra il flusso di lavoro fondamentale. Carichiamo il PDF usando Apache PDFBox (il motore PDF sottostante di Tabula-Java), creiamo un algoritmo di estrazione e iteriamo le pagine.
Come estrarre una tabella da PDF tramite 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();
}
}
Estrai tabelle da regioni di pagina specifiche
Spesso, non vuoi estrarre tutto. Potresti aver bisogno di dati da una tabella specifica in una posizione specifica sulla pagina. Tabula-Java consente di definire un "area di selezione" usando le coordinate. La classe Rectangle definisce un'area specifica sulla pagina usando lo spazio di coordinate PDF (dove 72 punti equivalgono a un pollice). Il metodo getArea() ritaglia la pagina a questa regione prima dell'estrazione, migliorando precisione e prestazioni quando hai bisogno solo dei dati da una posizione specifica. Ecco un esempio molto utile che dimostra come eseguire questa operazione.
Come estrarre una tabella da regioni specifiche della pagina 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();
}
}
Conversione di tabelle in CSV tramite API Java
Un caso d'uso comune è esportare le tabelle estratte direttamente in formato CSV per l'uso in applicazioni di fogli di calcolo o database. La classe CSVWriter gestisce tutta la complessità della formattazione CSV, inclusa la corretta escape dei caratteri speciali e la gestione del contenuto delle celle su più righe. Questo rende banale integrare Tabula-Java nei pipeline di elaborazione dati che si aspettano input CSV. Ecco un esempio di codice Java che mostra come gestire le tabelle in modo efficiente all'interno delle applicazioni Java.
Come esportare le tabelle estratte in formato CSV tramite 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();
}
}
Elaborazione di più pagine tramite API Java
Molti PDF del mondo reale contengono tabelle distribuite su più pagine. La libreria ha incluso il supporto per l'elaborazione di più pagine contemporaneamente e consente agli sviluppatori di iterare attraverso tutte le pagine del documento, estraendo e segnalando le tabelle trovate. La numerazione delle pagine inizia da 1 (non da 0), il che corrisponde al modo in cui gli esseri umani tipicamente fanno riferimento ai numeri di pagina.