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;
}
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;
}
}
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);
}
}
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);
}
}
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();
}
Aggregations