Search in sources :

Example 1 with MissingResourceException

use of com.tom_roush.pdfbox.pdmodel.MissingResourceException in project PdfBox-Android by TomRoush.

the class PDColorSpace method create.

/**
 * Creates a color space given a name or array. Abbreviated device color names are not supported
 * here, please replace them first. This method is for PDFBox internal use only, others should
 * use {@link #create(COSBase, PDResources)}.
 *
 * @param colorSpace the color space COS object
 * @param resources the current resources.
 * @param wasDefault if current color space was used by a default color space.
 * @return a new color space.
 * @throws MissingResourceException if the color space is missing in the resources dictionary
 * @throws IOException if the color space is unknown or cannot be created.
 */
public static PDColorSpace create(COSBase colorSpace, PDResources resources, boolean wasDefault) throws IOException {
    if (colorSpace instanceof COSObject) {
        return createFromCOSObject((COSObject) colorSpace, resources);
    } else if (colorSpace instanceof COSName) {
        COSName name = (COSName) colorSpace;
        // default color spaces
        if (resources != null) {
            COSName defaultName = null;
            if (name.equals(COSName.DEVICECMYK) && resources.hasColorSpace(COSName.DEFAULT_CMYK)) {
                defaultName = COSName.DEFAULT_CMYK;
            } else if (name.equals(COSName.DEVICERGB) && resources.hasColorSpace(COSName.DEFAULT_RGB)) {
                defaultName = COSName.DEFAULT_RGB;
            } else if (name.equals(COSName.DEVICEGRAY) && resources.hasColorSpace(COSName.DEFAULT_GRAY)) {
                defaultName = COSName.DEFAULT_GRAY;
            }
            if (resources.hasColorSpace(defaultName) && !wasDefault) {
                return resources.getColorSpace(defaultName, true);
            }
        }
        // built-in color spaces
        if (name == COSName.DEVICECMYK) {
            // return PDDeviceCMYK.INSTANCE;
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.DEVICERGB) {
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.DEVICEGRAY) {
            return PDDeviceGray.INSTANCE;
        } else if (name == COSName.PATTERN) {
            // return new PDPattern(resources);
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (resources != null) {
            if (!resources.hasColorSpace(name)) {
                throw new MissingResourceException("Missing color space: " + name.getName());
            }
            return resources.getColorSpace(name);
        } else {
            throw new MissingResourceException("Unknown color space: " + name.getName());
        }
    } else if (colorSpace instanceof COSArray) {
        COSArray array = (COSArray) colorSpace;
        if (array.size() == 0) {
            throw new IOException("Colorspace array is empty");
        }
        COSBase base = array.getObject(0);
        if (!(base instanceof COSName)) {
            throw new IOException("First element in colorspace array must be a name");
        }
        COSName name = (COSName) base;
        if (name == COSName.CALGRAY) {
            // return new PDCalGray(array); TODO: PdfBox-Android
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.CALRGB) {
            // return new PDCalRGB(array);
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.DEVICEN) {
            // return new PDDeviceN(array);
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.INDEXED) {
            // return new PDIndexed(array);
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.SEPARATION) {
            // return new PDSeparation(array);
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.ICCBASED) {
            // return PDICCBased.create(array, resources);
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.LAB) {
            // return new PDLab(array);
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.PATTERN) {
            if (array.size() == 1) {
            // return new PDPattern(resources);
            } else {
            // return new PDPattern(resources, PDColorSpace.create(array.get(1)));
            }
            Log.e("PdfBox-Android", "Unsupported color space kind: " + name + ". Will try DeviceRGB instead");
            return PDDeviceRGB.INSTANCE;
        } else if (name == COSName.DEVICECMYK || name == COSName.DEVICERGB || name == COSName.DEVICEGRAY) {
            // not allowed in an array, but we sometimes encounter these regardless
            return create(name, resources, wasDefault);
        } else {
            throw new IOException("Invalid color space kind: " + name);
        }
    } else {
        throw new IOException("Expected a name or array but got: " + colorSpace);
    }
}
Also used : COSName(com.tom_roush.pdfbox.cos.COSName) COSArray(com.tom_roush.pdfbox.cos.COSArray) COSObject(com.tom_roush.pdfbox.cos.COSObject) MissingResourceException(com.tom_roush.pdfbox.pdmodel.MissingResourceException) COSBase(com.tom_roush.pdfbox.cos.COSBase) IOException(java.io.IOException)

Example 2 with MissingResourceException

use of com.tom_roush.pdfbox.pdmodel.MissingResourceException in project PdfBox-Android by TomRoush.

the class DrawObject method process.

@Override
public void process(Operator operator, List<COSBase> operands) throws IOException {
    if (operands.isEmpty()) {
        throw new MissingOperandException(operator, operands);
    }
    COSBase base0 = operands.get(0);
    if (!(base0 instanceof COSName)) {
        return;
    }
    COSName objectName = (COSName) base0;
    PDXObject xobject = context.getResources().getXObject(objectName);
    if (xobject == null) {
        throw new MissingResourceException("Missing XObject: " + objectName.getName());
    } else if (xobject instanceof PDImageXObject) {
        PDImageXObject image = (PDImageXObject) xobject;
        context.drawImage(image);
    } else if (xobject instanceof PDFormXObject) {
        try {
            context.increaseLevel();
            if (context.getLevel() > 25) {
                Log.e("PdfBox-Android", "recursion is too deep, skipping form XObject");
                return;
            }
            PDFormXObject form = (PDFormXObject) xobject;
            if (form instanceof PDTransparencyGroup) {
                context.showTransparencyGroup((PDTransparencyGroup) form);
            } else {
                context.showForm(form);
            }
        } finally {
            context.decreaseLevel();
        }
    }
}
Also used : PDTransparencyGroup(com.tom_roush.pdfbox.pdmodel.graphics.form.PDTransparencyGroup) PDImageXObject(com.tom_roush.pdfbox.pdmodel.graphics.image.PDImageXObject) COSName(com.tom_roush.pdfbox.cos.COSName) MissingOperandException(com.tom_roush.pdfbox.contentstream.operator.MissingOperandException) MissingResourceException(com.tom_roush.pdfbox.pdmodel.MissingResourceException) COSBase(com.tom_roush.pdfbox.cos.COSBase) PDFormXObject(com.tom_roush.pdfbox.pdmodel.graphics.form.PDFormXObject) PDXObject(com.tom_roush.pdfbox.pdmodel.graphics.PDXObject)

Aggregations

COSBase (com.tom_roush.pdfbox.cos.COSBase)2 COSName (com.tom_roush.pdfbox.cos.COSName)2 MissingResourceException (com.tom_roush.pdfbox.pdmodel.MissingResourceException)2 MissingOperandException (com.tom_roush.pdfbox.contentstream.operator.MissingOperandException)1 COSArray (com.tom_roush.pdfbox.cos.COSArray)1 COSObject (com.tom_roush.pdfbox.cos.COSObject)1 PDXObject (com.tom_roush.pdfbox.pdmodel.graphics.PDXObject)1 PDFormXObject (com.tom_roush.pdfbox.pdmodel.graphics.form.PDFormXObject)1 PDTransparencyGroup (com.tom_roush.pdfbox.pdmodel.graphics.form.PDTransparencyGroup)1 PDImageXObject (com.tom_roush.pdfbox.pdmodel.graphics.image.PDImageXObject)1 IOException (java.io.IOException)1