Example usage for org.apache.pdfbox.pdmodel.common PDStream getMetadata

List of usage examples for org.apache.pdfbox.pdmodel.common PDStream getMetadata

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel.common PDStream getMetadata.

Prototype

public PDMetadata getMetadata() 

Source Link

Document

Get the metadata that is part of the document catalog.

Usage

From source file:net.padaf.preflight.font.AbstractFontValidator.java

License:Apache License

/**
 * Type0, Type1 and TrueType FontValidatir call this method to check the
 * FontFile meta data./* ww  w.  j a  v  a  2s . co m*/
 * 
 * @param fontDesc
 *          The FontDescriptor which contains the FontFile stream
 * @param fontFile
 *          The font file stream to check
 * @return true if the meta data is valid, false otherwise
 * @throws ValidationException when checking fails
 */
protected boolean checkFontFileMetaData(PDFontDescriptor fontDesc, PDStream fontFile)
        throws ValidationException {
    PDMetadata metadata = fontFile.getMetadata();
    if (metadata != null) {
        // --- Filters are forbidden in a XMP stream
        if (metadata.getFilters() != null && !metadata.getFilters().isEmpty()) {
            fontContainer.addError(new ValidationError(ValidationConstants.ERROR_SYNTAX_STREAM_INVALID_FILTER,
                    "Filter specified in font file metadata dictionnary"));
            return false;
        }

        // --- extract the meta data content
        byte[] mdAsBytes = null;
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            InputStream metaDataContent = metadata.createInputStream();
            IOUtils.copyLarge(metaDataContent, bos);
            IOUtils.closeQuietly(metaDataContent);
            IOUtils.closeQuietly(bos);
            mdAsBytes = bos.toByteArray();
        } catch (IOException e) {
            throw new ValidationException("Unable to read font metadata due to : " + e.getMessage(), e);
        }

        try {

            XMPDocumentBuilder xmpBuilder = new XMPDocumentBuilder();
            XMPMetadata xmpMeta = xmpBuilder.parse(mdAsBytes);

            FontMetaDataValidation fontMDval = new FontMetaDataValidation();
            List<ValidationError> ve = new ArrayList<ValidationError>();
            boolean isVal = fontMDval.analyseFontName(xmpMeta, fontDesc, ve);
            isVal = isVal && fontMDval.analyseFontName(xmpMeta, fontDesc, ve);
            for (ValidationError validationError : ve) {
                fontContainer.addError(validationError);
            }
            return isVal;

        } catch (XmpUnknownValueTypeException e) {
            fontContainer.addError(
                    new ValidationError(ValidationConstants.ERROR_METADATA_UNKNOWN_VALUETYPE, e.getMessage()));
            return false;
        } catch (XmpParsingException e) {
            fontContainer
                    .addError(new ValidationError(ValidationConstants.ERROR_METADATA_FORMAT, e.getMessage()));
            return false;
        } catch (XmpSchemaException e) {
            fontContainer
                    .addError(new ValidationError(ValidationConstants.ERROR_METADATA_FORMAT, e.getMessage()));
            return false;
        } catch (XmpExpectedRdfAboutAttribute e) {
            fontContainer.addError(new ValidationError(
                    ValidationConstants.ERROR_METADATA_RDF_ABOUT_ATTRIBUTE_MISSING, e.getMessage()));
            return false;
        } catch (BadFieldValueException e) {
            fontContainer.addError(new ValidationError(
                    ValidationConstants.ERROR_METADATA_CATEGORY_PROPERTY_INVALID, e.getMessage()));
            return false;
        } catch (XmpXpacketEndException e) {
            throw new ValidationException("Unable to parse font metadata due to : " + e.getMessage(), e);
        }
    }

    // --- No MetaData, valid
    return true;
}

From source file:org.apache.padaf.preflight.font.AbstractFontValidator.java

License:Apache License

/**
 * Type0, Type1 and TrueType FontValidatir call this method to check the
 * FontFile meta data.//w  w w. ja va2  s  . c  om
 * 
 * @param fontDesc
 *          The FontDescriptor which contains the FontFile stream
 * @param fontFile
 *          The font file stream to check
 * @return true if the meta data is valid, false otherwise
 * @throws ValidationException when checking fails
 */
protected boolean checkFontFileMetaData(PDFontDescriptor fontDesc, PDStream fontFile)
        throws ValidationException {
    PDMetadata metadata = null;
    try {
        metadata = fontFile.getMetadata();
    } catch (IllegalStateException e) {
        fontContainer.addError(new ValidationError(ValidationConstants.ERROR_METADATA_FORMAT_UNKOWN,
                "The Metadata entry doesn't reference a stream object"));
        return false;
    }
    if (metadata != null) {
        // --- Filters are forbidden in a XMP stream
        if (metadata.getFilters() != null && !metadata.getFilters().isEmpty()) {
            fontContainer.addError(new ValidationError(ValidationConstants.ERROR_SYNTAX_STREAM_INVALID_FILTER,
                    "Filter specified in font file metadata dictionnary"));
            return false;
        }

        // --- extract the meta data content
        byte[] mdAsBytes = null;
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            InputStream metaDataContent = metadata.createInputStream();
            IOUtils.copyLarge(metaDataContent, bos);
            IOUtils.closeQuietly(metaDataContent);
            IOUtils.closeQuietly(bos);
            mdAsBytes = bos.toByteArray();
        } catch (IOException e) {
            throw new ValidationException("Unable to read font metadata due to : " + e.getMessage(), e);
        }

        try {

            XMPDocumentBuilder xmpBuilder = new XMPDocumentBuilder();
            XMPMetadata xmpMeta = xmpBuilder.parse(mdAsBytes);

            FontMetaDataValidation fontMDval = new FontMetaDataValidation();
            List<ValidationError> ve = new ArrayList<ValidationError>();
            boolean isVal = fontMDval.analyseFontName(xmpMeta, fontDesc, ve);
            isVal = isVal & fontMDval.analyseRights(xmpMeta, fontDesc, ve);
            for (ValidationError validationError : ve) {
                fontContainer.addError(validationError);
            }
            return isVal;

        } catch (XmpUnknownValueTypeException e) {
            fontContainer.addError(
                    new ValidationError(ValidationConstants.ERROR_METADATA_UNKNOWN_VALUETYPE, e.getMessage()));
            return false;
        } catch (XmpParsingException e) {
            fontContainer
                    .addError(new ValidationError(ValidationConstants.ERROR_METADATA_FORMAT, e.getMessage()));
            return false;
        } catch (XmpSchemaException e) {
            fontContainer
                    .addError(new ValidationError(ValidationConstants.ERROR_METADATA_FORMAT, e.getMessage()));
            return false;
        } catch (XmpExpectedRdfAboutAttribute e) {
            fontContainer.addError(new ValidationError(
                    ValidationConstants.ERROR_METADATA_RDF_ABOUT_ATTRIBUTE_MISSING, e.getMessage()));
            return false;
        } catch (BadFieldValueException e) {
            fontContainer.addError(new ValidationError(
                    ValidationConstants.ERROR_METADATA_CATEGORY_PROPERTY_INVALID, e.getMessage()));
            return false;
        } catch (XmpXpacketEndException e) {
            throw new ValidationException("Unable to parse font metadata due to : " + e.getMessage(), e);
        }
    }

    // --- No MetaData, valid
    return true;
}