use of org.apache.pdfbox.pdmodel.MissingResourceException in project pdfbox by apache.
the class DrawObject method process.
@Override
public void process(Operator operator, List<COSBase> operands) throws IOException {
if (operands.size() < 1) {
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 PDTransparencyGroup) {
getContext().showTransparencyGroup((PDTransparencyGroup) xobject);
} else if (xobject instanceof PDFormXObject) {
getContext().showForm((PDFormXObject) xobject);
}
}
use of org.apache.pdfbox.pdmodel.MissingResourceException in project pdfbox by apache.
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;
} 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);
} 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);
} else if (name == COSName.CALRGB) {
return new PDCalRGB(array);
} else if (name == COSName.DEVICEN) {
return new PDDeviceN(array);
} else if (name == COSName.INDEXED) {
return new PDIndexed(array, resources);
} else if (name == COSName.SEPARATION) {
return new PDSeparation(array);
} else if (name == COSName.ICCBASED) {
return new PDICCBased(array);
} else if (name == COSName.LAB) {
return new PDLab(array);
} else if (name == COSName.PATTERN) {
if (array.size() == 1) {
return new PDPattern(resources);
} else {
return new PDPattern(resources, PDColorSpace.create(array.get(1)));
}
} 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);
}
}
Aggregations