/**
  * Creates an attribute object.
  *
  * @param dictionary the dictionary
  * @return the attribute object
  */
 public static PDAttributeObject create(COSDictionary dictionary) {
   String owner = dictionary.getNameAsString(COSName.O);
   if (PDUserAttributeObject.OWNER_USER_PROPERTIES.equals(owner)) {
     return new PDUserAttributeObject(dictionary);
   } else if (PDListAttributeObject.OWNER_LIST.equals(owner)) {
     return new PDListAttributeObject(dictionary);
   } else if (PDPrintFieldAttributeObject.OWNER_PRINT_FIELD.equals(owner)) {
     return new PDPrintFieldAttributeObject(dictionary);
   } else if (PDTableAttributeObject.OWNER_TABLE.equals(owner)) {
     return new PDTableAttributeObject(dictionary);
   } else if (PDLayoutAttributeObject.OWNER_LAYOUT.equals(owner)) {
     return new PDLayoutAttributeObject(dictionary);
   } else if (PDExportFormatAttributeObject.OWNER_XML_1_00.equals(owner)
       || PDExportFormatAttributeObject.OWNER_HTML_3_20.equals(owner)
       || PDExportFormatAttributeObject.OWNER_HTML_4_01.equals(owner)
       || PDExportFormatAttributeObject.OWNER_OEB_1_00.equals(owner)
       || PDExportFormatAttributeObject.OWNER_RTF_1_05.equals(owner)
       || PDExportFormatAttributeObject.OWNER_CSS_1_00.equals(owner)
       || PDExportFormatAttributeObject.OWNER_CSS_2_00.equals(owner)) {
     return new PDExportFormatAttributeObject(dictionary);
   }
   return new PDDefaultAttributeObject(dictionary);
 }
 /**
  * This will get the type of PDF object that the actions dictionary describes. If present must be
  * Action for an action dictionary.
  *
  * @return The Type of PDF object.
  */
 public String getType() {
   return action.getNameAsString("Type");
 }
 /**
  * If <b>Filter</b> is not null and the {@link #isFilterRequired()} indicates this entry is a
  * required constraint, then the signature handler specified by this entry shall be used when
  * signing; otherwise, signing shall not take place. If {@link #isFilterRequired()} indicates that
  * this is an optional constraint, this handler may be used if it is available. If it is not
  * available, a different handler may be used instead.
  *
  * @return the filter that shall be used by the signature handler
  */
 public String getFilter() {
   return dictionary.getNameAsString(COSName.FILTER);
 }
 /**
  * This will get the type of action that the actions dictionary describes. If present, must be
  * Action for an action dictionary.
  *
  * @return The S entry of actions dictionary.
  */
 public String getSubType() {
   return action.getNameAsString("S");
 }