1 26 27 package it.stefanochizzolini.clown.files; 28 29 import it.stefanochizzolini.clown.bytes.IInputStream; 30 import it.stefanochizzolini.clown.bytes.IOutputStream; 31 import it.stefanochizzolini.clown.documents.Document; 32 import it.stefanochizzolini.clown.objects.IPdfIndirectObject; 33 import it.stefanochizzolini.clown.objects.PdfDataObject; 34 import it.stefanochizzolini.clown.objects.PdfDictionary; 35 import it.stefanochizzolini.clown.objects.PdfDirectObject; 36 import it.stefanochizzolini.clown.objects.PdfName; 37 import it.stefanochizzolini.clown.objects.PdfObject; 38 import it.stefanochizzolini.clown.objects.PdfReference; 39 import it.stefanochizzolini.clown.tokens.FileFormatException; 40 import it.stefanochizzolini.clown.tokens.Reader; 41 import it.stefanochizzolini.clown.tokens.Writer; 42 import it.stefanochizzolini.clown.tokens.XRefEntry; 43 import it.stefanochizzolini.clown.util.NotImplementedException; 44 45 import java.util.Random ; 46 47 50 public class File 51 { 52 private static Random hashCodeGenerator = new Random (); 56 58 63 public static PdfDataObject resolve( 64 PdfObject object 65 ) 66 { 67 if(object instanceof IPdfIndirectObject) 68 return ((IPdfIndirectObject)object).getDataObject(); 69 else 70 return (PdfDataObject)object; 71 } 72 73 76 public static boolean update( 77 PdfDirectObject object 78 ) 79 { 80 84 if(object instanceof PdfReference) 85 { 86 ((PdfReference)object).getIndirectObject().update(); 87 return true; 88 } 89 90 return false; 91 } 92 96 private Document document; 99 private int hashCode = File.hashCodeGenerator.nextInt(); 100 private IndirectObjects indirectObjects; 101 private Reader reader; 102 private PdfDictionary trailer; 103 private String version; 104 private XRefEntry[] xrefEntries; 105 107 public File( 109 ) 110 { 111 this.version = "1.6"; 112 this.trailer = new PdfDictionary(); 113 this.indirectObjects = new IndirectObjects(this,null); 114 this.document = new Document(this); 115 } 116 117 public File( 118 IInputStream stream 119 ) throws FileFormatException 120 { 121 this.reader = new Reader(stream,this); 122 123 this.version = reader.readVersion(); 124 this.trailer = reader.readTrailer(); 125 126 if(trailer.containsKey(PdfName.Encrypt)) 128 throw new NotImplementedException("Encrypted files are currently not supported."); 129 130 this.xrefEntries = reader.readXRefTable(trailer); 131 this.indirectObjects = new IndirectObjects(this,xrefEntries); 132 this.document = new Document(trailer.get(PdfName.Root)); 133 } 134 136 public Document getDocument( 139 ) 140 {return document;} 141 142 public IndirectObjects getIndirectObjects( 143 ) 144 {return indirectObjects;} 145 146 public Reader getReader( 147 ) 148 {return reader;} 149 150 public PdfDictionary getTrailer( 151 ) 152 {return trailer;} 153 154 public String getVersion( 155 ) 156 {return version;} 157 158 public XRefEntry[] getXRefEntries( 160 ) 161 {return xrefEntries;} 162 163 public int hashCode( 164 ) 165 {return hashCode;} 166 167 171 public void writeTo( 172 IOutputStream stream, 173 SerializationModeEnum mode 174 ) 175 { 176 Writer writer = new Writer(stream,this); 177 178 switch(mode) 179 { 180 case Incremental: 181 if(reader != null) 182 { 183 writer.writeIncremental(); 184 break; 185 } 186 case Standard: 188 writer.writeStandard(); 189 break; 190 case Linearized: 191 throw new NotImplementedException(); 192 } 193 } 194 } | Popular Tags |