use of org.apache.pdfbox.preflight.PreflightPath in project pdfbox by apache.
the class GraphicObjectPageValidationProcess method validate.
@Override
public void validate(PreflightContext context) throws ValidationException {
PreflightPath vPath = context.getValidationPath();
XObjectValidator validator = null;
if (!vPath.isEmpty() && vPath.isExpectedType(PDImageXObject.class)) {
validator = new XObjImageValidator(context, (PDImageXObject) vPath.peek());
} else if (!vPath.isEmpty() && vPath.isExpectedType(PDFormXObject.class)) {
validator = new XObjFormValidator(context, (PDFormXObject) vPath.peek());
} else if (!vPath.isEmpty() && vPath.isExpectedType(PDPostScriptXObject.class)) {
validator = new XObjPostscriptValidator(context, (PDPostScriptXObject) vPath.peek());
} else if (!vPath.isEmpty() && vPath.isExpectedType(COSStream.class)) {
context.addValidationError(new ValidationError(PreflightConstants.ERROR_GRAPHIC_XOBJECT_INVALID_TYPE, "Invalid XObject subtype"));
} else {
context.addValidationError(new ValidationError(PreflightConstants.ERROR_GRAPHIC_MISSING_OBJECT, "Graphic validation process needs at least one PDXObject"));
}
if (validator != null) {
validator.validate();
}
}
use of org.apache.pdfbox.preflight.PreflightPath in project pdfbox by apache.
the class SinglePageValidationProcess method validate.
@Override
public void validate(PreflightContext context) throws ValidationException {
PreflightPath vPath = context.getValidationPath();
if (vPath.isEmpty()) {
return;
}
if (!vPath.isExpectedType(PDPage.class)) {
addValidationError(context, new ValidationError(PreflightConstants.ERROR_PDF_PROCESSING_MISSING, "Page validation required at least a PDPage"));
} else {
PDPage page = (PDPage) vPath.peek();
validateActions(context, page);
validateAnnotation(context, page);
validateColorSpaces(context, page);
validateResources(context, page);
validateGraphicObjects(context, page);
validateGroupTransparency(context, page);
// TODO
// add MetaData validation ?
validateContent(context, page);
}
}
use of org.apache.pdfbox.preflight.PreflightPath in project pdfbox by apache.
the class Type3FontValidator method getWidthFromCharProc.
/**
* Parse the Glyph description to obtain the Width
*
* @return the width of the character
*/
private float getWidthFromCharProc(PDType3CharProc charProc) throws IOException {
PreflightPath vPath = context.getValidationPath();
PreflightType3Stream parser = new PreflightType3Stream(context, vPath.getClosestPathElement(PDPage.class), charProc);
parser.showType3Character(charProc);
return parser.getWidth();
}
use of org.apache.pdfbox.preflight.PreflightPath in project pdfbox by apache.
the class StandardColorSpaceHelper method processDefaultColorSpace.
/**
* Look up in the closest PDResources objects if there are a default ColorSpace. If there are, check that is a
* authorized ColorSpace.
*
* @param colorSpace
* @return true if the default colorspace is a right one, false otherwise.
*/
protected boolean processDefaultColorSpace(PDColorSpace colorSpace) {
boolean result = false;
// get default color space
PreflightPath vPath = context.getValidationPath();
PDResources resources = vPath.getClosestPathElement(PDResources.class);
if (resources != null) {
PDColorSpace defaultCS = null;
try {
if (colorSpace.getName().equals(ColorSpaces.DeviceCMYK.getLabel()) && resources.hasColorSpace(COSName.DEFAULT_CMYK)) {
defaultCS = resources.getColorSpace(COSName.DEFAULT_CMYK);
} else if (colorSpace.getName().equals(ColorSpaces.DeviceRGB.getLabel()) && resources.hasColorSpace(COSName.DEFAULT_RGB)) {
defaultCS = resources.getColorSpace(COSName.DEFAULT_RGB);
} else if (colorSpace.getName().equals(ColorSpaces.DeviceGray.getLabel()) && resources.hasColorSpace(COSName.DEFAULT_GRAY)) {
defaultCS = resources.getColorSpace(COSName.DEFAULT_GRAY);
}
} catch (IOException e) {
context.addValidationError(new ValidationError(ERROR_GRAPHIC_INVALID_COLOR_SPACE, "Unable to read default color space : " + e.getMessage(), e));
}
if (defaultCS != null) {
// defaultCS is valid if the number of errors hasn't changed
int nbOfErrors = context.getDocument().getResult().getErrorsList().size();
processAllColorSpace(defaultCS);
int newNbOfErrors = context.getDocument().getResult().getErrorsList().size();
result = (nbOfErrors == newNbOfErrors);
}
}
return result;
}
use of org.apache.pdfbox.preflight.PreflightPath in project pdfbox by apache.
the class DestinationValidationProcess method validate.
@Override
public void validate(PreflightContext ctx) throws ValidationException {
PreflightPath vPath = ctx.getValidationPath();
if (vPath.isEmpty()) {
return;
}
if (!vPath.isExpectedType(COSBase.class)) {
ctx.addValidationError(new ValidationResult.ValidationError(PreflightConstants.ERROR_ACTION_INVALID_TYPE, "Destination validation process needs at least one COSBase object"));
return;
}
COSBase dest = (COSBase) vPath.peek();
// "A destination may be specified either explicitly by
// an array of parameters defining its properties or indirectly by name."
COSDocument cosDocument = ctx.getDocument().getDocument();
if (!(dest instanceof COSName || COSUtils.isString(dest, cosDocument) || COSUtils.isArray(dest, cosDocument))) {
ctx.addValidationError(new ValidationResult.ValidationError(ERROR_SYNTAX_DICT_INVALID, "Destination type entry " + dest.getClass().getSimpleName() + " is invalid"));
return;
}
if (dest instanceof COSArray) {
COSArray ar = (COSArray) dest;
if (ar.size() < 2) {
ctx.addValidationError(new ValidationResult.ValidationError(ERROR_SYNTAX_DICT_INVALID, "Destination array must have at least 2 elements"));
return;
}
if (!(ar.get(1) instanceof COSName)) {
ctx.addValidationError(new ValidationResult.ValidationError(ERROR_SYNTAX_DICT_INVALID, "Second element of destination array must be a name"));
return;
}
validateExplicitDestination(ctx, ar);
}
try {
PDDestination.create(dest);
} catch (IOException e) {
ctx.addValidationError(new ValidationResult.ValidationError(PreflightConstants.ERROR_SYNTAX_DICT_INVALID, e.getMessage(), e));
}
}
Aggregations