Ingyenes Java PDF könyvtár a PDF-ekből történő táblázatkinyeréshez
Nyílt forráskódú Java API, amely programozott módon kinyeri a táblázatokat PDF-fájlokból. Könnyedén konvertálja a kinyert táblázatokat CSV-be, és a zárolt PDF-táblázatokat strukturált adatformátumokká alakítja.
Mi az a Tabula-Java?
PDF fájlok mindenhol jelen vannak az üzleti világban—jelentések, számlák, kutatási anyagok és pénzügyi kimutatások. De egy állandó probléma van: a táblázatos adatok kinyerése ezekből a dokumentumokból hírhedten nehéz. A másolás-beillesztés gyakran torz adatokat eredményez, és a kézi újraírás fárasztó és hibára hajlamos. Itt jön képbe a Tabula-Java. A Tabula-Java egy erőteljes nyílt forráskódú könyvtár, amely programozottan nyeri ki a táblázatokat PDF dokumentumokból. Szilárd PDF feldolgozási alapokra építve ez a Java könyvtár a lezárt PDF táblázatokat strukturált adatformátumokká alakítja, amelyekkel valóban dolgozhatsz. Akár adatcsővezetékeket építesz, jelentésfeldolgozást automatizálsz, vagy egyszerűen csak belefáradtál a PDF táblázatokkal való küzdelembe, a Tabula-Java elegáns megoldást kínál.
Az általános PDF-elemzőkkel, amelyek mindent strukturálatlan szövegként kezelnek, ellentétben a Tabula-Java érti a táblázatszerkezeteket. Felismeri a sorokat, oszlopokat és cellákat, megőrizve az adatpontok közötti kapcsolatokat. Ez a különbség kulcsfontosságú – a "John 42 Engineer" szöveges tömb és a megfelelő mezőelválasztással rendelkező strukturált rekordok közötti eltérés. A könyvtár tisztán Java megvalósításként működik, így tökéletes vállalati alkalmazásokhoz, háttérszolgáltatásokhoz és bármely rendszerhez, ahol megbízható, automatizált PDF-táblázat kinyerésre van szükség manuális beavatkozás nélkül. Ez a motor a népszerű Tabula asztali alkalmazás mögött áll, amelyet évek óta a valós világban használó újságírók, kutatók és adat-elemzők világszerte bizonyítottak. Az intelligens detektáló algoritmusai, a rugalmas kinyerési módok és az egyszerű API-ja elengedhetetlen eszközzé teszi mindenki számára, aki a PDF-ekben rekedt táblázati adatokkal dolgozik.
Tabula-Java használatának megkezdése
Kérjük, használja a következő parancsot a Maven függőség hozzáadásához a projektjébe.
OpenPDF Maven függőség
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Tabula-Java telepítése Gradle segítségével
implementation 'technology.tabula:tabula:1.0.5' Alapvető táblázatkinyerés Java API-n keresztül
A nyílt forráskódú Tabula-Java könyvtár legkönnyebb használati módja, ha hagyjuk, hogy automatikusan felismerje a PDF-ben lévő összes táblázatot az alapértelmezett detektáló algoritmusával. Ez jól működik olyan PDF-eknél, amelyekben egyértelmű, táblázat-szerű adatok vannak. Kezdjünk egy egyszerű példával, amely kinyeri az összes táblázatot egy PDF-dokumentumból. Ez a példa bemutatja az alapvető munkafolyamatot. Betöltjük a PDF-et az Apache PDFBox (a Tabula-Java mögöttes PDF motorja) segítségével, létrehozunk egy kinyerési algoritmust, és végigiterálunk az oldalakon.
Hogyan lehet táblázatot kinyerni PDF-ből Java API-n keresztül?
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();
}
}
Táblázat kinyerése meghatározott oldalrégiókból
Gyakran nem szükséges mindent kinyerni. Lehet, hogy egy adott táblázat adataira van szükség egy adott helyen az oldalon. A Tabula-Java lehetővé teszi, hogy koordinátákkal definiáljunk egy „kiválasztási területet”. A Rectangle osztály a PDF koordináta-rendszer (ahol 72 pont egy hüvelyknek felel meg) használatával határoz meg egy konkrét területet az oldalon. A getArea() metódus a kinyerés előtt erre a területre vágja le az oldalt, ezáltal javítva a pontosságot és a teljesítményt, ha csak egy adott helyről van szükség adatokra. Íme egy nagyon hasznos példa, amely bemutatja, hogyan hajtható végre ez a művelet.
Hogyan lehet táblázatot kinyerni egy adott oldalrégiókból Java API-val?
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();
}
}
Táblázatok CSV-be konvertálása Java API-n keresztül
Egy gyakori felhasználási eset az, hogy a kinyert táblázatokat közvetlenül CSV formátumba exportáljuk táblázatkezelő alkalmazások vagy adatbázisok számára. A CSVWriter osztály kezeli a CSV formázás minden bonyolultságát, beleértve a speciális karakterek megfelelő escape-elését és a több soros cellatartalom kezelését. Ez egyszerűvé teszi a Tabula-Java integrálását olyan adatfeldolgozó csővezetékekbe, amelyek CSV bemenetet várnak. Íme egy Java kódrészlet, amely megmutatja, hogyan lehet hatékonyan kezelni a táblázatokat Java alkalmazásokon belül.
Hogyan lehet a kinyert táblázatokat CSV formátumba exportálni Java API-val?
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();
}
}
Több oldal feldolgozása Java API-n keresztül
Sok valós PDF több oldalon elterülő táblázatot tartalmaz. A könyvtár támogatja a több oldal egyidejű feldolgozását, és lehetővé teszi a fejlesztők számára, hogy végigmenjenek a dokumentum összes oldalán, kinyerve és jelentve a talált táblázatokat. Az oldalszámozás 1‑től kezdődik (nem 0), ami megfelel annak, ahogyan az emberek általában hivatkoznak az oldalszámokra.