Search in sources :

Example 1 with PreflightPath

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();
    }
}
Also used : XObjFormValidator(org.apache.pdfbox.preflight.xobject.XObjFormValidator) PDImageXObject(org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) PDPostScriptXObject(org.apache.pdfbox.pdmodel.graphics.PDPostScriptXObject) XObjImageValidator(org.apache.pdfbox.preflight.xobject.XObjImageValidator) XObjectValidator(org.apache.pdfbox.preflight.xobject.XObjectValidator) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError) XObjPostscriptValidator(org.apache.pdfbox.preflight.xobject.XObjPostscriptValidator) PreflightPath(org.apache.pdfbox.preflight.PreflightPath)

Example 2 with PreflightPath

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);
    }
}
Also used : PDPage(org.apache.pdfbox.pdmodel.PDPage) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError) PreflightPath(org.apache.pdfbox.preflight.PreflightPath)

Example 3 with PreflightPath

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();
}
Also used : PDPage(org.apache.pdfbox.pdmodel.PDPage) PreflightType3Stream(org.apache.pdfbox.preflight.font.util.PreflightType3Stream) PreflightPath(org.apache.pdfbox.preflight.PreflightPath)

Example 4 with PreflightPath

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;
}
Also used : PDResources(org.apache.pdfbox.pdmodel.PDResources) IOException(java.io.IOException) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError) PreflightPath(org.apache.pdfbox.preflight.PreflightPath) PDColorSpace(org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)

Example 5 with PreflightPath

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));
    }
}
Also used : COSName(org.apache.pdfbox.cos.COSName) COSArray(org.apache.pdfbox.cos.COSArray) COSBase(org.apache.pdfbox.cos.COSBase) COSDocument(org.apache.pdfbox.cos.COSDocument) IOException(java.io.IOException) ValidationResult(org.apache.pdfbox.preflight.ValidationResult) PreflightPath(org.apache.pdfbox.preflight.PreflightPath)

Aggregations

PreflightPath (org.apache.pdfbox.preflight.PreflightPath)10 ValidationError (org.apache.pdfbox.preflight.ValidationResult.ValidationError)6 PDPage (org.apache.pdfbox.pdmodel.PDPage)4 IOException (java.io.IOException)2 COSArray (org.apache.pdfbox.cos.COSArray)1 COSBase (org.apache.pdfbox.cos.COSBase)1 COSDictionary (org.apache.pdfbox.cos.COSDictionary)1 COSDocument (org.apache.pdfbox.cos.COSDocument)1 COSName (org.apache.pdfbox.cos.COSName)1 PDResources (org.apache.pdfbox.pdmodel.PDResources)1 PDFont (org.apache.pdfbox.pdmodel.font.PDFont)1 PDPostScriptXObject (org.apache.pdfbox.pdmodel.graphics.PDPostScriptXObject)1 PDColorSpace (org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)1 PDImageXObject (org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject)1 PDShading (org.apache.pdfbox.pdmodel.graphics.shading.PDShading)1 PreflightConfiguration (org.apache.pdfbox.preflight.PreflightConfiguration)1 ValidationResult (org.apache.pdfbox.preflight.ValidationResult)1 PreflightContentStream (org.apache.pdfbox.preflight.content.PreflightContentStream)1 PreflightType3Stream (org.apache.pdfbox.preflight.font.util.PreflightType3Stream)1 ValidationProcess (org.apache.pdfbox.preflight.process.ValidationProcess)1