[java] Apache PDFBox를 사용하여 PDF 파일에서 텍스트 및 이미지 분리하기

PDF 파일은 텍스트와 이미지를 포함하는 다양한 문서를 저장하는 데 사용되는 형식입니다. Apache PDFBox는 Java로 작성된 라이브러리로서 PDF 파일을 조작하고 데이터를 추출할 수 있는 강력한 도구입니다. 이번 블로그 포스트에서는 Apache PDFBox를 사용하여 PDF 파일에서 텍스트와 이미지를 분리하는 방법을 살펴보겠습니다.

PDFBox 설치하기

먼저 Apache PDFBox를 사용하기 위해 다음과 같이 Maven을 사용하여 프로젝트에 필요한 종속성을 추가해야 합니다.

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.25</version>
</dependency>

Maven을 사용하지 않는 경우 Apache PDFBox 다운로드 페이지에서 직접 JAR 파일을 다운로드할 수 있습니다.

텍스트 추출하기

다음으로 PDF 파일에서 텍스트를 추출하는 방법을 알아보겠습니다. 아래의 예제 코드는 주어진 PDF 파일에서 모든 텍스트를 추출하여 출력하는 간단한 예제입니다.

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

public class TextExtractor {
    
    public static void main(String[] args) {
        try (PDDocument document = PDDocument.load(new File("example.pdf"))) {
            PDFTextStripper textStripper = new PDFTextStripper();
            String extractedText = textStripper.getText(document);
            System.out.println(extractedText);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드에서는 PDDocument 클래스를 사용하여 PDF 파일을 로드하고, PDFTextStripper 클래스를 사용하여 텍스트를 추출합니다. 추출된 텍스트는 String 형태로 반환됩니다.

이미지 추출하기

다음으로 PDF 파일에서 이미지를 추출하는 방법을 알아보겠습니다. 아래의 예제 코드는 PDF 파일에서 모든 이미지를 추출하여 파일로 저장하는 예제입니다.

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageExtractor {
    
    public static void main(String[] args) {
        try (PDDocument document = PDDocument.load(new File("example.pdf"))) {
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            for (int pageIndex = 0; pageIndex < document.getNumberOfPages(); pageIndex++) {
                BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 300);
                String outputFileName = "image" + pageIndex + ".png";
                ImageIOUtil.writeImage(image, outputFileName, 300);
                System.out.println("Image " + outputFileName + " saved");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드에서는 PDFRenderer 클래스를 사용하여 PDF 파일의 각 페이지를 렌더링하고, 추출된 이미지는 PNG 형식으로 파일에 저장됩니다. renderImageWithDPI 메서드는 DPI(Dots Per Inch) 값을 인수로 받아 해당 해상도로 이미지를 렌더링합니다.

결론

Apache PDFBox를 사용하면 Java로 PDF 파일의 텍스트와 이미지를 추출할 수 있습니다. 이를 활용하여 다양한 용도로 PDF 파일을 분석하거나 가공할 수 있습니다.

참고 자료