List of usage examples for org.apache.pdfbox.pdmodel.common PDStream getMetadata
public PDMetadata getMetadata()
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; }