in src/java/org/apache/fop/render/pdf/pdfbox/PSPDFGraphics2D.java [258:299]
protected static Function getFunction(PDFunction f) throws IOException {
if (f instanceof PDFunctionType3) {
PDFunctionType3 sourceFT3 = (PDFunctionType3) f;
float[] bounds = sourceFT3.getBounds().toFloatArray();
COSArray sourceFunctions = sourceFT3.getFunctions();
List<Function> targetFunctions = new ArrayList<Function>();
for (int j = 0; j < sourceFunctions.size(); j++) {
targetFunctions.add(getFunction(PDFunction.create(sourceFunctions.get(j))));
}
float[] encode = sourceFT3.getEncode().toFloatArray();
return new Function(null, null, targetFunctions, toList(bounds), floatArrayToDoubleList(encode));
} else if (f instanceof PDFunctionType2) {
PDFunctionType2 sourceFT2 = (PDFunctionType2) f;
double interpolation = (double)sourceFT2.getN();
float[] c0 = sourceFT2.getC0().toFloatArray();
float[] c1 = sourceFT2.getC1().toFloatArray();
return new Function(null, null, c0, c1, interpolation);
} else if (f instanceof PDFunctionType0) {
COSDictionary s = f.getCOSObject();
assert s instanceof COSStream;
COSStream stream = (COSStream) s;
COSArray domain = (COSArray) s.getDictionaryObject(COSName.DOMAIN);
COSArray range = (COSArray) s.getDictionaryObject(COSName.RANGE);
int bits = ((COSInteger)s.getDictionaryObject(COSName.BITS_PER_SAMPLE)).intValue();
COSArray size = (COSArray) s.getDictionaryObject(COSName.SIZE);
COSArray encode = getEncode(s);
byte[] x = IOUtils.toByteArray(stream.createInputStream());
for (byte y : x) {
if (y != 0) {
return new Function(floatArrayToDoubleList(domain.toFloatArray()),
floatArrayToDoubleList(range.toFloatArray()),
floatArrayToDoubleList(encode.toFloatArray()),
x,
bits,
toList(size)
);
}
}
return null;
}
throw new IOException("Unsupported " + f.toString());
}