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

Perpustakaan PDF Java Percuma untuk Mengekstrak Jadual dari PDF

API Java Sumber Terbuka yang Menarik Jadual secara Programatik daripada Fail PDF. Ia boleh Dengan Mudah Menukar Jadual yang Diekstrak ke CSV dan Mengubah Jadual PDF yang Terkunci menjadi Format Data Berstruktur.

Apakah Tabula-Java?

Fail PDF ada di mana-mana dalam dunia perniagaan—laporan, invois, kertas penyelidikan, dan penyata kewangan. Tetapi terdapat masalah yang berterusan: mengekstrak data tabular daripada dokumen ini sangat sukar. Menyalin-tampal sering menghasilkan data yang rosak, dan menaip semula secara manual memakan masa serta mudah terdedah kepada kesilapan. Di sinilah Tabula-Java berperanan. Tabula-Java ialah perpustakaan sumber terbuka yang kuat yang mengekstrak jadual secara programatik daripada dokumen PDF. Dibina atas asas pemprosesan PDF yang kukuh, perpustakaan Java ini menukar jadual PDF yang terkunci menjadi format data berstruktur yang anda boleh gunakan. Sama ada anda membina saluran data, mengautomasi pemprosesan laporan, atau sekadar bosan bergelut dengan jadual PDF, Tabula-Java menawarkan penyelesaian yang elegan.

Berbeza dengan pengurai PDF generik yang menganggap segala sesuatu sebagai teks tidak berstruktur, Tabula-Java memahami struktur jadual. Ia mengenali baris, lajur, dan sel, mengekalkan hubungan antara titik data. Perbezaan ini penting—perbezaan antara mendapatkan \"John 42 Engineer\" sebagai sekumpulan teks bersepah berbanding rekod berstruktur dengan pemisahan medan yang betul. Perpustakaan ini beroperasi sebagai pelaksanaan Java tulen, menjadikannya sempurna untuk aplikasi perusahaan, perkhidmatan backend, dan mana-mana sistem di mana anda memerlukan pengekstrakan jadual PDF yang boleh dipercayai dan automatik tanpa campur tangan manual. Ia merupakan enjin di sebalik aplikasi desktop Tabula yang popular, terbukti melalui bertahun-tahun penggunaan dunia sebenar oleh wartawan, penyelidik, dan penganalisis data di seluruh dunia. Algoritma pengesanan pintar, mod pengekstrakan yang fleksibel, dan API yang mudah difahami menjadikannya alat penting bagi sesiapa yang bekerja dengan data tabular yang terperangkap dalam PDF.

Previous Next

Mula Menggunakan Tabula-Java

Sila gunakan perintah berikut untuk menambah kebergantungan Maven dalam projek anda.

Kebergantungan Maven OpenPDF

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

Pasang Tabula-Java melalui Gradle

implementation 'technology.tabula:tabula:1.0.5' 

Pengekstrakan Jadual Asas melalui API Java

Cara paling mudah untuk menggunakan perpustakaan sumber terbuka Tabula-Java ialah membiarkannya mengesan semua jadual dalam PDF secara automatik menggunakan algoritma pengesanan lalainya. Ini berfungsi dengan baik untuk PDF yang mempunyai jadual jelas seperti hamparan. Mari mulakan dengan contoh mudah yang mengekstrak semua jadual daripada dokumen PDF. Contoh ini menunjukkan aliran kerja asas. Kami memuatkan PDF menggunakan Apache PDFBox (enjin PDF asas Tabula-Java), membuat algoritma pengekstrakan, dan mengulangi halaman.

Bagaimana untuk Mengekstrak Jadual dari PDF melalui API Java?

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


Ekstrak Jadual dari Kawasan Halaman Tertentu

Selalunya, anda tidak mahu mengekstrak semuanya. Anda mungkin memerlukan data daripada jadual tertentu di lokasi tertentu pada halaman. Tabula-Java membenarkan anda menentukan "kawasan pemilihan" menggunakan koordinat. Kelas Rectangle menentukan kawasan khusus pada halaman menggunakan ruang koordinat PDF (di mana 72 titik bersamaan satu inci). Kaedah getArea() memotong halaman ke kawasan ini sebelum pengekstrakan, meningkatkan ketepatan dan prestasi apabila anda hanya memerlukan data dari lokasi tertentu. Berikut ialah contoh yang sangat berguna yang menunjukkan cara melaksanakan operasi ini.

Bagaimana untuk Mengekstrak Jadual dari Kawasan Halaman Tertentu menggunakan API Java?

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

Menukar Jadual ke CSV melalui API Java

Kes penggunaan biasa ialah mengeksport jadual yang diekstrak secara langsung ke format CSV untuk kegunaan dalam aplikasi hamparan atau pangkalan data. Kelas CSVWriter mengendalikan semua kerumitan pemformatan CSV, termasuk pelarian yang betul bagi aksara khas dan pengendalian kandungan sel berbilang baris. Ini menjadikan integrasi Tabula-Java ke dalam paip pemprosesan data yang menjangka input CSV menjadi mudah. Berikut ialah contoh kod Java yang menunjukkan cara mengendalikan jadual dengan cekap dalam aplikasi Java.

Bagaimana untuk Mengeksport Jadual yang Diekstrak ke Format CSV melalui API Java?

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

Memproses Berbilang Halaman melalui API Java

Banyak PDF dunia sebenar mengandungi jadual yang tersebar merentasi pelbagai halaman. Perpustakaan ini telah menyertakan sokongan untuk memproses pelbagai halaman secara serentak dan membolehkan pembangun mengulangi semua halaman dalam dokumen, mengekstrak dan melaporkan jadual yang ditemui. Penomboran halaman bermula pada 1 (bukan 0), yang sepadan dengan cara manusia biasanya merujuk nombor halaman.

 Melayu