[Java] PDF 파일을 이미지로 변환 / pdfbox

0후·2022년 3월 3일
0
  1. pom.xml에 하단 디펜던시 추가
        <!-- PDFBox -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.22</version>
        </dependency>
        
        <!-- PDFBox-Tool -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox-tools</artifactId>
            <version>2.0.22</version>
        </dependency>
        
        <!-- PDFBox Image -->
        <dependency>
            <groupId>com.github.jai-imageio</groupId>
            <artifactId>jai-imageio-core</artifactId>
            <version>1.3.1</version>
        </dependency>
  1. java 파일에 하단 소스 적용
// PDF -> IMG 변환
MultipartFile multipartFile_ = multipartFile;

if("application/pdf".equals(multipartFile_.getContentType())) {
	File file = newFile;
	PDDocument document = PDDocument.load(file); // document 생성
	PDFRenderer renderer = new PDFRenderer(document); // PDF 렌더러 불러오기
	List<BufferedImage> bufferedImages = new ArrayList<BufferedImage>(); // 변환될 이미지 객체를 담을 List 선언
	int width = 0, height = 0; // 병합될 이미지 파일의 너비와 높이 값을 담을 변수
	int pageCount = document.getNumberOfPages();
	
	for(int page = 0; page<pageCount; page++) { // 한 페이지씩 꺼내와서
		BufferedImage bim = renderer.renderImage(page); // 이미지로 변환
		bufferedImages.add(bim); // 그리고 이미지 리스트에 담음
		
		if(bim.getWidth() > width) width = bim.getWidth(); // 병합될 이미지의 최대 너비
		height += bim.getHeight(); // 병합될 이미지의 최대 높이
	}

	BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 병합될 이미지 객체 생성
	Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics(); // 그래픽 객체 생성
	
	graphics.setBackground(Color.WHITE); // 배경을 흰색으로 지정
	
	// 이미지 병합 과정
	int idx = 0;
	for(BufferedImage obj : bufferedImages) { // 이미지 List에서 이미지를 하나씩 꺼내와서
		if(idx == 0) height = 0; // 첫번째 이미지의 경우 높이를 0으로 설정
		graphics.drawImage(obj, 0, height, null); // 그래픽 객체에 꺼내온 이미지를 그려줌
		
		height += obj.getHeight(); // 높이값을 이미지의 높이만큼 더해줌
		idx++;
	}
	
	ImageIO.write(bufferedImage, "png", file); // 마지막으로 병합된 이미지 생성
	graphics.dispose(); // 그래픽 리소스 해제

	if (document != null) {
		document.close();
	}
}
profile
휘발방지

1개의 댓글

comment-user-thumbnail
2023년 10월 11일

newFile 변수가 어딨는건가요 ㅠㅠ...

답글 달기