[java] Apache PDFBox를 사용하여 PDF 파일에서 이미지 필터링하여 흑백 변환

이 문서에서는 Apache PDFBox를 사용하여 PDF 파일에서 이미지를 필터링하고 흑백으로 변환하는 방법을 알려드리겠습니다.

1. Apache PDFBox 설치

먼저, Apache PDFBox를 사용하기 위해서는 Maven 또는 Gradle과 같은 의존성 관리 도구를 사용하여 Apache PDFBox를 프로젝트에 추가해야 합니다. 다음과 같이 의존성을 추가합니다.

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

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

Apache PDFBox를 사용하여 PDF 파일에서 이미지를 추출하려면 PDFRenderer 클래스를 사용해야 합니다.

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

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("input.pdf")); // 변경할 PDF 파일 경로
            PDFRenderer renderer = new PDFRenderer(document);

            for (int pageIndex = 0; pageIndex < document.getPages().getCount(); pageIndex++) {
                BufferedImage image = renderer.renderImageWithDPI(pageIndex, 300, ImageType.RGB);
                File outputFile = new File("output" + pageIndex + ".png"); // 이미지 저장할 경로
                ImageIO.write(image, "png", outputFile);
            }

            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드는 ImageExtractor 클래스에서 PDF 파일로부터 이미지를 추출하여 PNG 형식으로 저장하는 예제입니다. input.pdf는 변환할 PDF 파일의 경로를 나타냅니다. 추출된 이미지는 output0.png, output1.png와 같이 페이지 번호를 포함한 파일 이름으로 저장됩니다.

3. 이미지 필터링하여 흑백으로 변환하기

이미지의 필터링과 흑백 변환은 java.awt.image.BufferedImage 클래스의 메소드를 사용하여 수행할 수 있습니다. 아래의 예제 코드는 이미지를 필터링한 후 흑백으로 변환하는 방법을 보여줍니다.

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

public class ImageFiltering {
    public static void main(String[] args) {
        try {
            BufferedImage image = ImageIO.read(new File("output0.png")); // 필터링할 이미지 경로

            // 이미지 필터링
            ImageFilter filter = new GrayscaleFilter();
            Image filteredImage = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), filter));

            // 필터링된 이미지를 흑백으로 변환
            BufferedImage grayscaleImage = new BufferedImage(filteredImage.getWidth(null), filteredImage.getHeight(null), BufferedImage.TYPE_BYTE_GRAY);
            Graphics2D graphics = grayscaleImage.createGraphics();
            graphics.drawImage(filteredImage, 0, 0, null);
            graphics.dispose();

            // 흑백 이미지 저장
            File outputFile = new File("filtered_output0.png"); // 필터링된 이미지 저장할 경로
            ImageIO.write(grayscaleImage, "png", outputFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제 코드에서 GrayscaleFilter는 이미지를 흑백으로 변환하는 필터 클래스를 나타냅니다. output0.png는 필터링할 이미지 파일의 경로를 나타냅니다. 변환된 흑백 이미지는 filtered_output0.png와 같은 이름으로 저장됩니다.

결론

이제 Apache PDFBox를 사용하여 PDF 파일에서 이미지를 추출하고, 필터링하여 흑백으로 변환하는 방법을 알아보았습니다. 이를 응용하여 PDF에 포함된 이미지를 다양한 방식으로 처리할 수 있습니다. 추가적인 정보는 Apache PDFBox 공식 문서를 참조하세요.