1 26 27 package it.stefanochizzolini.clown.objects; 28 29 import it.stefanochizzolini.clown.bytes.IOutputStream; 30 import it.stefanochizzolini.clown.files.File; 31 import it.stefanochizzolini.clown.tokens.Parser; 32 33 import java.text.DecimalFormat ; 34 35 38 public class PdfReference 39 extends PdfDirectObject 40 implements IPdfIndirectObject 41 { 42 private static final DecimalFormat xRefGenerationFormatter; 46 private static final DecimalFormat xRefOffsetFormatter; 47 49 static 51 { 52 xRefGenerationFormatter = new DecimalFormat ("00000"); 53 xRefOffsetFormatter = new DecimalFormat ("0000000000"); 54 } 55 58 private PdfIndirectObject indirectObject; 61 62 private int generationNumber; 63 private int objectNumber; 64 65 private File file; 66 68 PdfReference( 70 PdfIndirectObject indirectObject, 71 int objectNumber, 72 int generationNumber 73 ) 74 { 75 this.indirectObject = indirectObject; 76 77 this.objectNumber = objectNumber; 78 this.generationNumber = generationNumber; 79 } 80 81 87 public PdfReference( 88 Parser.Reference reference, 89 File file 90 ) 91 { 92 this.objectNumber = reference.getObjectNumber(); 93 this.generationNumber = reference.getGenerationNumber(); 94 95 this.file = file; 96 } 97 99 public String getCrossReference( 102 long offset 103 ) 104 { 105 return (xRefOffsetFormatter.format(offset) + " " 106 + xRefGenerationFormatter.format(generationNumber) + " " 107 + getIndirectObject().getUsage() 108 + "\r\n"); 109 } 110 111 @Override  112 public boolean equals( 113 Object object 114 ) 115 { 116 if(!(object instanceof PdfReference)) 117 return false; 118 119 return (getID().equals(((PdfReference)object).getID())); 120 } 121 122 public int getGenerationNumber( 123 ) 124 {return generationNumber;} 125 126 @Override  127 public int hashCode( 128 ) 129 {return getIndirectObject().hashCode();} 130 131 public String getID( 132 ) 133 {return (objectNumber + " " + generationNumber);} 134 135 public String getIndirectReference( 136 ) 137 {return (getID() + " R");} 138 139 public int getObjectNumber( 140 ) 141 {return objectNumber;} 142 143 @Override  144 public String toPdf( 145 ) 146 {return getIndirectReference();} 147 148 @Override  149 public String toString( 150 ) 151 {return getIndirectReference();} 152 153 @Override  155 public Object clone( 156 File context 157 ) 158 {return ((PdfIndirectObject)getIndirectObject().clone(context)).getReference();} 159 160 public void delete( 161 ) 162 {getIndirectObject().delete();} 163 164 public PdfDataObject getDataObject( 165 ) 166 {return getIndirectObject().getDataObject();} 167 168 public PdfIndirectObject getIndirectObject( 169 ) 170 { 171 if(indirectObject == null) 172 indirectObject = file.getIndirectObjects().get(objectNumber); 173 174 return indirectObject; 175 } 176 177 public PdfReference getReference( 178 ) 179 {return this;} 180 183 @Override  185 int writeTo( 186 IOutputStream stream 187 ) 188 {return stream.write(getIndirectReference());} 189 } | Popular Tags |