Δωρεάν Java PDF Βιβλιοθήκη για την Εξαγωγή Πινάκων από PDF
Ανοιχτού κώδικα Java API που εξάγει προγραμματιστικά πίνακες από αρχεία PDF. Μπορεί εύκολα να μετατρέπει τους εξαγόμενους πίνακες σε CSV και να μετατρέπει κλειδωμένους πίνακες PDF σε δομημένες μορφές δεδομένων.
Τι είναι το Tabula-Java;
Τα αρχεία PDF είναι παντού στον επιχειρηματικό κόσμο—αναφορές, τιμολόγια, ερευνητικές εργασίες και οικονομικές καταστάσεις. Αλλά υπάρχει ένα επίμονο πρόβλημα: η εξαγωγή δεδομένων σε μορφή πινάκων από αυτά τα έγγραφα είναι φήμης δύσκολη. Η αντιγραφή-επικόλληση συχνά οδηγεί σε παραμορφωμένα δεδομένα, και η χειροκίνητη πληκτρολόγηση είναι κουραστική και επιρρεπής σε σφάλματα. Εδώ έρχεται το Tabula-Java. Το Tabula-Java είναι μια ισχυρή ανοιχτού κώδικα βιβλιοθήκη που εξάγει προγραμματιστικά πίνακες από έγγραφα PDF. Χτισμένο σε σταθερές βάσεις επεξεργασίας PDF, αυτή η βιβλιοθήκη Java μετατρέπει κλειδωμένους πίνακες PDF σε δομημένες μορφές δεδομένων με τις οποίες μπορείτε πραγματικά να εργαστείτε. Είτε χτίζετε αγωγούς δεδομένων, αυτοματοποιείτε την επεξεργασία αναφορών, είτε απλώς έχετε κουραστεί να παλεύετε με πίνακες PDF, το Tabula-Java προσφέρει μια κομψή λύση.
Σε αντίθεση με τους γενικούς αναλυτές PDF που αντιμετωπίζουν τα πάντα ως αδόμητο κείμενο, το Tabula-Java κατανοεί τις δομές πινάκων. Αναγνωρίζει σειρές, στήλες και κελιά, διατηρώντας τις σχέσεις μεταξύ των δεδομένων. Αυτή η διάκριση είναι κρίσιμη — η διαφορά μεταξύ του να λαμβάνετε το "John 42 Engineer" ως ένα ακατάστατο κείμενο και των δομημένων εγγραφών με σωστό διαχωρισμό πεδίων. Η βιβλιοθήκη λειτουργεί ως καθαρή υλοποίηση Java, καθιστώντας την ιδανική για επιχειρησιακές εφαρμογές, υπηρεσίες backend και οποιοδήποτε σύστημα όπου χρειάζεστε αξιόπιστη, αυτοματοποιημένη εξαγωγή πινάκων PDF χωρίς χειροκίνητη παρέμβαση. Είναι η μηχανή πίσω από τη δημοφιλή εφαρμογή Tabula για υπολογιστές, αποδεδειγμένη μέσα από χρόνια πραγματικής χρήσης από δημοσιογράφους, ερευνητές και αναλυτές δεδομένων παγκοσμίως. Οι έξυπνοι αλγόριθμοι ανίχνευσης, οι ευέλικτες λειτουργίες εξαγωγής και το απλό API την καθιστούν ένα απαραίτητο εργαλείο για όποιον εργάζεται με δομημένα δεδομένα παγιδευμένα σε PDF.
Ξεκινώντας με το Tabula-Java
Παρακαλώ χρησιμοποιήστε την παρακάτω εντολή για να προσθέσετε την εξάρτηση Maven στο έργο σας.
Εξάρτηση Maven για OpenPDF
<dependency>
<groupId>technology.tabula</groupId>
<artifactId>tabula</artifactId>
<version>1.0.5.</version>
</dependency>
Εγκατάσταση Tabula-Java μέσω Gradle
implementation 'technology.tabula:tabula:1.0.5' Βασική εξαγωγή πινάκων μέσω Java API
Ο πιο απλός τρόπος χρήσης της ανοιχτής βιβλιοθήκης Tabula-Java είναι να την αφήσετε να εντοπίζει αυτόματα όλους τους πίνακες σε ένα PDF χρησιμοποιώντας τον προεπιλεγμένο αλγόριθμο ανίχνευσης. Αυτό λειτουργεί καλά για PDFs με σαφείς, παρόμοιους με λογιστικά φύλλα πίνακες. Ας ξεκινήσουμε με ένα απλό παράδειγμα που εξάγει όλους τους πίνακες από ένα έγγραφο PDF. Αυτό το παράδειγμα δείχνει τη βασική ροή εργασίας. Φορτώνουμε το PDF χρησιμοποιώντας το Apache PDFBox (τη βασική μηχανή PDF του Tabula-Java), δημιουργούμε έναν αλγόριθμο εξαγωγής και επαναλαμβάνουμε τις σελίδες.
Πώς να εξάγετε πίνακα από PDF μέσω 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();
}
}
Εξαγωγή πίνακα από συγκεκριμένες περιοχές σελίδας
Συχνά, δεν θέλετε να εξάγετε τα πάντα. Μπορεί να χρειάζεστε δεδομένα από έναν συγκεκριμένο πίνακα σε μια συγκεκριμένη θέση στη σελίδα. Το Tabula-Java σας επιτρέπει να ορίσετε μια "περιοχή επιλογής" χρησιμοποιώντας συντεταγμένες. Η κλάση Rectangle ορίζει μια συγκεκριμένη περιοχή στη σελίδα χρησιμοποιώντας το σύστημα συντεταγμένων PDF (όπου 72 σημεία ισοδυναμούν με ένα ίντσα). Η μέθοδος getArea() περικόπτει τη σελίδα σε αυτήν την περιοχή πριν από την εξαγωγή, βελτιώνοντας την ακρίβεια και την απόδοση όταν χρειάζεστε δεδομένα μόνο από μια συγκεκριμένη θέση. Εδώ είναι ένα πολύ χρήσιμο παράδειγμα που δείχνει πώς να εκτελέσετε αυτήν τη λειτουργία.
Πώς να εξάγετε πίνακα από συγκεκριμένες περιοχές σελίδας χρησιμοποιώντας 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();
}
}
Μετατροπή πινάκων σε CSV μέσω Java API
Ένα κοινό σενάριο χρήσης είναι η εξαγωγή των εξαγόμενων πινάκων απευθείας σε μορφή CSV για χρήση σε εφαρμογές λογιστικών φύλλων ή βάσεις δεδομένων. Η κλάση CSVWriter διαχειρίζεται όλη την πολυπλοκότητα της μορφοποίησης CSV, συμπεριλαμβανομένου του σωστού escaping των ειδικών χαρακτήρων και της διαχείρισης περιεχομένου κελιών πολλαπλών γραμμών. Αυτό καθιστά εύκολη την ενσωμάτωση του Tabula-Java σε αγωγούς επεξεργασίας δεδομένων που αναμένουν είσοδο CSV. Εδώ είναι ένα παράδειγμα κώδικα Java που δείχνει πώς να χειρίζεστε τους πίνακες αποδοτικά μέσα σε εφαρμογές Java.
Πώς να εξάγετε τους εξαγόμενους πίνακες σε μορφή CSV μέσω 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();
}
}
Επεξεργασία πολλαπλών σελίδων μέσω Java API
Πολλά πραγματικά PDF περιέχουν πίνακες που διαστέλλονται σε πολλές σελίδες. Η βιβλιοθήκη έχει συμπεριλάβει υποστήριξη για επεξεργασία πολλαπλών σελίδων ταυτόχρονα και επιτρέπει στους προγραμματιστές να διατρέχουν όλες τις σελίδες του εγγράφου, εξάγοντας και αναφέροντας τους εντοπισμένους πίνακες. Η αρίθμηση των σελίδων ξεκινά από το 1 (όχι το 0), κάτι που ταιριάζει με τον τρόπο που οι άνθρωποι συνήθως αναφέρονται στους αριθμούς σελίδων.