[java] Apache PDFBox를 사용하여 PDF 파일에서 이미지 비율 조정하기

PDF 파일에서 이미지를 추출하고 이미지의 비율을 조정하는 작업은 많은 경우에 필요합니다. 이러한 작업을 수행하기 위해 Apache PDFBox 라이브러리를 사용할 수 있습니다. 이 블로그 포스트에서는 Java를 사용하여 PDF 파일에서 이미지를 추출하고, 이미지의 비율을 조정하는 방법에 대해 알아보겠습니다.

필요한 라이브러리 추가

작업을 시작하기 전에 Apache PDFBox 라이브러리를 프로젝트에 추가해야 합니다. Apache PDFBox를 사용하기 위한 Maven 종속성을 아래와 같이 추가합니다.

<dependencies>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.23</version>
    </dependency>
</dependencies>

Maven을 사용하지 않는 경우 Apache PDFBox 다운로드 페이지에서 라이브러리를 다운로드하여 프로젝트에 추가할 수도 있습니다.

PDF 파일에서 이미지 추출하기

아래는 PDF 파일에서 이미지를 추출하는 간단한 예제입니다.

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.rendering.ImageType;

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

public class PDFImageExtractor {
    public static void main(String[] args) {
        try {
            PDDocument document = PDDocument.load(new File("input.pdf"));
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            
            for (int pageIndex = 0; pageIndex < document.getNumberOfPages(); pageIndex++) {
                BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 300, ImageType.RGB);
                ImageIO.write(image, "PNG", new File("output" + pageIndex + ".png"));
            }
            
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드는 입력으로 주어진 “input.pdf” 파일에서 이미지를 추출하고, 각 페이지의 이미지를 “output0.png”, “output1.png”, … 형식으로 저장합니다. pdfRenderer.renderImageWithDPI() 메서드를 사용하여 이미지를 DPI(Dots Per Inch) 단위로 렌더링할 수 있습니다.

이미지 비율 조정하기

이미지의 비율을 조정하기 위해서는 BufferedImage 객체의 크기를 변경하면 됩니다. 아래는 이미지 비율을 조정하는 예제입니다.

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageResizer {
    public static void main(String[] args) {
        try {
            File inputImage = new File("input.png");
            BufferedImage image = ImageIO.read(inputImage);
            
            int newWidth = 800;
            int newHeight = (int) (image.getHeight() * ((double) newWidth / image.getWidth()));
            Image resizedImage = image.getScaledInstance(newWidth, newHeight, Image.SCALE_DEFAULT);
            
            BufferedImage resultImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2d = resultImage.createGraphics();
            g2d.drawImage(resizedImage, 0, 0, null);
            g2d.dispose();
            
            ImageIO.write(resultImage, "PNG", new File("output.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드는 “input.png” 파일의 이미지 비율을 조정하여 “output.png” 파일로 저장합니다. newWidth를 기준으로 이미지의 가로 크기를 조정하고, 세로 크기는 가로 크기 비율에 따라 자동으로 조정됩니다. image.getScaledInstance() 메서드를 사용하여 이미지를 조정하고, BufferedImage 객체의 createGraphics() 메서드를 사용하여 이미지를 그립니다.

마무리

이제 Apache PDFBox를 사용하여 PDF 파일에서 이미지를 추출하고, 이미지의 비율을 조정하는 방법에 대해 알아보았습니다. 이렇게 추출한 이미지를 다양한 용도로 활용할 수 있습니다.