package uk.co.mmscomputing.imageio.pdf; import java.io.*; import java.util.*; import javax.imageio.ImageIO; import javax.imageio.stream.ImageInputStream; public class PDFIndirectObject extends PDFObject{ private int objectNumber; private int generationNumber; private int offset; private PDFObject directObject; public PDFIndirectObject(int on,int gn,boolean b){ // read objectNumber = on; generationNumber = gn; directObject = null; // null => don't know yet or not in use offset = -1; } public PDFIndirectObject(int on,PDFObject obj){ // write objectNumber = on; // resource entry index in catalog generationNumber = 0; directObject = obj; offset = -1; } public void setOffset(int v){offset=v;} public void setObjectNumber(int v){objectNumber=v;} public int getObjectNumber(){ return objectNumber;} public void setGenerationNumber(int v){generationNumber=v;} public int getGenerationNumber(){ return generationNumber;} public void setDirectObject(PDFObject v){directObject=v;} public PDFObject getDirectObject(){ return directObject;} public void read(PDFScanner s)throws IOException{ if(s.symbol!=T_INTEGER){throw new IOException(getClass().getName()+".read:\n\tCannot find 'object number'.");} setObjectNumber(s.intval); // System.err.println("obj no "+s.intval); s.scan(); if(s.symbol!=T_INTEGER){throw new IOException(getClass().getName()+".read:\n\tCannot find 'generation number'.");} setGenerationNumber(s.intval); // System.err.println("obj gen "+s.intval); s.scan(); if(s.symbol!=T_OBJ){throw new IOException(getClass().getName()+".read:\n\tCannot find keyword <obj>.");} s.scan(); directObject = PDFObject.readObject(s); if(s.symbol!=T_ENDOBJ){throw new IOException(getClass().getName()+".read:\n\tCannot find keyword <endobj>.");} s.scan(); } public void write(PDFFile out)throws IOException{ if(directObject!=null){ offset=out.getOffset(); out.write(objectNumber);out.write(' '); out.write(generationNumber);out.write(' '); out.writeln("obj"); directObject.write(out); out.writeln("endobj"); } } public String toString(){ String s="\nNo Direct Object\n"; if(directObject!=null){ s =getObjectNumber()+" "+getGenerationNumber()+" obj "; s+=directObject.toString(); s+="endobj "; } return s; } public PDFCrossReferenceEntry getXRefEntry(){ if(directObject!=null){ PDFCrossReferenceEntry entry = new PDFCrossReferenceEntry(objectNumber); entry.setOffset(offset); return entry; }else{ return new PDFCrossReferenceEntry(objectNumber,generationNumber); } } }