JAVA

[JAVA] pdf를 이미지로 만들기 (PDFRenderer.jar)

마크제이콥스 2022. 5. 23. 16:09

PDFRenderer는 pdf파일을 page단위로 java.awt.Image 개체로 만듭니다.

package com.pdfImg.pdfTest;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import javax.imageio.ImageIO;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;

public class PdfImage {
	public static void main(String args[]) throws IOException{
    
    	//load a pdf from a byte buffer
        File file = new File("c:\\User\\test.pdf");
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        FileChannel channel = raf.getChannel();
        ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
        PDFFile pdffile = new PDFFile(buf);
        
        // draw the first page to an image
        PDFPage page = pdffile.getPage(2);
        
        //get the width and height for the doc at the default zoom 
        Rectangle rect = new Rectangle(0,0,(int)page.getBBox().getWidth(),(int)page.getBBox().getHeight());
        
        //generate the image
        Image image = page.getImage(
        	rect.width, rect.height, //width & height
                rect, // clip rect
                null, // null for the ImageObserver
                true, // fill background with white
                true  // block until drawing is done
		);
        
        int w = image.getWidth(null);
        int h = image.getHeight(null);
        BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = bi.createGraphics();
        g2.drawImage(image, 0, 0, null);
        g2.dispose();
        
        try{
        	ImageIO.write(bi, "jpg", new File("c:\\User\\imagePdfTest.jpg"));
        }catch(IOException ioe){
        	System.out.println("write: " + ioe.getMessage());
        }
	}        
}

---------------- 간략한 소스 설명 ----------------
// draw the first page to an image
PDFPage page = pdffile.getPage(2);

위의 코드가 pdf의 특정 page를 선택하는 부분입니다. 2페이지를 선택했습니다.

pdffile.getNumPages();
위의 코드로 pdf파일의 총 페이지 수를 알 수 있습니다.

총 페이지 수로 for문을 돌리면 모든 페이지를 이미지로 만들 수 있을 것 입니다.