Last active
August 29, 2015 14:16
-
-
Save uttesh/d2dc713dbde0175cd2d0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* @author Uttesh Kumar T.H. | |
*/ | |
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.awt.image.*; | |
import java.io.*; | |
import java.nio.ByteBuffer; | |
import java.nio.channels.FileChannel; | |
import javax.imageio.*; | |
import javax.swing.*; | |
public class PdfPageImageGenerator { | |
public static void ImageGenerator() throws IOException { | |
// load a pdf from a byte buffer | |
File file = new File("sample.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++) { | |
PDFPage page = pdffile.getPage(i); | |
Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight()); | |
Image img = page.getImage(rect.width, rect.height, rect, null, true, true); | |
BufferedImage bImg = toBufferedImage(img); | |
File yourImageFile = new File("pics\\page_" + i + ".png"); | |
ImageIO.write(bImg, "png", yourImageFile); | |
} | |
} | |
public static BufferedImage toBufferedImage(Image image) { | |
if (image instanceof BufferedImage) { | |
return (BufferedImage) image; | |
} | |
image = new ImageIcon(image).getImage(); | |
boolean hasAlpha = hasAlpha(image); | |
BufferedImage bimage = null; | |
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); | |
try { | |
int transparency = Transparency.OPAQUE; | |
if (hasAlpha) { | |
transparency = Transparency.BITMASK; | |
} | |
GraphicsDevice gs = ge.getDefaultScreenDevice(); | |
GraphicsConfiguration gc = gs.getDefaultConfiguration(); | |
bimage = gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), transparency); | |
} catch (HeadlessException e) { | |
} | |
if (bimage == null) { | |
int type = BufferedImage.TYPE_INT_RGB; | |
if (hasAlpha) { | |
type = BufferedImage.TYPE_INT_ARGB; | |
} | |
bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type); | |
} | |
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 (image instanceof BufferedImage) { | |
BufferedImage bimage = (BufferedImage) image; | |
return bimage.getColorModel().hasAlpha(); | |
} | |
PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false); | |
try { | |
pg.grabPixels(); | |
} catch (InterruptedException e) { | |
} | |
ColorModel cm = pg.getColorModel(); | |
return cm.hasAlpha(); | |
} | |
public static void main(final String[] args) { | |
new Runnable() { | |
public void run() { | |
try { | |
PdfPageImageGenerator.ImageGenerator(); | |
} catch (IOException ex) { | |
ex.printStackTrace(); | |
} | |
} | |
}.run(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment