Search in sources :

Example 86 with ValidationError

use of org.apache.pdfbox.preflight.ValidationResult.ValidationError in project pdfbox by apache.

the class LinkAnnotationValidator method checkDest.

/**
 * Check if the Dest element is authorized according to the A entry
 *
 * @return if the Dest element is authorized according to the A entry.
 */
protected boolean checkDest() {
    try {
        if (this.pdLink.getDestination() != null && this.pdLink.getAction() != null) {
            ctx.addValidationError(new ValidationError(ERROR_ANNOT_FORBIDDEN_DEST, "Dest can't be used due to A element"));
            return false;
        }
        COSDictionary dict = pdLink.getCOSObject();
        COSBase dest = dict.getDictionaryObject(COSName.DEST);
        if (dest != null) {
            ContextHelper.validateElement(ctx, dest, DESTINATION_PROCESS);
        }
    } catch (IOException e) {
        ctx.addValidationError(new ValidationError(ERROR_ANNOT_INVALID_DEST, e.getMessage(), e));
        return false;
    }
    return true;
}
Also used : COSDictionary(org.apache.pdfbox.cos.COSDictionary) COSBase(org.apache.pdfbox.cos.COSBase) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError) IOException(java.io.IOException)

Example 87 with ValidationError

use of org.apache.pdfbox.preflight.ValidationResult.ValidationError in project pdfbox by apache.

the class Validator_A1b method runSimple.

private static int runSimple(File file) throws IOException {
    ValidationResult result;
    PreflightParser parser = new PreflightParser(file);
    try {
        parser.parse();
        PreflightDocument document = parser.getPreflightDocument();
        document.validate();
        result = document.getResult();
        document.close();
    } catch (SyntaxValidationException e) {
        result = e.getResult();
    }
    if (result.isValid()) {
        System.out.println("The file " + file.getName() + " is a valid PDF/A-1b file");
        System.out.println();
        return 0;
    } else {
        System.out.println("The file " + file.getName() + " is not a valid PDF/A-1b file, error(s) :");
        for (ValidationError error : result.getErrorsList()) {
            System.out.print(error.getErrorCode() + " : " + error.getDetails());
            if (error.getPageNumber() != null) {
                System.out.println(" on page " + (error.getPageNumber() + 1));
            } else {
                System.out.println();
            }
        }
        System.out.println();
        return -1;
    }
}
Also used : SyntaxValidationException(org.apache.pdfbox.preflight.exception.SyntaxValidationException) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError) PreflightParser(org.apache.pdfbox.preflight.parser.PreflightParser)

Example 88 with ValidationError

use of org.apache.pdfbox.preflight.ValidationResult.ValidationError in project pdfbox by apache.

the class MetadataValidationProcess method checkThumbnails.

// check thumbnails. See Bavaria Testsuite file PDFA_Conference_2009_nc.pdf for an example.
private void checkThumbnails(PreflightContext ctx, XMPMetadata metadata) {
    XMPBasicSchema xmp = metadata.getXMPBasicSchema();
    if (xmp == null) {
        return;
    }
    List<ThumbnailType> tbProp;
    try {
        tbProp = xmp.getThumbnailsProperty();
    } catch (BadFieldValueException e) {
        // should not happen here because it would have happened in XmpParser already
        addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_FORMAT, e.getMessage(), e));
        return;
    }
    if (tbProp == null) {
        return;
    }
    for (ThumbnailType tb : tbProp) {
        checkThumbnail(tb, ctx);
    }
}
Also used : BadFieldValueException(org.apache.xmpbox.type.BadFieldValueException) XMPBasicSchema(org.apache.xmpbox.schema.XMPBasicSchema) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError) ThumbnailType(org.apache.xmpbox.type.ThumbnailType)

Example 89 with ValidationError

use of org.apache.pdfbox.preflight.ValidationResult.ValidationError in project pdfbox by apache.

the class MetadataValidationProcess method validate.

@Override
public void validate(PreflightContext ctx) throws ValidationException {
    try {
        PDDocument document = ctx.getDocument();
        InputStream is = getXpacket(document.getDocument());
        DomXmpParser builder = new DomXmpParser();
        XMPMetadata metadata = builder.parse(is);
        is.close();
        ctx.setMetadata(metadata);
        // 6.7.5 no deprecated attribute in xpacket processing instruction
        if (metadata.getXpacketBytes() != null) {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_XPACKET_DEPRECATED, "bytes attribute is forbidden"));
        }
        if (metadata.getXpacketEncoding() != null) {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_XPACKET_DEPRECATED, "encoding attribute is forbidden"));
        }
        checkThumbnails(ctx, metadata);
        // Call metadata synchronization checking
        addValidationErrors(ctx, new SynchronizedMetaDataValidation().validateMetadataSynchronization(document, metadata));
        // Call PDF/A Identifier checking
        addValidationErrors(ctx, new PDFAIdentificationValidation().validatePDFAIdentifer(metadata));
        // Call rdf:about checking
        try {
            new RDFAboutAttributeConcordanceValidation().validateRDFAboutAttributes(metadata);
        } catch (DifferentRDFAboutException e) {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_RDF_ABOUT_ATTRIBUTE_INEQUAL_VALUE, e.getMessage(), e));
        }
    } catch (XpacketParsingException e) {
        if (e.getError() != null) {
            addValidationError(ctx, e.getError());
        } else {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_MAIN, "Unexpected error", e));
        }
    } catch (XmpParsingException e) {
        if (e.getErrorType() == ErrorType.NoValueType) {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_UNKNOWN_VALUETYPE, e.getMessage(), e));
        } else if (e.getErrorType() == ErrorType.RequiredProperty) {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_PROPERTY_MISSING, e.getMessage(), e));
        } else if (e.getErrorType() == ErrorType.InvalidPrefix) {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_ABSENT_DESCRIPTION_SCHEMA, e.getMessage(), e));
        } else if (e.getErrorType() == ErrorType.InvalidType) {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_PROPERTY_UNKNOWN, e.getMessage(), e));
        } else if (e.getErrorType() == ErrorType.XpacketBadEnd) {
            throw new ValidationException("Unable to parse font metadata due to : " + e.getMessage(), e);
        } else if (e.getErrorType() == ErrorType.NoSchema) {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_ABSENT_DESCRIPTION_SCHEMA, e.getMessage(), e));
        } else if (e.getErrorType() == ErrorType.InvalidPdfaSchema) {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_WRONG_NS_URI, e.getMessage(), e));
        } else {
            addValidationError(ctx, new ValidationError(PreflightConstants.ERROR_METADATA_FORMAT, e.getMessage(), e));
        }
    } catch (IOException e) {
        throw new ValidationException("Failed while validating", e);
    }
}
Also used : XpacketParsingException(org.apache.pdfbox.preflight.metadata.XpacketParsingException) ValidationException(org.apache.pdfbox.preflight.exception.ValidationException) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) IOException(java.io.IOException) RDFAboutAttributeConcordanceValidation(org.apache.pdfbox.preflight.metadata.RDFAboutAttributeConcordanceValidation) XmpParsingException(org.apache.xmpbox.xml.XmpParsingException) SynchronizedMetaDataValidation(org.apache.pdfbox.preflight.metadata.SynchronizedMetaDataValidation) XMPMetadata(org.apache.xmpbox.XMPMetadata) DomXmpParser(org.apache.xmpbox.xml.DomXmpParser) DifferentRDFAboutException(org.apache.pdfbox.preflight.metadata.RDFAboutAttributeConcordanceValidation.DifferentRDFAboutException) PDDocument(org.apache.pdfbox.pdmodel.PDDocument) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError) PDFAIdentificationValidation(org.apache.pdfbox.preflight.metadata.PDFAIdentificationValidation)

Example 90 with ValidationError

use of org.apache.pdfbox.preflight.ValidationResult.ValidationError in project pdfbox by apache.

the class MetadataValidationProcess method getXpacket.

/**
 * Return the xpacket from the dictionary's stream
 */
private static InputStream getXpacket(COSDocument cdocument) throws IOException, XpacketParsingException {
    COSObject catalog = cdocument.getCatalog();
    COSBase cb = catalog.getDictionaryObject(COSName.METADATA);
    if (cb == null) {
        // missing Metadata Key in catalog
        ValidationError error = new ValidationError(PreflightConstants.ERROR_METADATA_FORMAT, "Missing Metadata Key in catalog");
        throw new XpacketParsingException("Failed while retrieving xpacket", error);
    }
    // no filter key
    COSDictionary metadataDictionnary = COSUtils.getAsDictionary(cb, cdocument);
    if (metadataDictionnary.getItem(COSName.FILTER) != null) {
        // should not be defined
        ValidationError error = new ValidationError(PreflightConstants.ERROR_SYNTAX_STREAM_INVALID_FILTER, "Filter specified in metadata dictionnary");
        throw new XpacketParsingException("Failed while retrieving xpacket", error);
    }
    if (!(metadataDictionnary instanceof COSStream)) {
        // missing Metadata Key in catalog
        ValidationError error = new ValidationError(PreflightConstants.ERROR_METADATA_FORMAT, "Metadata is not a stream");
        throw new XpacketParsingException("Failed while retrieving xpacket", error);
    }
    COSStream stream = (COSStream) metadataDictionnary;
    return stream.createInputStream();
}
Also used : XpacketParsingException(org.apache.pdfbox.preflight.metadata.XpacketParsingException) COSStream(org.apache.pdfbox.cos.COSStream) COSDictionary(org.apache.pdfbox.cos.COSDictionary) COSObject(org.apache.pdfbox.cos.COSObject) COSBase(org.apache.pdfbox.cos.COSBase) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError)

Aggregations

ValidationError (org.apache.pdfbox.preflight.ValidationResult.ValidationError)108 COSBase (org.apache.pdfbox.cos.COSBase)36 COSDictionary (org.apache.pdfbox.cos.COSDictionary)28 IOException (java.io.IOException)27 COSDocument (org.apache.pdfbox.cos.COSDocument)13 COSObject (org.apache.pdfbox.cos.COSObject)13 COSArray (org.apache.pdfbox.cos.COSArray)10 COSStream (org.apache.pdfbox.cos.COSStream)10 COSString (org.apache.pdfbox.cos.COSString)8 PDColorSpace (org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace)8 ValidationException (org.apache.pdfbox.preflight.exception.ValidationException)8 COSName (org.apache.pdfbox.cos.COSName)7 COSObjectKey (org.apache.pdfbox.cos.COSObjectKey)7 PreflightPath (org.apache.pdfbox.preflight.PreflightPath)6 InputStream (java.io.InputStream)5 ArrayList (java.util.ArrayList)5 PDStream (org.apache.pdfbox.pdmodel.common.PDStream)5 PreflightParser (org.apache.pdfbox.preflight.parser.PreflightParser)5 DublinCoreSchema (org.apache.xmpbox.schema.DublinCoreSchema)5 PDDocument (org.apache.pdfbox.pdmodel.PDDocument)4