Kostenlose Java-PDF-Bibliothek zum Extrahieren von Tabellen aus PDFs
Open-Source-Java-API, die programmgesteuert Tabellen aus PDF-Dateien extrahiert. Sie kann extrahierte Tabellen einfach in CSV konvertieren und gesperrte PDF-Tabellen in strukturierte Datenformate umwandeln.
Was ist Tabula-Java?
PDF-Dateien sind in der Geschäftswelt allgegenwärtig – Berichte, Rechnungen, Forschungsarbeiten und Finanzberichte. Doch es gibt ein hartnäckiges Problem: Das Extrahieren tabellarischer Daten aus diesen Dokumenten ist notorisch schwierig. Kopieren und Einfügen führt oft zu verzerrten Daten, und manuelles Abtippen ist mühsam und fehleranfällig. Hier kommt Tabula-Java ins Spiel. Tabula-Java ist eine leistungsstarke Open‑Source‑Bibliothek, die programmgesteuert Tabellen aus PDF‑Dokumenten extrahiert. Auf soliden PDF‑Verarbeitungsgrundlagen aufgebaut, wandelt diese Java‑Bibliothek gesperrte PDF‑Tabellen in strukturierte Datenformate um, mit denen Sie tatsächlich arbeiten können. Egal, ob Sie Datenpipelines bauen, die Berichtserstellung automatisieren oder einfach nur müde sind, sich mit PDF‑Tabellen herumzuschlagen – Tabula-Java bietet eine elegante Lösung.
Im Gegensatz zu generischen PDF-Parsern, die alles als unstrukturierten Text behandeln, versteht Tabula-Java Tabellenstrukturen. Es erkennt Zeilen, Spalten und Zellen und bewahrt die Beziehungen zwischen den Datenpunkten. Dieser Unterschied ist entscheidend – der Unterschied zwischen dem Erhalt von \"John 42 Engineer\" als Textblob und strukturierten Datensätzen mit korrekter Feldtrennung. Die Bibliothek funktioniert als reine Java-Implementierung und ist damit ideal für Unternehmensanwendungen, Backend‑Dienste und jedes System, bei dem Sie zuverlässige, automatisierte PDF‑Tabellenaus extraction ohne manuelles Eingreifen benötigen. Sie ist die Engine hinter der beliebten Tabula-Desktop‑Anwendung, bewährt durch jahrelange Praxis von Journalisten, Forschern und Datenanalysten weltweit. Ihre intelligenten Erkennungsalgorithmen, flexiblen Extraktionsmodi und die unkomplizierte API machen sie zu einem unverzichtbaren Werkzeug für alle, die mit tabellarischen Daten in PDFs arbeiten.
Erste Schritte mit Tabula-Java
Bitte verwenden Sie den folgenden Befehl, um die Maven-Abhängigkeit zu Ihrem Projekt hinzuzufügen.
OpenPDF Maven-Abhängigkeit
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Tabula-Java über Gradle installieren
implementation 'technology.tabula:tabula:1.0.5' Grundlegende Tabellenerfassung über die Java-API
Der einfachste Weg, die Open-Source-Bibliothek Tabula-Java zu nutzen, besteht darin, sie automatisch alle Tabellen in einer PDF mit ihrem Standard-Erkennungsalgorithmus erkennen zu lassen. Das funktioniert gut bei PDFs mit klaren, tabellenkalkulationsähnlichen Tabellen. Beginnen wir mit einem einfachen Beispiel, das alle Tabellen aus einem PDF-Dokument extrahiert. Dieses Beispiel demonstriert den grundlegenden Arbeitsablauf. Wir laden die PDF mit Apache PDFBox (der zugrunde liegenden PDF-Engine von Tabula-Java), erstellen einen Extraktionsalgorithmus und iterieren über die Seiten.
Wie man Tabellen aus PDF über die Java-API extrahiert?
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();
}
}
Tabelle aus bestimmten Seitenbereichen extrahieren
Oft möchte man nicht alles extrahieren. Möglicherweise benötigen Sie Daten aus einer bestimmten Tabelle an einer bestimmten Stelle auf der Seite. Tabula-Java ermöglicht es, einen "Auswahlbereich" mithilfe von Koordinaten zu definieren. Die Rectangle-Klasse definiert einen konkreten Bereich auf der Seite im PDF-Koordinatensystem (wobei 72 Punkte einem Zoll entsprechen). Die Methode getArea() schneidet die Seite vor der Extraktion auf diesen Bereich zu, was die Genauigkeit und Leistung verbessert, wenn Sie nur Daten aus einer bestimmten Position benötigen. Hier ist ein sehr nützliches Beispiel, das zeigt, wie diese Operation durchgeführt wird.
Wie man Tabellen aus bestimmten Seitenbereichen mit der Java-API extrahiert?
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 über die Java-API in CSV konvertieren
Ein häufiger Anwendungsfall ist das Exportieren extrahierter Tabellen direkt im CSV-Format zur Verwendung in Tabellenkalkulationsprogrammen oder Datenbanken. Die CSVWriter-Klasse übernimmt die gesamte Komplexität der CSV-Formatierung, einschließlich des korrekten Escape von Sonderzeichen und der Handhabung von mehrzeiligem Zelleninhalt. Das macht es trivial, Tabula-Java in Datenverarbeitungspipelines zu integrieren, die CSV-Eingaben erwarten. Hier ist ein Java-Codebeispiel, das zeigt, wie man Tabellen effizient in Java-Anwendungen verarbeitet.
Wie man extrahierte Tabellen über die Java-API in das CSV-Format exportiert?
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();
}
}
Verarbeitung mehrerer Seiten über die Java-API
Viele reale PDFs enthalten Tabellen, die sich über mehrere Seiten erstrecken. Die Bibliothek enthält Unterstützung für die gleichzeitige Verarbeitung mehrerer Seiten und ermöglicht Entwicklern, durch alle Seiten im Dokument zu iterieren, gefundene Tabellen zu extrahieren und zu berichten. Die Seitennummerierung beginnt bei 1 (nicht 0), was der üblichen menschlichen Referenz von Seitenzahlen entspricht.