Gratis Java PDF‑bibliotek för att extrahera tabeller från PDF-filer
Open Source Java‑API som programatiskt extraherar tabeller från PDF-filer. Det kan enkelt konvertera extraherade tabeller till CSV och omvandla låsta PDF‑tabeller till strukturerade dataformat.
Vad är Tabula-Java?
PDF-filer finns överallt i affärsvärlden—rapporter, fakturor, forskningsartiklar och finansiella rapporter. Men det finns ett bestående problem: att extrahera tabulär data från dessa dokument är notorisk svårt. Kopiera‑klistra resulterar ofta i förvrängd data, och manuell omskrivning är tidskrävande och felbenägen. Det är här Tabula-Java kommer in i bilden. Tabula-Java är ett kraftfullt open source‑bibliotek som programatiskt extraherar tabeller från PDF-dokument. Byggt på en solid PDF‑behandlingsgrund, omvandlar detta Java‑bibliotek låsta PDF‑tabeller till strukturerade dataformat som du faktiskt kan arbeta med. Oavsett om du bygger datapipelines, automatiserar rapportbehandling eller helt enkelt är trött på att kämpa med PDF‑tabeller, erbjuder Tabula-Java en elegant lösning.
Till skillnad från generiska PDF‑parsers som behandlar allt som ostrukturerad text, förstår Tabula-Java tabellstrukturer. Den känner igen rader, kolumner och celler och bevarar relationerna mellan datapunkter. Denna skillnad är avgörande – skillnaden mellan att få \"John 42 Engineer\" som en textmassa versus strukturerade poster med korrekt fältseparation. Biblioteket körs som en ren Java‑implementation, vilket gör det perfekt för företagsapplikationer, backend‑tjänster och alla system där du behöver pålitlig, automatiserad PDF‑tabellutvinning utan manuell inblandning. Det är motorn bakom den populära Tabula‑skrivbordsapplikationen, beprövad genom år av verklig användning av journalister, forskare och dataanalytiker världen över. Dess intelligenta detekteringsalgoritmer, flexibla extraktionslägen och enkla API gör det till ett oumbärligt verktyg för alla som arbetar med tabulära data som är fångade i PDF‑filer.
Komma igång med Tabula-Java
Använd följande kommando för att lägga till Maven‑beroendet i ditt projekt.
OpenPDF Maven-beroende
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Installera Tabula-Java via Gradle
implementation 'technology.tabula:tabula:1.0.5' Grundläggande tabellutdragning via Java API
Det enklaste sättet att använda det öppna Tabula-Java-biblioteket är att låta det automatiskt upptäcka alla tabeller i en PDF med dess standarddetekteringsalgoritm. Detta fungerar bra för PDF-filer med tydliga, kalkylbladsliknande tabeller. Låt oss börja med ett enkelt exempel som extraherar alla tabeller från ett PDF-dokument. Detta exempel visar det grundläggande arbetsflödet. Vi laddar PDF-filen med Apache PDFBox (Tabula-Javas underliggande PDF-motor), skapar en extraktionsalgoritm och itererar genom sidorna.
Hur extraherar man en tabell från PDF 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();
}
}
Extrahera tabell från specifika sidområden
Ofta vill du inte extrahera allt. Du kan behöva data från en specifik tabell på en specifik plats på sidan. Tabula-Java låter dig definiera ett "urvalsområde" med hjälp av koordinater. Rectangle-klassen definierar ett specifikt område på sidan med PDF-koordinatrymden (där 72 punkter motsvarar en tum). Metoden getArea() beskär sidan till detta område innan extraktion, vilket förbättrar noggrannhet och prestanda när du bara behöver data från en viss plats. Här är ett mycket användbart exempel som visar hur du utför denna operation.
Hur extraherar man en tabell från specifika sidområden med 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();
}
}
Konvertera tabeller till CSV via Java API
Ett vanligt användningsområde är att exportera extraherade tabeller direkt till CSV-format för användning i kalkylprogram eller databaser. CSVWriter-klassen hanterar all komplexitet kring CSV-formattering, inklusive korrekt escapning av specialtecken och hantering av flerradigt cellinnehåll. Detta gör det enkelt att integrera Tabula-Java i datapipelines som förväntar sig CSV‑inmatning. Här är ett Java‑kodexempel som visar hur man effektivt hanterar tabeller i Java‑applikationer.
Hur exporterar man extraherade tabeller till CSV-format 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();
}
}
Bearbeta flera sidor via Java API
Många verkliga PDF-filer innehåller tabeller som sträcker sig över flera sidor. Biblioteket har inkluderat stöd för att bearbeta flera sidor samtidigt och låter utvecklare iterera genom alla sidor i dokumentet, extrahera och rapportera om hittade tabeller. Sidnumreringen börjar på 1 (inte 0), vilket stämmer överens med hur människor vanligtvis refererar till sidnummer.