/*
* Copyright 2006-2017 ICEsoft Technologies Canada Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS
* IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.icepdf.core.pobjects;
import org.icepdf.core.pobjects.security.SecurityManager;
import org.icepdf.core.util.Library;
import org.icepdf.core.util.Utils;
import java.util.HashMap;
/**
* <p>This class represents the data stored in a File trailers optional "info"
* entry.</p>
* <p/>
* <p>Any entry whose value is not known should be omitted from the dictionary,
* rather than included with an empty string as its value.</p>
* <p/>
* <p>Some plug-in extensions may choose to permit searches on the contents of the
* document information dictionary. To facilitate browsing and editing, all keys
* in the dictionary are fully spelled out, not abbreviated. New keys should be
* chosen with care so that they make sense to users.</p>
*
* @since 1.1
*/
public class PInfo extends Dictionary {
public static final Name RESOURCES_KEY = new Name("Resources");
public static final Name TITLE_KEY = new Name("Title");
public static final Name AUTHOR_KEY = new Name("Author");
public static final Name SUBJECT_KEY = new Name("Subject");
public static final Name KEYWORDS_KEY = new Name("Keywords");
public static final Name CREATOR_KEY = new Name("Creator");
public static final Name PRODUCER_KEY = new Name("Producer");
public static final Name CREATIONDATE_KEY = new Name("CreationDate");
public static final Name MODDATE_KEY = new Name("ModDate");
public static final Name TRAPPED_KEY = new Name("Trapped");
// security manager need for decrypting strings.
private SecurityManager securityManager;
/**
* Create a new instance of a <code>PInfo</code> object.
*
* @param library document library
* @param entries entries for this object dictionary.
*/
public PInfo(Library library, HashMap entries) {
super(library, entries);
securityManager = library.getSecurityManager();
}
/**
* Gets the value of the custom extension specified by <code>name</code>.
*
* @param name som plug-in extensions name.
* @return value of the plug-in extension.
*/
public Object getCustomExtension(Name name) {
Object value = library.getObject(entries, name);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return Utils.convertStringObject(library, text);
}
return value;
}
/**
* Gets the title of the document.
*
* @return the documents title.
*/
public String getTitle() {
Object value = library.getObject(entries, TITLE_KEY);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return Utils.convertStringObject(library, text);
} else if (value instanceof String) {
return (String) value;
}
return null;
}
/**
* Gets the name of the person who created the document.
*
* @return author name.
*/
public String getAuthor() {
Object value = library.getObject(entries, AUTHOR_KEY);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return Utils.convertStringObject(library, text);
} else if (value instanceof String) {
return (String) value;
}
return null;
}
/**
* Gets the subject of the document.
*
* @return documents subject.
*/
public String getSubject() {
Object value = library.getObject(entries, SUBJECT_KEY);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return Utils.convertStringObject(library, text);
} else if (value instanceof String) {
return (String) value;
}
return null;
}
/**
* Gets the keywords associated with the document.
*
* @return documents keywords.
*/
public String getKeywords() {
Object value = library.getObject(entries, KEYWORDS_KEY);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return Utils.convertStringObject(library, text);
} else if (value instanceof String) {
return (String) value;
}
return null;
}
/**
* Gets the name of the application. If the PDF document was converted from
* another format that <b>created</b> the original document.
*
* @return creator name.
*/
public String getCreator() {
Object value = library.getObject(entries, CREATOR_KEY);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return Utils.convertStringObject(library, text);
} else if (value instanceof String) {
return (String) value;
}
return null;
}
/**
* Gets the name of the application. If the PDF document was converted from
* another format that <b>converted</b> the original document.
*
* @return producer name.
*/
public String getProducer() {
Object value = library.getObject(entries, PRODUCER_KEY);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return Utils.convertStringObject(library, text);
} else if (value instanceof String) {
return (String) value;
}
return null;
}
/**
* Gets the date and time the document was created.
*
* @return creation date.
*/
public PDate getCreationDate() {
Object value = library.getObject(entries, CREATIONDATE_KEY);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return new PDate(securityManager, text.getDecryptedLiteralString(securityManager));
}
return null;
}
/**
* Gets the date and time the document was most recently modified.
*
* @return modification date.
*/
public PDate getModDate() {
Object value = library.getObject(entries, MODDATE_KEY);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return new PDate(securityManager, text.getDecryptedLiteralString(securityManager));
}
return null;
}
/**
* Get the name object indicating whether the document has been modified to
* include trapping information:
* <ul>
* <li><b>False</b> - The document has not yet been trapped; any desired
* trapping must still be done.</li>
* <li><b>Unknown</b> - (default) Either it is unknown whether the document has
* been trapped or it has been partly but not yet fully
* trapped; some additional trapping may still be needed.</li>
* </ul>
*
* @return trapped name.
*/
public String getTrappingInformation() {
Object value = library.getObject(entries, TRAPPED_KEY);
if (value != null && value instanceof StringObject) {
StringObject text = (StringObject) value;
return Utils.convertStringObject(library, text);
} else if (value instanceof String) {
return (String) value;
}
return null;
}
}