Search in sources :

Example 1 with FontMetaDataValidation

use of org.apache.pdfbox.preflight.font.util.FontMetaDataValidation in project pdfbox by apache.

the class FontDescriptorHelper method checkFontFileMetaData.

/**
 * Type0, Type1 and TrueType FontValidator call this method to check the FontFile meta data.
 *
 * @param fontDescriptor
 *            The FontDescriptor which contains the FontFile stream
 * @param fontFile
 *            The font file stream to check
 */
protected void checkFontFileMetaData(PDFontDescriptor fontDescriptor, PDStream fontFile) {
    try {
        PDMetadata metadata = fontFile.getMetadata();
        if (metadata != null) {
            // Filters are forbidden in a XMP stream
            if (metadata.getFilters() != null && !metadata.getFilters().isEmpty()) {
                this.fContainer.push(new ValidationError(ERROR_SYNTAX_STREAM_INVALID_FILTER, this.font.getName() + ": Filter specified in font file metadata dictionnary"));
                return;
            }
            byte[] mdAsBytes = getMetaDataStreamAsBytes(metadata);
            try {
                DomXmpParser xmpBuilder = new DomXmpParser();
                XMPMetadata xmpMeta = xmpBuilder.parse(mdAsBytes);
                FontMetaDataValidation fontMDval = new FontMetaDataValidation();
                List<ValidationError> ve = new ArrayList<>();
                fontMDval.analyseFontName(xmpMeta, fontDescriptor, ve);
                fontMDval.analyseRights(xmpMeta, fontDescriptor, ve);
                this.fContainer.push(ve);
            } catch (XmpParsingException e) {
                if (e.getErrorType() == ErrorType.NoValueType) {
                    this.fContainer.push(new ValidationError(ERROR_METADATA_UNKNOWN_VALUETYPE, e.getMessage(), e));
                } else if (e.getErrorType() == ErrorType.XpacketBadEnd) {
                    this.fContainer.push(new ValidationError(ERROR_METADATA_FORMAT_XPACKET, this.font.getName() + ": Unable to parse font metadata due to : " + e.getMessage(), e));
                } else {
                    this.fContainer.push(new ValidationError(ERROR_METADATA_FORMAT, e.getMessage(), e));
                }
            }
        }
    } catch (IllegalStateException e) {
        this.fContainer.push(new ValidationError(ERROR_METADATA_FORMAT_UNKOWN, this.font.getName() + ": The Metadata entry doesn't reference a stream object", e));
    }
}
Also used : XmpParsingException(org.apache.xmpbox.xml.XmpParsingException) XMPMetadata(org.apache.xmpbox.XMPMetadata) FontMetaDataValidation(org.apache.pdfbox.preflight.font.util.FontMetaDataValidation) DomXmpParser(org.apache.xmpbox.xml.DomXmpParser) ArrayList(java.util.ArrayList) PDMetadata(org.apache.pdfbox.pdmodel.common.PDMetadata) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError)

Aggregations

ArrayList (java.util.ArrayList)1 PDMetadata (org.apache.pdfbox.pdmodel.common.PDMetadata)1 ValidationError (org.apache.pdfbox.preflight.ValidationResult.ValidationError)1 FontMetaDataValidation (org.apache.pdfbox.preflight.font.util.FontMetaDataValidation)1 XMPMetadata (org.apache.xmpbox.XMPMetadata)1 DomXmpParser (org.apache.xmpbox.xml.DomXmpParser)1 XmpParsingException (org.apache.xmpbox.xml.XmpParsingException)1