package uk.co.mmscomputing.imageio.pdf;
import java.io.*;
import java.util.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.imageio.spi.*;
import javax.imageio.stream.*;
import javax.imageio.metadata.*;
public class PDFImageWriter extends ImageWriter{
private PDFFile pdffile;
private int index = 0;
protected PDFImageWriter(ImageWriterSpi originatingProvider){
super(originatingProvider);
}
public IIOMetadata convertImageMetadata(IIOMetadata inData, ImageTypeSpecifier imageType, ImageWriteParam param){
return null;
}
public IIOMetadata convertStreamMetadata(IIOMetadata inData,ImageWriteParam param){
return null;
}
public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType,ImageWriteParam param){
return null;
}
public IIOMetadata getDefaultStreamMetadata(ImageWriteParam param){
return null;
}
public ImageWriteParam getDefaultWriteParam(){
return new PDFImageWriteParam(getLocale());
}
public boolean canInsertImage(int imageIndex)throws IOException{
super.canInsertImage(imageIndex);
return (imageIndex==0); // use sequence for more than one picture
}
public void write(IIOMetadata streamMetadata,IIOImage img,ImageWriteParam param)throws IOException{
prepareWriteSequence(streamMetadata);
writeToSequence(img,param); // just one page !
endWriteSequence();
}
public boolean canWriteSequence(){
return true;
}
/*
private void writeln(String line)throws IOException{
out.write(line.getBytes());
out.write('\n');
}
*/
public void prepareWriteSequence(IIOMetadata streamMetadata)throws IOException{
pdffile=new PDFFile();
}
public void writeToSequence(IIOImage img,ImageWriteParam param)throws IOException{
if(!(img.getRenderedImage() instanceof BufferedImage)){
throw new IOException(getClass().getName()+".writeToSequence:\n\tCan only write BufferedImage objects");
}
BufferedImage image=(BufferedImage)img.getRenderedImage();
PDFPage page = pdffile.getNewPage();
String name = "image"+(index++);
page.addImage(name,image);
}
public void endWriteSequence()throws IOException{
ByteArrayOutputStream baos=new ByteArrayOutputStream();
pdffile.write(baos);
ImageOutputStream ios=(ImageOutputStream)getOutput();
ios.write(baos.toByteArray());
ios.flush();
ios.close();
}
}