PDF 파일에서 이미지를 추출하고 해당 이미지의 해상도를 변경해야 하는 경우가 있습니다. Java에서는 Apache PDFBox를 사용하여 이 작업을 수행할 수 있습니다.
1. Apache PDFBox 설치
Apache PDFBox는 Apache Software Foundation에서 개발된 Java 기반의 오픈 소스 라이브러리입니다. 이를 사용하여 PDF 파일을 다룰 수 있습니다.
Maven을 사용하고 있다면, pom.xml
파일에 다음 의존성을 추가합니다:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version>
</dependency>
Maven을 사용하지 않는다면, Apache PDFBox 다운로드 페이지에서 jar 파일을 직접 다운로드 받아서 사용할 수 있습니다.
2. 이미지 해상도 변경하기
다음은 PDF 파일에서 이미지를 추출하고 해당 이미지의 해상도를 변경하는 Java 코드입니다:
import org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImage;
import org.apache.pdfbox.util.Matrix;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageResolutionChanger {
public static void main(String[] args) {
try {
// PDF 파일 로드
PDDocument document = PDDocument.load(new File("input.pdf"));
// 각 페이지에서 이미지 추출 및 해상도 변경
for (PDPage page : document.getPages()) {
PDResources resources = page.getResources();
for (COSName xObjectName : resources.getXObjectNames()) {
PDXObject xObject = resources.getXObject(xObjectName);
if (xObject instanceof PDImage) {
PDImage image = (PDImage) xObject;
BufferedImage bufferedImage = image.getImage();
// 이미지 해상도 변경
BufferedImage resizedImage = resizeImage(bufferedImage, 300, 300);
// 변경된 이미지를 파일로 저장
ImageIO.write(resizedImage, "png", new File("output.png"));
}
}
}
// PDF 파일 저장
document.save("output.pdf");
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static BufferedImage resizeImage(BufferedImage originalImage, int targetWidth, int targetHeight) {
BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
resizedImage.getGraphics().drawImage(originalImage.getScaledInstance(targetWidth, targetHeight, BufferedImage.SCALE_SMOOTH), 0, 0, null);
return resizedImage;
}
}
위 코드에서 input.pdf
파일에서 이미지를 추출하고, 추출한 이미지의 해상도를 300x300으로 변경하여 output.png
파일로 저장하고, 변경된 PDF 파일을 output.pdf
로 저장합니다. 이 코드는 각 페이지에서 모든 이미지를 추출하고 해상도를 변경하지만, 필요에 따라 원하는 조건에 맞게 수정할 수 있습니다.
3. 실행하기
위 코드를 실행하기 전에, input.pdf
파일의 경로를 정확히 지정해야 합니다. 또한, 이미지의 대상 해상도를 원하는 값으로 변경할 수 있습니다.
해당 코드를 실행하면, 지정한 PDF 파일에서 이미지를 추출하고, 추출한 이미지의 해상도를 변경하여 파일로 저장합니다. 변경된 PDF 파일은 output.pdf
로, 변경된 이미지는 output.png
로 저장됩니다.
4. 참고 자료
주의: 위 코드는 Apache PDFBox 라이브러리를 사용하는 예제입니다. 라이브러리 버전을 확인하고 필요에 따라 코드를 수정하여 사용하시기 바랍니다.