import com.groupdocs.metadata.Metadata; import com.groupdocs.metadata.core.FileFormat; import com.groupdocs.metadata.core.IReadOnlyList; import com.groupdocs.metadata.core.MetadataProperty; import com.groupdocs.metadata.core.MetadataPropertyType; import com.groupdocs.metadata.licensing.License; import com.groupdocs.metadata.search.FallsIntoCategorySpecification; import com.groupdocs.metadata.search.OfTypeSpecification; import com.groupdocs.metadata.search.Specification; import com.groupdocs.metadata.tagging.Tags; import java.util.Calendar; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ReadMetadataFromPPTXUsingJava { public static void main(String[] args) { // Set License to avoid the limitations of Metadata library License license = new License(); license.setLicense("GroupDocs.Metadata.lic"); Metadata metadata = new Metadata("input.pptx"); if (metadata.getFileFormat() != FileFormat.Unknown && !metadata.getDocumentInfo().isEncrypted()) { System.out.println(); // Fetch all metadata properties that fall into a particular category IReadOnlyList<MetadataProperty> properties = metadata.findProperties(new FallsIntoCategorySpecification(Tags.getContent())); System.out.println("The metadata properties describing some characteristics of the file content: title, keywords, language, etc."); for (MetadataProperty property : properties) { System.out.println(String.format("Property name: %s, Property value: %s", property.getName(), property.getValue())); } // Fetch all properties having a specific type and value int year = Calendar.getInstance().get(Calendar.YEAR); properties = metadata.findProperties(new OfTypeSpecification(MetadataPropertyType.DateTime).and(new ReadMetadataFromPPTXUsingJava().new YearMatchSpecification(year))); System.out.println("All datetime properties with the year value equal to the current year"); for (MetadataProperty property : properties) { System.out.println(String.format("Property name: %s, Property value: %s", property.getName(), property.getValue())); } // Fetch all properties whose names match the specified regex Pattern pattern = Pattern.compile("^author|company|(.+date.*)$", Pattern.CASE_INSENSITIVE); properties = metadata.findProperties(new ReadMetadataFromPPTXUsingJava().new RegexSpecification(pattern)); System.out.println(String.format("All properties whose names match the following regex: %s", pattern.pattern())); for (MetadataProperty property : properties) { System.out.println(String.format("Property name: %s, Property value: %s", property.getName(), property.getValue())); } } } // Define your own specifications to filter metadata properties public class YearMatchSpecification extends Specification { public YearMatchSpecification(int year) { setValue(year); } public final int getValue() { return auto_Value; } private void setValue(int value) { auto_Value = value; } private int auto_Value; public boolean isSatisfiedBy(MetadataProperty candidate) { Date date = candidate.getValue().toClass(Date.class); if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return getValue() == calendar.get(Calendar.YEAR); } return false; } } public class RegexSpecification extends Specification { private Pattern pattern; public RegexSpecification(Pattern pattern) { this.pattern = pattern; } @Override public boolean isSatisfiedBy(MetadataProperty metadataProperty) { Matcher matcher = pattern.matcher(metadataProperty.getName()); return matcher.find(); } } }