1. Produkter
  2.   PDF
  3.   Java
  4.   Tabula-Java
 
  

Gratis Java PDF-bibliotek til at udtrække tabeller fra PDF'er

Open source Java API, der programmatisk udtrækker tabeller fra PDF-filer. Det kan nemt konvertere udtrukne tabeller til CSV og omdanne låste PDF-tabeller til strukturerede dataformater.

Hvad er Tabula-Java?

PDF-filer er overalt i erhvervslivet—rapporter, fakturaer, forskningsartikler og regnskaber. Men der er et vedvarende problem: at udtrække tabeldata fra disse dokumenter er notorisk svært. Kopiering og indsættelse resulterer ofte i forvrængede data, og manuel genindtastning er kedelig og fejlbehæftet. Det er her, Tabula-Java kommer ind i billedet. Tabula-Java er et kraftfuldt open source-bibliotek, der programmatisk udtrækker tabeller fra PDF-dokumenter. Bygget på solide PDF-behandlingsfundamenter omdanner dette Java-bibliotek låste PDF-tabeller til strukturerede dataformater, som du faktisk kan arbejde med. Uanset om du bygger datapipelines, automatiserer rapportbehandling, eller blot er træt af at kæmpe med PDF-tabeller, tilbyder Tabula-Java en elegant løsning.

I modsætning til generiske PDF-parsere, der behandler alt som ustruktureret tekst, forstår Tabula-Java tabelstrukturer. Den genkender rækker, kolonner og celler og bevarer relationerne mellem datapunkterne. Denne forskel er afgørende – forskellen mellem at få \"John 42 Engineer\" som en tekstklump versus strukturerede poster med korrekt feltdeling. Biblioteket fungerer som en ren Java-implementering, hvilket gør det perfekt til virksomhedsapplikationer, backend-tjenester og ethvert system, hvor du har brug for pålidelig, automatiseret PDF-tabeludtrækning uden manuel indgriben. Det er motoren bag den populære Tabula desktop-applikation, bevist gennem årtiers brug i den virkelige verden af journalister, forskere og dataanalytikere verden over. Dens intelligente detektionsalgoritmer, fleksible udtrækningsmetoder og en ligetil API gør den til et uundværligt værktøj for alle, der arbejder med tabeldata fanget i PDF'er.

Previous Next

Kom i gang med Tabula-Java

Brug venligst følgende kommando for at tilføje Maven-afhængigheden i dit projekt.

OpenPDF Maven-afhængighed

<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' 

Grundlæggende tabeludtræk via Java API

Den enkleste måde at bruge det open source Tabula-Java-bibliotek på er at lade det automatisk opdage alle tabeller i en PDF ved hjælp af dets standarddetektionsalgoritme. Dette fungerer godt for PDF'er med klare, regnearks-lignende tabeller. Lad os starte med et ligetil eksempel, der udtrækker alle tabeller fra et PDF-dokument. Dette eksempel demonstrerer den grundlæggende arbejdsgang. Vi indlæser PDF'en ved hjælp af Apache PDFBox (Tabula-Javas underliggende PDF-motor), opretter en udtrækningsalgoritme og itererer gennem siderne.

Hvordan udtrækker man en tabel 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();
    }
}


Udtræk tabel fra specifikke sideområder

Ofte ønsker du ikke at udtrække alt. Du har måske brug for data fra en specifik tabel på et bestemt sted på siden. Tabula-Java giver dig mulighed for at definere et "udvælgelsesområde" ved hjælp af koordinater. Rectangle-klassen definerer et specifikt område på siden ved hjælp af PDF-koordinatrum (hvor 72 punkter svarer til en tomme). getArea()-metoden beskærer siden til dette område før udtrækning, hvilket forbedrer nøjagtigheden og ydeevnen, når du kun har brug for data fra en bestemt placering. Her er et meget nyttigt eksempel, der demonstrerer, hvordan man udfører denne operation.

Hvordan udtrækker man en tabel fra specifikke sideområder ved brug af 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();
    }
}

Konvertering af tabeller til CSV via Java API

Et almindeligt anvendelsestilfælde er at eksportere udtrukne tabeller direkte til CSV-format til brug i regnearksprogrammer eller databaser. CSVWriter-klassen håndterer al kompleksiteten ved CSV-formattering, herunder korrekt escaping af specialtegn og håndtering af celleindhold med flere linjer. Dette gør det trivielt at integrere Tabula-Java i databehandlings‑pipelines, der forventer CSV-inddata. Her er et Java‑kodeeksempel, der viser, hvordan man effektivt håndterer tabeller i Java‑applikationer.

Hvordan eksporterer man udtrukne 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();
    }
}

Behandling af flere sider via Java API

Mange virkelige PDF‑filer indeholder tabeller, der strækker sig over flere sider. Biblioteket har inkluderet understøttelse af at behandle flere sider samtidigt og giver udviklere mulighed for at iterere gennem alle sider i dokumentet, udtrække og rapportere om fundne tabeller. Sidenummereringen starter ved 1 (ikke 0), hvilket svarer til hvordan mennesker typisk refererer til sidenumre.

 Dansk