package uk.co.mmscomputing.imageio.pdf;
import java.io.*;
import java.util.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import javax.imageio.spi.*;
import javax.imageio.stream.*;
import javax.imageio.metadata.*;
public class PDFImageReader extends ImageReader{
private Vector images;
protected PDFImageReader(ImageReaderSpi originatingProvider){
super(originatingProvider);
}
public BufferedImage read(int imageIndex, ImageReadParam param)throws IOException{
readImages();
checkIndex(imageIndex);
return (BufferedImage)images.elementAt(imageIndex);
}
public int getHeight(int imageIndex)throws IOException{
readImages();
checkIndex(imageIndex);
return ((BufferedImage)images.elementAt(imageIndex)).getHeight();
}
public int getWidth(int imageIndex)throws IOException{
readImages();
checkIndex(imageIndex);
return ((BufferedImage)images.elementAt(imageIndex)).getWidth();
}
public Iterator getImageTypes(int imageIndex)throws IOException{
readImages();
checkIndex(imageIndex);
ImageTypeSpecifier imageType = null;
java.util.List l = new ArrayList();
imageType=ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
l.add(imageType);
return l.iterator();
}
public int getNumImages(boolean allowSearch)throws IOException{
readImages();
return images.size();
}
public IIOMetadata getImageMetadata(int imageIndex)throws IOException{
readImages();
checkIndex(imageIndex);
return null;
}
public IIOMetadata getStreamMetadata() throws IOException{
return null;
}
private void checkIndex(int imageIndex) {
if (imageIndex > images.size()) {
throw new IndexOutOfBoundsException("\n"+getClass().getName()+".checkIndex:\n\tBad index in image reader");
}
}
private void readImages()throws IOException{
if(images==null){
try{
images = new Vector();
PDFFile file = new PDFFile();
file.read((ImageInputStream)getInput());
int index = 0;
while(true){
BufferedImage image=file.getImage(index);
if(image==null){break;}
images.add(image);
index++;
}
}catch(Exception e){
e.printStackTrace();
throw new IOException(getClass().getName()+".readImages:\n\t"+e);
}
}
}
}