1 26 27 package it.stefanochizzolini.clown.documents.contents.xObjects; 28 29 import it.stefanochizzolini.clown.documents.contents.ContentStream; 30 import it.stefanochizzolini.clown.documents.contents.IContentStreamContext; 31 import it.stefanochizzolini.clown.documents.contents.Resources; 32 import it.stefanochizzolini.clown.documents.Document; 33 import it.stefanochizzolini.clown.files.File; 34 import it.stefanochizzolini.clown.objects.IPdfNumber; 35 import it.stefanochizzolini.clown.objects.PdfArray; 36 import it.stefanochizzolini.clown.objects.PdfDictionary; 37 import it.stefanochizzolini.clown.objects.PdfDirectObject; 38 import it.stefanochizzolini.clown.objects.PdfName; 39 import it.stefanochizzolini.clown.objects.PdfRectangle; 40 import it.stefanochizzolini.clown.objects.PdfReference; 41 import it.stefanochizzolini.clown.util.NotImplementedException; 42 43 46 public class FormXObject 47 extends XObject 48 implements IContentStreamContext 49 { 50 public FormXObject( 54 Document context 55 ) 56 { 57 super(context); 58 59 PdfDictionary header = getBaseDataObject().getHeader(); 60 header.put( 61 PdfName.Subtype, 62 PdfName.Form 63 ); 64 header.put( 65 PdfName.BBox, 66 new PdfRectangle(0,0,0,0) 67 ); 68 69 Resources resources = context.getResources(); 70 if(resources != null) 71 header.put( 72 PdfName.Resources, 73 resources.getBaseObject() 74 ); 75 } 76 77 81 public FormXObject( 82 PdfDirectObject baseObject 83 ) 84 {super(baseObject);} 85 87 public Object clone( 90 Document context 91 ) 92 {throw new NotImplementedException();} 93 94 97 public ContentStream getContent( 98 ) 99 { 100 return new ContentStream( 101 getBaseObject(), 102 this 103 ); 104 } 105 106 public double getHeight( 107 ) 108 { 109 return ((IPdfNumber)File.resolve( 110 ((PdfArray)File.resolve( 111 getBaseDataObject().getHeader().get(PdfName.BBox) 112 )).get(3) 113 )).getNumberValue(); 114 } 115 116 119 public Resources getResources( 120 ) 121 { 122 return new Resources( 123 getBaseDataObject().getHeader().get(PdfName.Resources), 124 ((PdfReference)getBaseObject()).getIndirectObject() 125 ); 126 } 127 128 public double getWidth( 129 ) 130 { 131 return ((IPdfNumber)File.resolve( 132 ((PdfArray)File.resolve( 133 getBaseDataObject().getHeader().get(PdfName.BBox) 134 )).get(2) 135 )).getNumberValue(); 136 } 137 138 public void setHeight( 139 double value 140 ) 141 { 142 PdfDirectObject box = getBaseDataObject().getHeader().get(PdfName.BBox); 144 PdfDirectObject height = ((PdfArray)File.resolve(box)).get(3); 145 146 ((IPdfNumber)File.resolve(height)).setNumberValue(value); 148 149 if(File.update(height)) 151 return; 152 File.update(box); 153 } 154 155 158 public void setResources( 159 Resources value 160 ) 161 { 162 getBaseDataObject().getHeader().put( 163 PdfName.Resources, 164 value.getBaseObject() 165 ); 166 } 167 168 public void setWidth( 169 double value 170 ) 171 { 172 PdfDirectObject box = getBaseDataObject().getHeader().get(PdfName.BBox); 174 PdfDirectObject width = ((PdfArray)File.resolve(box)).get(2); 175 176 ((IPdfNumber)File.resolve(width)).setNumberValue(value); 178 179 if(File.update(width)) 181 return; 182 File.update(box); 183 } 184 186 public PdfArray getContextBox( 189 ) 190 { 191 return (PdfArray)File.resolve(getBaseDataObject().getHeader().get(PdfName.BBox)); } 193 194 public PdfDictionary getContextResources( 195 ) 196 { 197 PdfDirectObject resources = getBaseDataObject().getHeader().get(PdfName.Resources); 198 if(resources == null) 199 throw new NotImplementedException("Non-independent form XObjects [PDF:1.1-] are NOT supported due to their stupid messy dependency coupling (see [PDF:1.6:4.9.1])."); 200 201 return (PdfDictionary)File.resolve(resources); 202 } 203 } | Popular Tags |