aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/pdfbox/cos/COSDictionary.java
diff options
context:
space:
mode:
authortknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2006-12-01 12:20:24 +0000
committertknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2006-12-01 12:20:24 +0000
commit6025b6016517c6d898d8957d1d7e03ba71431912 (patch)
treeb15bd6fa5ffe9588a9bca3f2b8a7e358f83b6eba /src/main/java/org/pdfbox/cos/COSDictionary.java
parentd2c77e820ab4aba8235d71275755021347b3ad10 (diff)
downloadpdf-as-3-6025b6016517c6d898d8957d1d7e03ba71431912.tar.gz
pdf-as-3-6025b6016517c6d898d8957d1d7e03ba71431912.tar.bz2
pdf-as-3-6025b6016517c6d898d8957d1d7e03ba71431912.zip
Initial import of release 2.2.REL-2.2@923
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@4 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
Diffstat (limited to 'src/main/java/org/pdfbox/cos/COSDictionary.java')
-rw-r--r--src/main/java/org/pdfbox/cos/COSDictionary.java1167
1 files changed, 1167 insertions, 0 deletions
diff --git a/src/main/java/org/pdfbox/cos/COSDictionary.java b/src/main/java/org/pdfbox/cos/COSDictionary.java
new file mode 100644
index 0000000..eb92433
--- /dev/null
+++ b/src/main/java/org/pdfbox/cos/COSDictionary.java
@@ -0,0 +1,1167 @@
+/**
+ * Copyright (c) 2003-2005, www.pdfbox.org
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of pdfbox; nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://www.pdfbox.org
+ *
+ */
+package org.pdfbox.cos;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import java.util.Iterator;
+
+import org.pdfbox.exceptions.COSVisitorException;
+
+import org.pdfbox.pdmodel.common.COSObjectable;
+import org.pdfbox.util.DateConverter;
+
+/**
+ * This class represents a dictionary where name/value pairs reside.
+ *
+ * @author Ben Litchfield (ben@csh.rit.edu)
+ * @version $Revision: 1.29 $
+ */
+public class COSDictionary extends COSBase
+{
+ private static final String PATH_SEPARATOR = "/";
+
+ /**
+ * These are all of the items in the dictionary.
+ */
+ private Map items = new HashMap();
+
+ /**
+ * Used to store original sequence of keys, for testing.
+ */
+ private List keys = new ArrayList();
+
+ /**
+ * Constructor.
+ */
+ public COSDictionary()
+ {
+ //default constructor
+ }
+
+ /**
+ * Copy Constructor. This will make a shallow copy of this dictionary.
+ *
+ * @param dict The dictionary to copy.
+ */
+ public COSDictionary( COSDictionary dict )
+ {
+ items = new HashMap( dict.items );
+ keys = new ArrayList( dict.keys );
+ }
+
+ /**
+ * This will return the number of elements in this dictionary.
+ *
+ * @return The number of elements in the dictionary.
+ */
+ public int size()
+ {
+ return keys.size();
+ }
+
+ /**
+ * This will clear all items in the map.
+ */
+ public void clear()
+ {
+ items.clear();
+ keys.clear();
+ }
+
+ /**
+ * This will get an object from this dictionary. If the object is a reference then it will
+ * dereference it and get it from the document. If the object is COSNull then
+ * null will be returned.
+ *
+ * @param key The key to the object that we are getting.
+ *
+ * @return The object that matches the key.
+ */
+ public COSBase getDictionaryObject( String key )
+ {
+ return getDictionaryObject( COSName.getPDFName( key ) );
+ }
+
+ /**
+ * This is a special case of getDictionaryObject that takes multiple keys, it will handle
+ * the situation where multiple keys could get the same value, ie if either CS or ColorSpace
+ * is used to get the colorspace.
+ * This will get an object from this dictionary. If the object is a reference then it will
+ * dereference it and get it from the document. If the object is COSNull then
+ * null will be returned.
+ *
+ * @param keyList The list of keys to find a value.
+ *
+ * @return The object that matches the key.
+ */
+ public COSBase getDictionaryObject( String[] keyList )
+ {
+ COSBase retval = null;
+ for( int i=0; i<keyList.length && retval == null; i++ )
+ {
+ retval = getDictionaryObject( COSName.getPDFName( keyList[i] ) );
+ }
+ return retval;
+ }
+
+ /**
+ * This will get an object from this dictionary. If the object is a reference then it will
+ * dereference it and get it from the document. If the object is COSNull then
+ * null will be returned.
+ *
+ * @param key The key to the object that we are getting.
+ *
+ * @return The object that matches the key.
+ */
+ public COSBase getDictionaryObject( COSName key )
+ {
+ COSBase retval = (COSBase)items.get( key );
+ if( retval instanceof COSObject )
+ {
+ retval = ((COSObject)retval).getObject();
+ }
+ if( retval instanceof COSNull )
+ {
+ retval = null;
+ }
+ return retval;
+ }
+
+ /**
+ * This will set an item in the dictionary. If value is null then the result
+ * will be the same as removeItem( key ).
+ *
+ * @param key The key to the dictionary object.
+ * @param value The value to the dictionary object.
+ */
+ public void setItem( COSName key, COSBase value )
+ {
+ if( value == null )
+ {
+ removeItem( key );
+ }
+ else
+ {
+ if (!items.containsKey(key))
+ {
+ // insert only if not already there
+ keys.add(key);
+ }
+ items.put( key, value );
+ }
+ }
+
+ /**
+ * This will set an item in the dictionary. If value is null then the result
+ * will be the same as removeItem( key ).
+ *
+ * @param key The key to the dictionary object.
+ * @param value The value to the dictionary object.
+ */
+ public void setItem( COSName key, COSObjectable value )
+ {
+ COSBase base = null;
+ if( value != null )
+ {
+ base = value.getCOSObject();
+ }
+ setItem( key, base );
+ }
+
+ /**
+ * This will set an item in the dictionary. If value is null then the result
+ * will be the same as removeItem( key ).
+ *
+ * @param key The key to the dictionary object.
+ * @param value The value to the dictionary object.
+ */
+ public void setItem( String key, COSObjectable value )
+ {
+ setItem( COSName.getPDFName( key ), value );
+ }
+
+ /**
+ * This will set an item in the dictionary.
+ *
+ * @param key The key to the dictionary object.
+ * @param value The value to the dictionary object.
+ */
+ public void setBoolean( String key, boolean value )
+ {
+ setItem( COSName.getPDFName( key ), COSBoolean.getBoolean( value ) );
+ }
+
+ /**
+ * This will set an item in the dictionary.
+ *
+ * @param key The key to the dictionary object.
+ * @param value The value to the dictionary object.
+ */
+ public void setBoolean( COSName key, boolean value )
+ {
+ setItem( key , COSBoolean.getBoolean( value ) );
+ }
+
+ /**
+ * This will set an item in the dictionary. If value is null then the result
+ * will be the same as removeItem( key ).
+ *
+ * @param key The key to the dictionary object.
+ * @param value The value to the dictionary object.
+ */
+ public void setItem( String key, COSBase value )
+ {
+ setItem( COSName.getPDFName( key ), value );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSName
+ * object. If it is null then the object will be removed.
+ *
+ * @param key The key to the object,
+ * @param value The string value for the name.
+ */
+ public void setName( String key, String value )
+ {
+ setName( COSName.getPDFName( key ), value );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSName
+ * object. If it is null then the object will be removed.
+ *
+ * @param key The key to the object,
+ * @param value The string value for the name.
+ */
+ public void setName( COSName key, String value )
+ {
+ COSName name = null;
+ if( value != null )
+ {
+ name = COSName.getPDFName( value );
+ }
+ setItem( key, name );
+ }
+
+ /**
+ * Set the value of a date entry in the dictionary.
+ *
+ * @param key The key to the date value.
+ * @param date The date value.
+ */
+ public void setDate( String key, Calendar date )
+ {
+ setDate( COSName.getPDFName( key ), date );
+ }
+
+ /**
+ * Set the date object.
+ *
+ * @param key The key to the date.
+ * @param date The date to set.
+ */
+ public void setDate( COSName key, Calendar date )
+ {
+ setString( key, DateConverter.toString( date ) );
+ }
+
+ /**
+ * Set the value of a date entry in the dictionary.
+ *
+ * @param embedded The embedded dictionary.
+ * @param key The key to the date value.
+ * @param date The date value.
+ */
+ public void setEmbeddedDate( String embedded, String key, Calendar date )
+ {
+ setEmbeddedDate( embedded, COSName.getPDFName( key ), date );
+ }
+
+ /**
+ * Set the date object.
+ *
+ * @param embedded The embedded dictionary.
+ * @param key The key to the date.
+ * @param date The date to set.
+ */
+ public void setEmbeddedDate( String embedded, COSName key, Calendar date )
+ {
+ COSDictionary dic = (COSDictionary)getDictionaryObject( embedded );
+ if( dic == null && date != null )
+ {
+ dic = new COSDictionary();
+ setItem( embedded, dic );
+ }
+ if( dic != null )
+ {
+ dic.setDate( key, date );
+ }
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSString
+ * object. If it is null then the object will be removed.
+ *
+ * @param key The key to the object,
+ * @param value The string value for the name.
+ */
+ public void setString( String key, String value )
+ {
+ setString( COSName.getPDFName( key ), value );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSString
+ * object. If it is null then the object will be removed.
+ *
+ * @param key The key to the object,
+ * @param value The string value for the name.
+ */
+ public void setString( COSName key, String value )
+ {
+ COSString name = null;
+ if( value != null )
+ {
+ name = new COSString( value );
+ }
+ setItem( key, name );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSString
+ * object. If it is null then the object will be removed.
+ *
+ * @param embedded The embedded dictionary to set the item in.
+ * @param key The key to the object,
+ * @param value The string value for the name.
+ */
+ public void setEmbeddedString( String embedded, String key, String value )
+ {
+ setEmbeddedString( embedded, COSName.getPDFName( key ), value );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSString
+ * object. If it is null then the object will be removed.
+ *
+ * @param embedded The embedded dictionary to set the item in.
+ * @param key The key to the object,
+ * @param value The string value for the name.
+ */
+ public void setEmbeddedString( String embedded, COSName key, String value )
+ {
+ COSDictionary dic = (COSDictionary)getDictionaryObject( embedded );
+ if( dic == null && value != null )
+ {
+ dic = new COSDictionary();
+ setItem( embedded, dic );
+ }
+ if( dic != null )
+ {
+ dic.setString( key, value );
+ }
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSInteger
+ * object.
+ *
+ * @param key The key to the object,
+ * @param value The int value for the name.
+ */
+ public void setInt( String key, int value )
+ {
+ setInt( COSName.getPDFName( key ), value );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSInteger
+ * object.
+ *
+ * @param key The key to the object,
+ * @param value The int value for the name.
+ */
+ public void setInt( COSName key, int value )
+ {
+ COSInteger intVal = null;
+ intVal = new COSInteger(value);
+ setItem( key, intVal );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSInteger
+ * object.
+ *
+ * @param embeddedDictionary The embedded dictionary.
+ * @param key The key to the object,
+ * @param value The int value for the name.
+ */
+ public void setEmbeddedInt( String embeddedDictionary, String key, int value )
+ {
+ setEmbeddedInt( embeddedDictionary, COSName.getPDFName( key ), value );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSInteger
+ * object.
+ *
+ * @param embeddedDictionary The embedded dictionary.
+ * @param key The key to the object,
+ * @param value The int value for the name.
+ */
+ public void setEmbeddedInt( String embeddedDictionary, COSName key, int value )
+ {
+ COSDictionary embedded = (COSDictionary)getDictionaryObject( embeddedDictionary );
+ if( embedded == null )
+ {
+ embedded = new COSDictionary();
+ setItem( embeddedDictionary, embedded );
+ }
+ embedded.setInt( key, value );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSFloat
+ * object.
+ *
+ * @param key The key to the object,
+ * @param value The int value for the name.
+ */
+ public void setFloat( String key, float value )
+ {
+ setFloat( COSName.getPDFName( key ), value );
+ }
+
+ /**
+ * This is a convenience method that will convert the value to a COSFloat
+ * object.
+ *
+ * @param key The key to the object,
+ * @param value The int value for the name.
+ */
+ public void setFloat( COSName key, float value )
+ {
+ COSFloat fltVal = new COSFloat( value );
+ setItem( key, fltVal );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ */
+ public String getNameAsString( String key )
+ {
+ return getNameAsString( COSName.getPDFName( key ) );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ */
+ public String getNameAsString( COSName key )
+ {
+ String retval = null;
+ COSName name = (COSName)getDictionaryObject( key );
+ if( name != null )
+ {
+ retval = name.getName();
+ }
+ return retval;
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The value to return if the dictionary item is null.
+ * @return The name converted to a string.
+ */
+ public String getNameAsString( String key, String defaultValue )
+ {
+ return getNameAsString( COSName.getPDFName( key ), defaultValue );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The value to return if the dictionary item is null.
+ * @return The name converted to a string.
+ */
+ public String getNameAsString( COSName key, String defaultValue )
+ {
+ String retval = getNameAsString( key );
+ if( retval == null )
+ {
+ retval = defaultValue;
+ }
+ return retval;
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ */
+ public String getString( String key )
+ {
+ return getString( COSName.getPDFName( key ) );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ */
+ public String getString( COSName key )
+ {
+ String retval = null;
+ COSString name = (COSString)getDictionaryObject( key );
+ if( name != null )
+ {
+ retval = name.getString();
+ }
+ return retval;
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The default value to return.
+ * @return The name converted to a string.
+ */
+ public String getString( String key, String defaultValue )
+ {
+ return getString( COSName.getPDFName( key ), defaultValue );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The default value to return.
+ * @return The name converted to a string.
+ */
+ public String getString( COSName key, String defaultValue )
+ {
+ String retval = getString( key );
+ if( retval == null )
+ {
+ retval = defaultValue;
+ }
+ return retval;
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param embedded The embedded dictionary.
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ */
+ public String getEmbeddedString( String embedded, String key )
+ {
+ return getEmbeddedString( embedded, COSName.getPDFName( key ), null );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param embedded The embedded dictionary.
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ */
+ public String getEmbeddedString( String embedded, COSName key )
+ {
+ return getEmbeddedString( embedded, key, null );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param embedded The embedded dictionary.
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The default value to return.
+ * @return The name converted to a string.
+ */
+ public String getEmbeddedString( String embedded, String key, String defaultValue )
+ {
+ return getEmbeddedString( embedded, COSName.getPDFName( key ), defaultValue );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param embedded The embedded dictionary.
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The default value to return.
+ * @return The name converted to a string.
+ */
+ public String getEmbeddedString( String embedded, COSName key, String defaultValue )
+ {
+ String retval = defaultValue;
+ COSDictionary dic = (COSDictionary)getDictionaryObject( embedded );
+ if( dic != null )
+ {
+ retval = dic.getString( key, defaultValue );
+ }
+ return retval;
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ * @throws IOException If there is an error converting to a date.
+ */
+ public Calendar getDate( String key ) throws IOException
+ {
+ return getDate( COSName.getPDFName( key ) );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ *
+ * @throws IOException If there is an error converting to a date.
+ */
+ public Calendar getDate( COSName key ) throws IOException
+ {
+ COSString date = (COSString)getDictionaryObject( key );
+ return DateConverter.toCalendar( date );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a date. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The default value to return.
+ * @return The name converted to a string.
+ * @throws IOException If there is an error converting to a date.
+ */
+ public Calendar getDate( String key, Calendar defaultValue ) throws IOException
+ {
+ return getDate( COSName.getPDFName( key ), defaultValue );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a date. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The default value to return.
+ * @return The name converted to a string.
+ * @throws IOException If there is an error converting to a date.
+ */
+ public Calendar getDate( COSName key, Calendar defaultValue ) throws IOException
+ {
+ Calendar retval = getDate( key );
+ if( retval == null )
+ {
+ retval = defaultValue;
+ }
+ return retval;
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param embedded The embedded dictionary to get.
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ * @throws IOException If there is an error converting to a date.
+ */
+ public Calendar getEmbeddedDate( String embedded, String key ) throws IOException
+ {
+ return getEmbeddedDate( embedded, COSName.getPDFName( key ), null );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a name and convert it to a string. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param embedded The embedded dictionary to get.
+ * @param key The key to the item in the dictionary.
+ * @return The name converted to a string.
+ *
+ * @throws IOException If there is an error converting to a date.
+ */
+ public Calendar getEmbeddedDate( String embedded, COSName key ) throws IOException
+ {
+ return getEmbeddedDate( embedded, key, null );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a date. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param embedded The embedded dictionary to get.
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The default value to return.
+ * @return The name converted to a string.
+ * @throws IOException If there is an error converting to a date.
+ */
+ public Calendar getEmbeddedDate( String embedded, String key, Calendar defaultValue ) throws IOException
+ {
+ return getEmbeddedDate( embedded, COSName.getPDFName( key ), defaultValue );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a date. Null is returned
+ * if the entry does not exist in the dictionary.
+ *
+ * @param embedded The embedded dictionary to get.
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The default value to return.
+ * @return The name converted to a string.
+ * @throws IOException If there is an error converting to a date.
+ */
+ public Calendar getEmbeddedDate( String embedded, COSName key, Calendar defaultValue ) throws IOException
+ {
+ Calendar retval = defaultValue;
+ COSDictionary eDic = (COSDictionary)getDictionaryObject( embedded );
+ if( eDic != null )
+ {
+ retval = eDic.getDate( key, defaultValue );
+ }
+ return retval;
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a cos boolean and convert it to a primitive boolean.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The value returned if the entry is null.
+ *
+ * @return The value converted to a boolean.
+ */
+ public boolean getBoolean( String key, boolean defaultValue )
+ {
+ return getBoolean( COSName.getPDFName( key ), defaultValue );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a COSBoolean and convert it to a primitive boolean.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The value returned if the entry is null.
+ *
+ * @return The entry converted to a boolean.
+ */
+ public boolean getBoolean( COSName key, boolean defaultValue )
+ {
+ boolean retval = defaultValue;
+ COSBoolean bool = (COSBoolean)getDictionaryObject( key );
+ if( bool != null )
+ {
+ retval = bool.getValue();
+ }
+ return retval;
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be an int. -1 is returned if there is no value.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The integer value.
+ */
+ public int getInt( String key )
+ {
+ return getInt( COSName.getPDFName( key ) );
+ }
+
+ /**
+ * Get an integer from an embedded dictionary. Useful for 1-1 mappings. default:-1
+ *
+ * @param embeddedDictionary The name of the embedded dictionary.
+ * @param key The key in the embedded dictionary.
+ *
+ * @return The value of the embedded integer.
+ */
+ public int getEmbeddedInt( String embeddedDictionary, String key )
+ {
+ return getEmbeddedInt( embeddedDictionary, COSName.getPDFName( key ) );
+ }
+
+ /**
+ * Get an integer from an embedded dictionary. Useful for 1-1 mappings. default:-1
+ *
+ * @param embeddedDictionary The name of the embedded dictionary.
+ * @param key The key in the embedded dictionary.
+ *
+ * @return The value of the embedded integer.
+ */
+ public int getEmbeddedInt( String embeddedDictionary, COSName key )
+ {
+ return getEmbeddedInt( embeddedDictionary, key, -1 );
+ }
+
+ /**
+ * Get an integer from an embedded dictionary. Useful for 1-1 mappings.
+ *
+ * @param embeddedDictionary The name of the embedded dictionary.
+ * @param key The key in the embedded dictionary.
+ * @param defaultValue The value if there is no embedded dictionary or it does not contain the key.
+ *
+ * @return The value of the embedded integer.
+ */
+ public int getEmbeddedInt( String embeddedDictionary, String key, int defaultValue )
+ {
+ return getEmbeddedInt( embeddedDictionary, COSName.getPDFName( key ), defaultValue );
+ }
+
+
+ /**
+ * Get an integer from an embedded dictionary. Useful for 1-1 mappings.
+ *
+ * @param embeddedDictionary The name of the embedded dictionary.
+ * @param key The key in the embedded dictionary.
+ * @param defaultValue The value if there is no embedded dictionary or it does not contain the key.
+ *
+ * @return The value of the embedded integer.
+ */
+ public int getEmbeddedInt( String embeddedDictionary, COSName key, int defaultValue )
+ {
+ int retval = defaultValue;
+ COSDictionary embedded = (COSDictionary)getDictionaryObject( embeddedDictionary );
+ if( embedded != null )
+ {
+ retval = embedded.getInt( key, defaultValue );
+ }
+ return retval;
+ }
+
+
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be an int. -1 is returned if there is no value.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The integer value..
+ */
+ public int getInt( COSName key )
+ {
+ return getInt( key, -1 );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be an integer. If the dictionary value is null then the
+ * default Value will be returned.
+ *
+ * @param keyList The key to the item in the dictionary.
+ * @param defaultValue The value to return if the dictionary item is null.
+ * @return The integer value.
+ */
+ public int getInt( String[] keyList, int defaultValue )
+ {
+ int retval = defaultValue;
+ COSNumber obj = (COSNumber)getDictionaryObject( keyList );
+ if( obj != null )
+ {
+ retval = obj.intValue();
+ }
+ return retval;
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be an integer. If the dictionary value is null then the
+ * default Value will be returned.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The value to return if the dictionary item is null.
+ * @return The integer value.
+ */
+ public int getInt( String key, int defaultValue )
+ {
+ return getInt( new String []{ key }, defaultValue );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be an integer. If the dictionary value is null then the
+ * default Value will be returned.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The value to return if the dictionary item is null.
+ * @return The integer value.
+ */
+ public int getInt( COSName key, int defaultValue )
+ {
+ return getInt(key.getName(), defaultValue );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be an int. -1 is returned if there is no value.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The float value.
+ */
+ public float getFloat( String key )
+ {
+ return getFloat( COSName.getPDFName( key ) );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be an float. -1 is returned if there is no value.
+ *
+ * @param key The key to the item in the dictionary.
+ * @return The float value.
+ */
+ public float getFloat( COSName key )
+ {
+ return getFloat( key, -1 );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be a float. If the dictionary value is null then the
+ * default Value will be returned.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The value to return if the dictionary item is null.
+ * @return The float value.
+ */
+ public float getFloat( String key, float defaultValue )
+ {
+ return getFloat( COSName.getPDFName( key ), defaultValue );
+ }
+
+ /**
+ * This is a convenience method that will get the dictionary object that
+ * is expected to be an float. If the dictionary value is null then the
+ * default Value will be returned.
+ *
+ * @param key The key to the item in the dictionary.
+ * @param defaultValue The value to return if the dictionary item is null.
+ * @return The float value.
+ */
+ public float getFloat( COSName key, float defaultValue )
+ {
+ float retval = defaultValue;
+ COSNumber obj = (COSNumber)getDictionaryObject( key );
+ if( obj != null )
+ {
+ retval = obj.floatValue();
+ }
+ return retval;
+ }
+
+ /**
+ * This will remove an item for the dictionary. This
+ * will do nothing of the object does not exist.
+ *
+ * @param key The key to the item to remove from the dictionary.
+ */
+ public void removeItem( COSName key )
+ {
+ keys.remove( key );
+ items.remove( key );
+ }
+
+ /**
+ * This will do a lookup into the dictionary.
+ *
+ * @param key The key to the object.
+ *
+ * @return The item that matches the key.
+ */
+ public COSBase getItem( COSName key )
+ {
+ return (COSBase)items.get( key );
+ }
+
+
+
+
+
+ /**
+ * This will get the keys for all objects in the dictionary in the sequence that
+ * they were added.
+ *
+ * @return a list of the keys in the sequence of insertion
+ *
+ */
+ public List keyList()
+ {
+ return keys;
+ }
+
+ /**
+ * This will get all of the values for the dictionary.
+ *
+ * @return All the values for the dictionary.
+ */
+ public Collection getValues()
+ {
+ return items.values();
+ }
+
+ /**
+ * visitor pattern double dispatch method.
+ *
+ * @param visitor The object to notify when visiting this object.
+ * @return The object that the visitor returns.
+ *
+ * @throws COSVisitorException If there is an error visiting this object.
+ */
+ public Object accept(ICOSVisitor visitor) throws COSVisitorException
+ {
+ return visitor.visitFromDictionary(this);
+ }
+
+ /**
+ * This will add all of the dictionarys keys/values to this dictionary.
+ *
+ * @param dic The dic to get the keys from.
+ */
+ public void addAll( COSDictionary dic )
+ {
+ Iterator dicKeys = dic.keyList().iterator();
+ while( dicKeys.hasNext() )
+ {
+ COSName key = (COSName)dicKeys.next();
+ COSBase value = dic.getItem( key );
+ setItem( key, value );
+ }
+ }
+
+ /**
+ * This will add all of the dictionarys keys/values to this dictionary, but only
+ * if they don't already exist. If a key already exists in this dictionary then
+ * nothing is changed.
+ *
+ * @param dic The dic to get the keys from.
+ */
+ public void mergeInto( COSDictionary dic )
+ {
+ Iterator dicKeys = dic.keyList().iterator();
+ while( dicKeys.hasNext() )
+ {
+ COSName key = (COSName)dicKeys.next();
+ COSBase value = dic.getItem( key );
+ if( getItem( key ) == null )
+ {
+ setItem( key, value );
+ }
+ }
+ }
+
+ /**
+ * Nice method, gives you every object you want
+ * Arrays works properly too. Try "P/Annots/[k]/Rect"
+ * where k means the index of the Annotsarray.
+ *
+ * @param objPath the relative path to the object.
+ * @return the object
+ */
+ public COSBase getObjectFromPath(String objPath)
+ {
+ COSBase retval = null;
+ String[] path = objPath.split(PATH_SEPARATOR);
+ retval = this;
+
+ for (int i = 0; i < path.length; i++)
+ {
+ if(retval instanceof COSArray)
+ {
+ int idx = new Integer(path[i].replaceAll("\\[","").replaceAll("\\]","")).intValue();
+ retval = ((COSArray)retval).getObject(idx);
+ }
+ else if (retval instanceof COSDictionary)
+ {
+ retval = ((COSDictionary)retval).getDictionaryObject( path[i] );
+ }
+ }
+ return retval;
+ }
+
+} \ No newline at end of file