Gratis Java PDF-bibliotek for å ekstrahere tabeller fra PDF-er
Åpen kildekode Java API som programmatisk ekstraherer tabeller fra PDF-filer. Den kan enkelt konvertere ekstraherte tabeller til CSV og omforme låste PDF-tabeller til strukturerte dataformater.
Hva er Tabula-Java?
PDF-filer er overalt i næringslivet—rapporter, fakturaer, forskningsartikler og regnskap. Men det er et vedvarende problem: å trekke ut tabulære data fra disse dokumentene er notorisk vanskelig. Kopiering og liming gir ofte forvrengte data, og manuell innskriving er tidkrevende og feilutsatt. Det er her Tabula-Java kommer inn. Tabula-Java er et kraftig åpen kildekode‑bibliotek som programmatisk ekstraherer tabeller fra PDF-dokumenter. Bygget på solide PDF‑behandlingsgrunnlag, gjør dette Java‑biblioteket låste PDF‑tabeller om til strukturerte dataformater du faktisk kan jobbe med. Enten du bygger datapipelines, automatiserer rapportbehandling, eller bare er lei av å slite med PDF‑tabeller, tilbyr Tabula-Java en elegant løsning.
I motsetning til generiske PDF-parsere som behandler alt som ustrukturert tekst, forstår Tabula-Java tabellstrukturer. Den gjenkjenner rader, kolonner og celler, og bevarer forholdet mellom datapunkter. Denne forskjellen er avgjørende – forskjellen mellom å få "John 42 Engineer" som en tekstklump versus strukturerte poster med riktig feltdeling. Biblioteket fungerer som en ren Java-implementering, noe som gjør det perfekt for bedriftsapplikasjoner, backend-tjenester og ethvert system hvor du trenger pålitelig, automatisert PDF-tabelluttrekk uten manuell inngripen. Det er motoren bak den populære Tabula-skrivebordsapplikasjonen, bevist gjennom år med reell bruk av journalister, forskere og dataanalytikere verden over. Dens intelligente deteksjonsalgoritmer, fleksible uttrekksmoduser og enkle API gjør det til et essensielt verktøy for alle som arbeider med tabulære data fanget i PDF-er.
Kom i gang med Tabula-Java
Vennligst bruk følgende kommando for å legge til Maven-avhengigheten i prosjektet ditt.
OpenPDF Maven-avhengighet
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Installer Tabula-Java via Gradle
implementation 'technology.tabula:tabula:1.0.5' Grunnleggende tabelluttrekk via Java API
Den enkleste måten å bruke det åpne kildekodebiblioteket Tabula-Java på er å la det automatisk oppdage alle tabeller i en PDF ved hjelp av standarddeteksjonsalgoritmen. Dette fungerer bra for PDF-er med klare, regnearklignende tabeller. La oss starte med et enkelt eksempel som henter alle tabeller fra et PDF-dokument. Dette eksemplet demonstrerer den grunnleggende arbeidsflyten. Vi laster inn PDF-en ved hjelp av Apache PDFBox (Tabula-Javas underliggende PDF-motor), oppretter en ekstraksjonsalgoritme og itererer gjennom sidene.
Hvordan hente ut tabell fra 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();
}
}
Uttrekk tabell fra spesifikke sideområder
Ofte vil du ikke hente ut alt. Du kan ha behov for data fra en spesifikk tabell på et bestemt sted på siden. Tabula-Java lar deg definere et "utvalgsområde" ved hjelp av koordinater. Rectangle-klassen definerer et spesifikt område på siden ved bruk av PDF-koordinatrom (der 72 poeng tilsvarer en tomme). getArea()-metoden beskjærer siden til dette området før ekstraksjon, noe som forbedrer nøyaktigheten og ytelsen når du kun trenger data fra et bestemt sted. Her er et svært nyttig eksempel som demonstrerer hvordan du utfører denne operasjonen.
Hvordan hente ut tabell fra spesifikke sideområder ved bruk av 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();
}
}
Konvertere tabeller til CSV via Java API
Et vanlig bruksområde er å eksportere ekstraherte tabeller direkte til CSV-format for bruk i regnearkprogrammer eller databaser. CSVWriter-klassen håndterer all kompleksiteten ved CSV-formattering, inkludert korrekt escaping av spesialtegn og håndtering av flerlinjers celleinnhold. Dette gjør det enkelt å integrere Tabula-Java i dataprosesserings‑pipelines som forventer CSV‑input. Her er et Java‑kodeeksempel som viser hvordan man effektivt håndterer tabeller i Java‑applikasjoner.
Hvordan eksportere ekstraherte tabeller til 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();
}
}
Behandle flere sider via Java API
Mange virkelige PDF‑filer inneholder tabeller som strekker seg over flere sider. Biblioteket har inkludert støtte for å behandle flere sider samtidig og lar utviklere iterere gjennom alle sidene i dokumentet, ekstrahere og rapportere om funnet tabeller. Sidenummereringen starter på 1 (ikke 0), noe som samsvarer med hvordan mennesker vanligvis refererer til sidetall.