Ilmainen Java PDF -kirjasto taulukoiden poimimiseen PDF-tiedostoista
Avoimen lähdekoodin Java-API, joka ohjelmallisesti poimii taulukoita PDF-tiedostoista. Se voi helposti muuntaa poimitut taulukot CSV-muotoon ja muuntaa lukitut PDF-taulukot rakenteellisiksi tietomuodoiksi.
Mikä on Tabula-Java?
PDF-tiedostot ovat kaikkialla liiketoimintamaailmassa—raportit, laskut, tutkimuspaperit ja tilinpäätökset. Mutta on olemassa jatkuva ongelma: taulukkomuotoisen datan poiminta näistä asiakirjoista on pahamaineisesti vaikeaa. Kopioiminen ja liittäminen johtaa usein sotkuiseen dataan, ja manuaalinen uudelleenkirjoittaminen on työlästä ja virhealttiista. Tässä Tabula-Java astuu kuvaan. Tabula-Java on tehokas avoimen lähdekoodin kirjasto, joka ohjelmallisesti poimii taulukoita PDF-asiakirjoista. Vahvojen PDF-käsittelyn perusteiden päälle rakennettu tämä Java-kirjasto muuntaa lukitut PDF-taulukot rakenteellisiksi tietomuodoiksi, joita voit todella käyttää. Olitpa sitten rakentamassa dataputkia, automatisoimassa raporttien käsittelyä tai vain väsyneenä kamppailemaan PDF-taulukoiden kanssa, Tabula-Java tarjoaa tyylikkään ratkaisun.
Toisin kuin geneeriset PDF-parsijat, jotka käsittelevät kaiken rakenteettomana tekstinä, Tabula-Java ymmärtää taulukkorakenteet. Se tunnistaa rivit, sarakkeet ja solut, säilyttäen tietopisteiden väliset suhteet. Tämä ero on ratkaiseva – ero sen välillä, että saisi "John 42 Engineer" yhtenä tekstikappaleena sen sijaan, että olisi strukturoituja tietueita asianmukaisella kenttäerottelulla. Kirjasto toimii puhtaana Java-toteutuksena, mikä tekee siitä täydellisen yrityssovelluksiin, taustapalveluihin ja kaikkiin järjestelmiin, joissa tarvitaan luotettavaa, automatisoitua PDF-taulukoiden poimintaa ilman manuaalista puuttumista. Se on suositun Tabula-työpöytäsovelluksen moottori, jonka toimivuus on todistettu vuosien käytännön kokemuksella toimittajien, tutkijoiden ja data-analyytikoiden keskuudessa maailmanlaajuisesti. Sen älykkäät tunnistusalgoritmit, joustavat poimintatavat ja selkeä API tekevät siitä olennaisen työkalun kaikille, jotka työskentelevät PDF-tiedostoihin lukittujen taulukkotietojen parissa.
Aloittaminen Tabula-Javalla
Käytä seuraavaa komentoa lisätäksesi Maven-riippuvuuden projektiisi.
OpenPDF Maven -riippuvuus
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Asenna Tabula-Java Gradlen kautta
implementation 'technology.tabula:tabula:1.0.5' Perusteellinen taulukoiden poiminta Java API:n kautta
Yksinkertaisin tapa käyttää avointa Tabula-Java-kirjastoa on antaa sen automaattisesti havaita kaikki taulukot PDF-tiedostossa sen oletusdetektiöalgoritmilla. Tämä toimii hyvin PDF-tiedostoissa, joissa on selkeitä, taulukkolaskentaohjelman kaltaisia taulukoita. Aloitetaan suoraviivaisella esimerkillä, joka poimii kaikki taulukot PDF-asiakirjasta. Tämä esimerkki havainnollistaa perustyönkulun. Lataamme PDF:n Apache PDFBoxilla (Tabula-Javan taustalla oleva PDF-moottori), luomme poiminta-algoritmin ja käymme läpi sivut.
Kuinka poimia taulukko PDF:stä Java API:n avulla?
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();
}
}
Poimi taulukko tietyistä sivun alueista
Usein et halua poimia kaikkea. Saatat tarvita tietoja tietystä taulukosta tietyssä paikassa sivulla. Tabula-Java mahdollistaa "valinta-alueen" määrittämisen koordinaattien avulla. Rectangle-luokka määrittelee tietyn alueen sivulla PDF-koordinaatistossa (missä 72 pistettä vastaa yhtä tuumaa). getArea()-metodi rajaa sivun tähän alueeseen ennen poimintaa, parantaen tarkkuutta ja suorituskykyä, kun tarvitset tietoja vain tietyltä paikalta. Tässä on erittäin hyödyllinen esimerkki, joka näyttää, miten tämä operaatio suoritetaan.
Kuinka poimia taulukko tietyistä sivualueista Java API:n avulla?
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();
}
}
Taulukoiden muuntaminen CSV-muotoon Java API:n avulla
Yleinen käyttötapaus on viedä poimittuja taulukoita suoraan CSV-muotoon käytettäväksi taulukkolaskentaohjelmissa tai tietokannoissa. CSVWriter-luokka hoitaa kaiken CSV-muotoilun monimutkaisuuden, mukaan lukien erikoismerkkien asianmukainen escape-merkintä ja monirivisen solun sisällön käsittely. Tämä tekee Tabula-Javan integroinnista datankäsittelyputkiin, jotka odottavat CSV-sisältöä, triviaaliksi. Tässä on Java-koodiesimerkki, joka näyttää, miten taulukoita käsitellään tehokkaasti Java-sovelluksissa.
Kuinka viedä poimitut taulukot CSV-muotoon Java API:n avulla?
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();
}
}
Useiden sivujen käsittely Java API:n kautta
Monet todellisessa maailmassa olevat PDF-tiedostot sisältävät taulukoita, jotka ovat jakautuneet useille sivuille. Kirjasto on sisällyttänyt tuen useiden sivujen samanaikaiseen käsittelyyn ja mahdollistaa kehittäjien käydä läpi kaikki asiakirjan sivut, poimia ja raportoida löydetyt taulukot. Sivunumerointi alkaa numerosta 1 (ei 0), mikä vastaa sitä, miten ihmiset yleensä viittaavat sivunumeroihin.