PDF से तालिकाएँ निकालने के लिए मुफ्त Java PDF लाइब्रेरी

ओपन सोर्स Java API जो प्रोग्रामेटिक रूप से PDF फ़ाइलों से तालिकाएँ निकालता है। यह आसानी से निकाली गई तालिकाओं को CSV में बदल सकता है और लॉक्ड PDF तालिकाओं को संरचित डेटा फ़ॉर्मेट में परिवर्तित करता है।

Tabula-Java क्या है?

PDF फ़ाइलें व्यापार जगत में हर जगह हैं—रिपोर्ट, इनवॉइस, शोध पत्र, और वित्तीय विवरण। लेकिन एक लगातार समस्या है: इन दस्तावेज़ों से तालिका डेटा निकालना काफ़ी कठिन है। कॉपी‑पेस्ट करने से अक्सर डेटा बिगड़ जाता है, और मैन्युअल टाइपिंग थकाऊ और त्रुटिपूर्ण होती है। यहीं पर Tabula-Java काम आता है। Tabula-Java एक शक्तिशाली ओपन‑सोर्स लाइब्रेरी है जो प्रोग्रामेटिक रूप से PDF दस्तावेज़ों से तालिकाएँ निकालती है। ठोस PDF प्रोसेसिंग आधार पर निर्मित, यह जावा लाइब्रेरी लॉक्ड PDF तालिकाओं को ऐसे संरचित डेटा फ़ॉर्मेट में बदल देती है जिनके साथ आप वास्तव में काम कर सकते हैं। चाहे आप डेटा पाइपलाइन बना रहे हों, रिपोर्ट प्रोसेसिंग को स्वचालित कर रहे हों, या बस PDF तालिकाओं से जूझने से थक गए हों, Tabula-Java एक सुगम समाधान प्रदान करता है।

सामान्य PDF पार्सर जो सब कुछ को असंरचित पाठ मानते हैं, उनके विपरीत Tabula-Java तालिका संरचनाओं को समझता है। यह पंक्तियों, स्तंभों और कोशिकाओं को पहचानता है, डेटा बिंदुओं के बीच संबंधों को संरक्षित रखता है। यह अंतर महत्वपूर्ण है—\"John 42 Engineer\" को एक ब्लॉब पाठ के रूप में प्राप्त करने बनाम उचित फ़ील्ड विभाजन के साथ संरचित रिकॉर्ड्स के बीच का अंतर। यह लाइब्रेरी एक शुद्ध Java कार्यान्वयन के रूप में चलती है, जिससे यह एंटरप्राइज़ एप्लिकेशन, बैकएंड सेवाओं, और किसी भी सिस्टम के लिए उपयुक्त बनती है जहाँ आपको विश्वसनीय, स्वचालित PDF तालिका निष्कर्षण की आवश्यकता होती है बिना मैन्युअल हस्तक्षेप के। यह लोकप्रिय Tabula डेस्कटॉप एप्लिकेशन के पीछे की इंजन है, जिसे पत्रकारों, शोधकर्ताओं और डेटा विश्लेषकों द्वारा वर्षों के वास्तविक उपयोग से सिद्ध किया गया है। इसकी बुद्धिमान डिटेक्शन एल्गोरिदम, लचीले निष्कर्षण मोड, और सरल API इसे उन सभी के लिए एक आवश्यक उपकरण बनाते हैं जो PDFs में फंसी तालिका डेटा के साथ काम करते हैं।

Previous Next

Tabula-Java के साथ शुरुआत करना

कृपया अपने प्रोजेक्ट में Maven निर्भरता जोड़ने के लिए निम्नलिखित कमांड का उपयोग करें।

OpenPDF Maven निर्भरता

<dependency>
  <groupId>technology.tabula</groupId>
  <artifactId>tabula</artifactId>
  <version>1.0.5.</version>
</dependency>

Gradle के माध्यम से Tabula-Java स्थापित करें

implementation 'technology.tabula:tabula:1.0.5' 

Java API के माध्यम से बुनियादी तालिका निष्कर्षण

ओपन सोर्स Tabula-Java लाइब्रेरी का उपयोग करने का सबसे सरल तरीका यह है कि इसे अपने डिफ़ॉल्ट डिटेक्शन एल्गोरिदम का उपयोग करके PDF में सभी तालिकाओं को स्वचालित रूप से पहचानने दें। यह स्पष्ट, स्प्रेडशीट-सम जैसे तालिकाओं वाले PDF के लिए अच्छी तरह काम करता है। चलिए एक सीधा उदाहरण शुरू करते हैं जो PDF दस्तावेज़ से सभी तालिकाओं को निकालता है। यह उदाहरण मूल कार्यप्रवाह को दर्शाता है। हम PDF को Apache PDFBox (Tabula-Java की आधारभूत PDF इंजन) का उपयोग करके लोड करते हैं, एक एक्सट्रैक्शन एल्गोरिदम बनाते हैं, और पृष्ठों के माध्यम से इटररेट करते हैं।

Java API के माध्यम से PDF से तालिका कैसे निकालें?

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();
    }
}

Java API के माध्यम से तालिकाओं को CSV में बदलना

एक सामान्य उपयोग मामला निकाले गए तालिकाओं को सीधे CSV प्रारूप में निर्यात करना है, जिसे स्प्रेडशीट अनुप्रयोगों या डेटाबेस में उपयोग किया जा सकता है। CSVWriter क्लास CSV फ़ॉर्मेटिंग की सभी जटिलताओं को संभालती है, जिसमें विशेष अक्षरों का उचित एस्केपिंग और बहु-लाइन सेल सामग्री का प्रबंधन शामिल है। यह Tabula-Java को डेटा प्रोसेसिंग पाइपलाइन में एकीकृत करना आसान बनाता है जो CSV इनपुट की अपेक्षा करती हैं। यहाँ एक Java कोड उदाहरण है जो दिखाता है कि Java अनुप्रयोगों के भीतर तालिकाओं को प्रभावी ढंग से कैसे संभालें।

Java API के माध्यम से निकाली गई तालिकाओं को CSV फ़ॉर्मेट में कैसे निर्यात करें?

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 के माध्यम से कई पृष्ठों को प्रोसेस करना

कई वास्तविक दुनिया के PDFs में कई पृष्ठों में फैली हुई तालिकाएँ होती हैं। लाइब्रेरी ने एक साथ कई पृष्ठों को प्रोसेस करने का समर्थन शामिल किया है और डेवलपर्स को दस्तावेज़ के सभी पृष्ठों के माध्यम से इटररेट करने, तालिकाओं को निकालने और रिपोर्ट करने की अनुमति देती है। पृष्ठ क्रमांक 1 से शुरू होता है (0 नहीं), जो मानवों द्वारा सामान्यतः पृष्ठ संख्याओं को संदर्भित करने के तरीके से मेल खाता है।

 हिन्दी