ไลบรารี Java PDF ฟรีสำหรับสกัดตารางจาก PDF

API Java โอเพ่นซอร์สที่สกัดตารางจากไฟล์ PDF อย่างอัตโนมัติ สามารถแปลงตารางที่สกัดเป็น CSV ได้อย่างง่ายดายและแปลงตาราง PDF ที่ถูกล็อกให้เป็นรูปแบบข้อมูลที่มีโครงสร้าง.

Tabula-Java คืออะไร?

ไฟล์ PDF มีอยู่ทั่วทุกมุมในโลกธุรกิจ—รายงาน, ใบแจ้งหนี้, งานวิจัย, และงบการเงิน แต่มีปัญหาที่คงที่: การดึงข้อมูลตารางจากเอกสารเหล่านี้เป็นเรื่องที่ยากอย่างมาก การคัดลอกและวางมักทำให้ข้อมูลเสียรูปแบบ และการพิมพ์ใหม่ด้วยมือเป็นเรื่องน่าเบื่อและเสี่ยงต่อข้อผิดพลาด นั่นคือจุดที่ Tabula-Java เข้ามาช่วย Tabula-Java เป็นไลบรารีโอเพ่นซอร์สที่ทรงพลังซึ่งดึงตารางจากเอกสาร PDF อย่างอัตโนมัติ สร้างบนพื้นฐานการประมวลผล PDF ที่มั่นคง ไลบรารี Java นี้แปลงตาราง PDF ที่ถูกล็อกให้เป็นรูปแบบข้อมูลที่มีโครงสร้างและสามารถนำไปใช้ได้จริง ไม่ว่าคุณจะสร้างสายงานข้อมูล, ทำอัตโนมัติการประมวลผลรายงาน, หรือแค่เหนื่อยกับการต่อสู้กับตาราง PDF Tabula-Java มีโซลูชันที่เรียบง่ายและมีประสิทธิภาพ

แตกต่างจากตัวแยกวิเคราะห์ PDF ทั่วไปที่ถือทุกอย่างเป็นข้อความที่ไม่มีโครงสร้าง Tabula-Java เข้าใจโครงสร้างตาราง มันสามารถจำแนกแถว คอลัมน์ และเซลล์ได้ โดยคงความสัมพันธ์ระหว่างจุดข้อมูลไว้ ความแตกต่างนี้สำคัญ—ความแตกต่างระหว่างการได้ข้อความ "John 42 Engineer" เป็นกลุ่มข้อความเดียวกับบันทึกที่มีโครงสร้างพร้อมการแยกฟิลด์ที่เหมาะสม ไลบรารีทำงานเป็นการนำไปใช้ด้วย Java อย่างเดียว ทำให้เหมาะสำหรับแอปพลิเคชันระดับองค์กร บริการแบ็กเอนด์ และระบบใด ๆ ที่ต้องการการสกัดตาราง PDF อย่างอัตโนมัติและเชื่อถือได้โดยไม่ต้องแทรกแซงด้วยมือ มันเป็นเครื่องยนต์ที่อยู่เบื้องหลังแอปพลิเคชันเดสก์ท็อป Tabula ที่ได้รับความนิยม ซึ่งได้รับการพิสูจน์จากการใช้งานจริงหลายปีโดยนักข่าว นักวิจัย และนักวิเคราะห์ข้อมูลทั่วโลก อัลกอริทึมการตรวจจับอัจฉริยะ โหมดการสกัดที่ยืดหยุ่น และ API ที่ใช้งานง่ายทำให้เป็นเครื่องมือสำคัญสำหรับผู้ที่ทำงานกับข้อมูลตารางที่ถูกบังใน PDF

Previous Next

เริ่มต้นใช้งาน 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 โดยอัตโนมัติด้วยอัลกอริทึมการตรวจจับค่าเริ่มต้นของมัน วิธีนี้ทำงานได้ดีสำหรับ PDF ที่มีตารางชัดเจนคล้ายสเปรดชีต มาเริ่มด้วยตัวอย่างง่าย ๆ ที่ดึงตารางทั้งหมดจากเอกสาร 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 รวมถึงการหนีอักขระพิเศษอย่างถูกต้องและการจัดการเนื้อหาเซลล์หลายบรรทัด สิ่งนี้ทำให้การผสานรวม 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) ซึ่งสอดคล้องกับวิธีที่มนุษย์ทั่วไปอ้างอิงหมายเลขหน้า.

 ไทย