1. 제품
  2.   PDF
  3.   Java
  4.   Tabula-Java
 
  

PDF에서 표를 추출하기 위한 무료 Java PDF 라이브러리

PDF 파일에서 표를 프로그래밍 방식으로 추출하는 오픈소스 Java API입니다. 추출된 표를 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 의존성을 추가하려면 다음 명령을 사용하십시오.

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 문서에서 모든 테이블을 추출하는 간단한 예제로 시작해 보겠습니다. 이 예제는 기본 워크플로를 보여줍니다. 우리는 Apache PDFBox (Tabula-Java의 기반 PDF 엔진)를 사용하여 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포인트가 1인치에 해당)에서 페이지의 특정 영역을 정의합니다. 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 포맷팅의 모든 복잡성을 처리합니다. 이를 통해 CSV 입력을 기대하는 데이터 처리 파이프라인에 Tabula-Java를 쉽게 통합할 수 있습니다. 아래는 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를 통한 다중 페이지 처리

많은 실제 PDF에는 여러 페이지에 걸쳐 테이블이 분산되어 있습니다. 이 라이브러리는 동시에 여러 페이지를 처리하는 기능을 포함하고 있어 개발자가 문서의 모든 페이지를 순회하면서 발견된 테이블을 추출하고 보고할 수 있습니다. 페이지 번호는 1부터 시작하며(0이 아님), 이는 사람이 일반적으로 페이지 번호를 참조하는 방식과 일치합니다.

 한국인