Gratis Java PDF-bibliotheek om tabellen uit PDF's te extraheren
Open-source Java-API die programmatisch tabellen uit PDF-bestanden extraheert. Het kan eenvoudig geëxtraheerde tabellen naar CSV converteren en vergrendelde PDF-tabellen omzetten in gestructureerde gegevensformaten.
Wat is Tabula-Java?
PDF-bestanden zijn overal in de zakelijke wereld—rapporten, facturen, onderzoeksartikelen en financiële overzichten. Maar er is een hardnekkig probleem: het extraheren van tabelgegevens uit deze documenten is berucht moeilijk. Kopiëren en plakken levert vaak verwrongen gegevens op, en handmatig overtypen is tijdrovend en foutgevoelig. Daar komt Tabula-Java om de hoek kijken. Tabula-Java is een krachtige open‑source bibliotheek die programmatisch tabellen uit PDF‑documenten extraheert. Gebouwd op een solide basis voor PDF‑verwerking, zet deze Java‑bibliotheek vergrendelde PDF‑tabellen om in gestructureerde gegevensformaten waarmee je daadwerkelijk kunt werken. Of je nu datastromen bouwt, rapportverwerking automatiseert, of gewoon moe bent van worstelen met PDF‑tabellen, Tabula-Java biedt een elegante oplossing.
In tegenstelling tot generieke PDF-parsers die alles behandelen als ongestructureerde tekst, begrijpt Tabula-Java tabelstructuren. Het herkent rijen, kolommen en cellen, en behoudt de relaties tussen gegevenspunten. Dit onderscheid is cruciaal — het verschil tussen het krijgen van "John 42 Engineer" als een tekstblob versus gestructureerde records met juiste veldscheiding. De bibliotheek werkt als een pure Java-implementatie, waardoor hij perfect is voor enterprise-toepassingen, backend-diensten en elk systeem waarbij je betrouwbare, geautomatiseerde PDF-tabelextractie nodig hebt zonder handmatige tussenkomst. Het is de motor achter de populaire Tabula-desktopapplicatie, bewezen door jaren van praktijkgebruik door journalisten, onderzoekers en data-analisten wereldwijd. Zijn intelligente detectie-algoritmen, flexibele extractiemodi en eenvoudige API maken het een essentieel hulpmiddel voor iedereen die werkt met tabelgegevens die in PDF's gevangen zitten.
Aan de slag met Tabula-Java
Gebruik alstublieft het volgende commando om de Maven-afhankelijkheid aan uw project toe te voegen.
OpenPDF Maven-afhankelijkheid
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Tabula-Java installeren via Gradle
implementation 'technology.tabula:tabula:1.0.5' Basis tabelextractie via Java API
De eenvoudigste manier om de open source Tabula-Java bibliotheek te gebruiken is deze automatisch alle tabellen in een PDF te laten detecteren met behulp van het standaard detectie‑algoritme. Dit werkt goed voor PDF's met duidelijke, spreadsheet‑achtige tabellen. Laten we beginnen met een eenvoudig voorbeeld dat alle tabellen uit een PDF‑document extraheert. Dit voorbeeld toont de fundamentele workflow. We laden de PDF met Apache PDFBox (de onderliggende PDF‑engine van Tabula-Java), maken een extractie‑algoritme en itereren door de pagina's.
Hoe een tabel uit PDF extraheren via Java API?
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();
}
}
Tabel extraheren uit specifieke paginaregionen
Vaak wil je niet alles extraheren. Je hebt misschien gegevens nodig uit een specifieke tabel op een specifieke locatie op de pagina. Tabula-Java stelt je in staat om een "selectiegebied" te definiëren met behulp van coördinaten. De Rectangle‑klasse definieert een specifiek gebied op de pagina met behulp van de PDF‑coördinatenruimte (waar 72 punten gelijk zijn aan één inch). De getArea()-methode bijsnijdt de pagina tot dit gebied vóór extractie, waardoor de nauwkeurigheid en prestaties verbeteren wanneer je alleen gegevens nodig hebt van een specifieke locatie. Hier is een zeer nuttig voorbeeld dat laat zien hoe je deze bewerking uitvoert.
Hoe een tabel uit specifieke paginagedeelten extraheren met Java API?
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();
}
}
Tabellen converteren naar CSV via Java API
Een veelvoorkomend gebruiksscenario is het exporteren van geëxtraheerde tabellen rechtstreeks naar CSV-formaat voor gebruik in spreadsheettoepassingen of databases. De CSVWriter-klasse behandelt alle complexiteit van CSV-opmaak, inclusief het correct escapen van speciale tekens en het verwerken van meerregelige celinhoud. Dit maakt het triviaal om Tabula-Java te integreren in gegevensverwerkingspijplijnen die CSV-invoer verwachten. Hier is een Java-codevoorbeeld dat laat zien hoe tabellen efficiënt te verwerken binnen Java-toepassingen.
Hoe geëxtraheerde tabellen exporteren naar CSV-formaat via Java API?
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();
}
}
Meerdere pagina's verwerken via Java API
Veel real-world PDF's bevatten tabellen die over meerdere pagina's verspreid zijn. De bibliotheek bevat ondersteuning voor het gelijktijdig verwerken van meerdere pagina's en stelt ontwikkelaars in staat om door alle pagina's in het document te itereren, tabellen te extraheren en te rapporteren over gevonden tabellen. De paginanummering begint bij 1 (niet 0), wat overeenkomt met hoe mensen doorgaans paginanummers refereren.