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.COSDictionary; 36 import org.pdfbox.cos.COSFloat; 37 import org.pdfbox.cos.COSName; 38 import org.pdfbox.pdmodel.common.PDRange; 39 40 46 public abstract class PDDictionaryFunction extends PDFunction 47 { 48 private COSDictionary function = null; 49 50 57 protected PDDictionaryFunction( int functionType ) 58 { 59 function = new COSDictionary(); 60 function.setInt( "FunctionType", functionType ); 61 } 62 63 68 public PDDictionaryFunction( COSDictionary functionDictionary ) 69 { 70 function = functionDictionary; 71 } 72 73 76 public COSBase getCOSObject() 77 { 78 return function; 79 } 80 81 86 public COSDictionary getCOSDictionary() 87 { 88 return function; 89 } 90 91 private COSArray getRangeArray( String fieldName, int n ) 92 { 93 COSArray rangeArray = (COSArray)function.getDictionaryObject( COSName.getPDFName( "Range" ) ); 94 if( rangeArray == null ) 95 { 96 rangeArray = new COSArray(); 97 function.setItem( fieldName, rangeArray ); 98 while( rangeArray.size() < n*2 ) 99 { 100 rangeArray.add( new COSFloat( 0 ) ); 101 rangeArray.add( new COSFloat( 0 ) ); 102 } 103 } 104 return rangeArray; 105 } 106 107 110 public int getNumberOfOutputParameters() 111 { 112 COSArray array = getRangeArray( "Range", 0 ); 113 return array.size() / 2; 114 } 115 116 119 public PDRange getRangeForOutput( int n ) 120 { 121 COSArray rangeArray = getRangeArray( "Range", n ); 122 return new PDRange( rangeArray, n ); 123 } 124 125 128 public void setRangeForOutput( PDRange range, int n ) 129 { 130 COSArray rangeArray = getRangeArray("Range", n ); 131 rangeArray.set( n*2, new COSFloat( range.getMin() ) ); 132 rangeArray.set( n*2+1, new COSFloat( range.getMax() ) ); 133 } 134 135 138 public int getNumberOfInputParameters() 139 { 140 COSArray array = getRangeArray( "Domain", 0 ); 141 return array.size() / 2; 142 } 143 144 147 public PDRange getDomainForInput( int n ) 148 { 149 COSArray rangeArray = getRangeArray( "Domain", n ); 150 return new PDRange( rangeArray, n ); 151 } 152 153 156 public void setDomainForInput( PDRange range, int n ) 157 { 158 COSArray rangeArray = getRangeArray("Domain", n ); 159 rangeArray.set( n*2, new COSFloat( range.getMin() ) ); 160 rangeArray.set( n*2+1, new COSFloat( range.getMax() ) ); 161 } 162 } | Popular Tags |