How to Implement PDF to Image Convertion in java

Step 1 : Download Required Library

PDFRenderer-0.9.0.jar and Extract Current Directory or Set Class Path


Step 2: Compile and Run Java code

import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;

import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Transparency;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import javax.swing.*;
import javax.imageio.*;
import java.awt.image.*;

public class ImageMain {
public static void setup() throws IOException {
// load a pdf from a byte buffer
File file = new File(“1430210273.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);
int numPgs = pdffile.getNumPages();
for (int i = 0; i < numPgs; i++) {
// draw the first page to an image
PDFPage page = pdffile.getPage(i);
// 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 img = 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
);
// save it as a file
BufferedImage bImg = toBufferedImage(img);
File yourImageFile = new File("Img/page_" + i + ".png");
ImageIO.write(bImg, "png", yourImageFile);
}
}

// This method returns a buffered image with the contents of an image
public static BufferedImage toBufferedImage(Image image) {
if (image instanceof BufferedImage) {
return (BufferedImage) image;
}
// This code ensures that all the pixels in the image are loaded
image = new ImageIcon(image).getImage();
// Determine if the image has transparent pixels; for this method's
// implementation, see e661 Determining If an Image Has Transparent
// Pixels
boolean hasAlpha = hasAlpha(image);
// Create a buffered image with a format that's compatible with the
// screen
BufferedImage bimage = null;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
try {
// Determine the type of transparency of the new buffered image
int transparency = Transparency.OPAQUE;
if (hasAlpha) {
transparency = Transparency.BITMASK;
}
// Create the buffered image
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
bimage = gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), transparency);
} catch (HeadlessException e) {
// The system does not have a screen
}
if (bimage == null) {
// Create a buffered image using the default color model
int type = BufferedImage.TYPE_INT_RGB;
if (hasAlpha) {
type = BufferedImage.TYPE_INT_ARGB;
}
bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
}
// Copy image to buffered image
Graphics g = bimage.createGraphics();
// Paint the image onto the buffered image
g.drawImage(image, 0, 0, null);
g.dispose();
return bimage;
}

public static boolean hasAlpha(Image image) {
// If buffered image, the color model is readily available
if (image instanceof BufferedImage) {
BufferedImage bimage = (BufferedImage) image;
return bimage.getColorModel().hasAlpha();
}
// Use a pixel grabber to retrieve the image's color model;
// grabbing a single pixel is usually sufficient
PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
try {
pg.grabPixels();
} catch (InterruptedException e) {
}
// Get the image's color model
ColorModel cm = pg.getColorModel();
return cm.hasAlpha();
}

public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
ImageMain.setup();
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
}

About ashokabhat

I am a C,C ,JAVA,Adobe Flex,.NET Programmer Currently working as a Software Developer
This entry was posted in Uncategorized. Bookmark the permalink.

4 Responses to How to Implement PDF to Image Convertion in java

  1. IvoHaImg says:

    The conversion above into PNG file is better then into JPG file, but there would be fine to catch heigher DPI. Is it a possibility to increase quality of result png file? Thanks.

  2. zarfishan1983 says:

    I have found java code for converting all or specific pdf pages to png image here its an online converter that uses not only java but also other languages to convert pdf pages to other formats. here is the code. Enjoy:

    Convert particular PDF page to PNG Image

    [Java]

    //open document
    com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document(“input.pdf”);
    // create stream object to save the output image
    java.io.OutputStream imageStream = new java.io.FileOutputStream(“Converted_Image.png”);

    //create Resolution object
    com.aspose.pdf.Resolution resolution = new com.aspose.pdf.Resolution(300);
    //create PngDevice object with particular resolution
    com.aspose.pdf.PngDevice pngDevice = new com.aspose.pdf.PngDevice(resolution);
    //convert a particular page and save the image to stream
    pngDevice.process(pdfDocument.getPages().get_Item(1), imageStream);

    //close the stream
    imageStream.close();

    Convert all PDF pages to PNG Images

    [Java]

    //open document
    com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document(“input.pdf”);

    // loop through all the pages of PDF file
    for (int pageCount = 1; pageCount <= pdfDocument.getPages().size(); pageCount++)
    {
    // create stream object to save the output image
    java.io.OutputStream imageStream = new java.io.FileOutputStream("Converted_Image" + pageCount + ".png");

    //create Resolution object
    com.aspose.pdf.Resolution resolution = new com.aspose.pdf.Resolution(300);
    //create PngDevice object with particular resolution
    com.aspose.pdf.PngDevice pngDevice = new com.aspose.pdf.PngDevice(resolution);
    //convert a particular page and save the image to stream
    pngDevice.process(pdfDocument.getPages().get_Item(pageCount), imageStream);

    //close the stream
    imageStream.close();
    }

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s