Example usage for org.apache.pdfbox.pdmodel.common.function PDFunction create

List of usage examples for org.apache.pdfbox.pdmodel.common.function PDFunction create

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel.common.function PDFunction create.

Prototype

public static PDFunction create(COSBase function) throws IOException 

Source Link

Document

Create the correct PD Model function based on the COS base function.

Usage

From source file:org.apache.fop.render.pdf.pdfbox.PSPDFGraphics2D.java

License:Apache License

private 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))));
        }/* w  w w.ja va 2 s.c  o m*/
        return new Function(null, null, targetFunctions, toList(bounds), null);
    } 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 encode = (COSArray) s.getDictionaryObject(COSName.ENCODE);
        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);
        byte[] x = IOUtils.toByteArray(stream.getUnfilteredStream());
        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());
}