1 31 package org.pdfbox.pdmodel.common.function; 32 33 import org.pdfbox.cos.COSArray; 34 import org.pdfbox.cos.COSBase; 35 import org.pdfbox.cos.COSFloat; 36 import org.pdfbox.cos.COSName; 37 import org.pdfbox.cos.COSStream; 38 import org.pdfbox.pdmodel.PDDocument; 39 import org.pdfbox.pdmodel.common.PDRange; 40 import org.pdfbox.pdmodel.common.PDStream; 41 42 48 public abstract class PDStreamFunction extends PDFunction 49 { 50 private PDStream function = null; 51 52 60 protected PDStreamFunction( PDDocument doc, int functionType ) 61 { 62 function = new PDStream( doc ); 63 function.getStream().setInt( "FunctionType", functionType ); 64 } 65 66 71 public PDStreamFunction( PDStream functionDictionary ) 72 { 73 function = functionDictionary; 74 } 75 76 81 public COSBase getCOSObject() 82 { 83 return function.getCOSObject(); 84 } 85 86 91 public COSStream getCOSStream() 92 { 93 return function.getStream(); 94 } 95 96 private COSArray getRangeArray( String fieldName, int n ) 97 { 98 COSArray rangeArray = (COSArray)function.getStream().getDictionaryObject( COSName.getPDFName( "Range" ) ); 99 if( rangeArray == null ) 100 { 101 rangeArray = new COSArray(); 102 function.getStream().setItem( fieldName, rangeArray ); 103 while( rangeArray.size() < n*2 ) 104 { 105 rangeArray.add( new COSFloat( 0 ) ); 106 rangeArray.add( new COSFloat( 0 ) ); 107 } 108 } 109 return rangeArray; 110 } 111 112 122 public int getNumberOfOutputParameters() 123 { 124 COSArray array = getRangeArray( "Range", 0 ); 125 return array.size() / 2; 126 } 127 128 137 public PDRange getRangeForOutput( int n ) 138 { 139 COSArray rangeArray = getRangeArray( "Range", n ); 140 return new PDRange( rangeArray, n ); 141 } 142 143 149 public void setRangeForOutput( PDRange range, int n ) 150 { 151 COSArray rangeArray = getRangeArray("Range", n ); 152 rangeArray.set( n*2, new COSFloat( range.getMin() ) ); 153 rangeArray.set( n*2+1, new COSFloat( range.getMax() ) ); 154 } 155 156 163 public int getNumberOfInputParameters() 164 { 165 COSArray array = getRangeArray( "Domain", 0 ); 166 return array.size() / 2; 167 } 168 169 178 public PDRange getDomainForInput( int n ) 179 { 180 COSArray rangeArray = getRangeArray( "Domain", n ); 181 return new PDRange( rangeArray, n ); 182 } 183 184 190 public void setDomainForInput( PDRange range, int n ) 191 { 192 COSArray rangeArray = getRangeArray("Domain", n ); 193 rangeArray.set( n*2, new COSFloat( range.getMin() ) ); 194 rangeArray.set( n*2+1, new COSFloat( range.getMax() ) ); 195 } 196 } | Popular Tags |