pdfbox-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From le...@apache.org
Subject svn commit: r907418 - in /pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive: annotation/ measurement/
Date Sun, 07 Feb 2010 12:18:35 GMT
Author: lehmi
Date: Sun Feb  7 12:18:34 2010
New Revision: 907418

URL: http://svn.apache.org/viewvc?rev=907418&view=rev
Log:
PDFBOX-597: as not all annotations have the same entries some methods are moved to the corresponding subclasses. Patch by Johannes Koch (johannes dot koch at fit dot fraunhofer dot de)

Added:
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceCharacteristicsDictionary.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDExternalDataDictionary.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDMeasureDictionary.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDNumberFormatDictionary.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDRectlinearMeasureDictionary.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDViewportDictionary.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/package.html
Modified:
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotation.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFileAttachment.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLine.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLink.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationMarkup.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquareCircle.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationText.java
    pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationWidget.java

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotation.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotation.java?rev=907418&r1=907417&r2=907418&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotation.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotation.java Sun Feb  7 12:18:34 2010
@@ -22,12 +22,10 @@
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 
+import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.graphics.color.PDGamma;
-import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory;
-import org.apache.pdfbox.pdmodel.interactive.action.PDAnnotationAdditionalActions;
-import org.apache.pdfbox.pdmodel.interactive.action.type.PDAction;
 import org.apache.pdfbox.util.BitFlagHelper;
 import org.apache.pdfbox.cos.COSBase;
 
@@ -87,6 +85,8 @@
      * @return The correctly typed annotation object.
      * @throws IOException If there is an error while creating the annotation.
      */
+    // TODO not yet implemented: FreeText, Polygon, PolyLine, Caret, Ink, Sound, 
+    // Movie, Screen, PrinterMark, TrapNet, Watermark, 3D, Redact
     public static PDAnnotation createAnnotation( COSBase base ) throws IOException
     {
         PDAnnotation annot = null;
@@ -484,58 +484,6 @@
     }
 
     /**
-     * Get the action to be performed when this annotation is to be activated.
-     *
-     * @return The action to be performed when this annotation is activated.
-     *
-     * @throws IOException If there is an error creating the action.
-     */
-    public PDAction getAction() throws IOException
-    {
-        COSDictionary action = (COSDictionary)
-            getDictionary().getDictionaryObject( COSName.A );
-        return PDActionFactory.createAction( action );
-    }
-
-    /**
-     * Set the annotation action.
-     * As of PDF 1.6 this is only used for Widget Annotations
-     * @param action The annotation action.
-     */
-    public void setAction( PDAction action )
-    {
-        getDictionary().setItem( COSName.A, action );
-    }
-
-    /**
-     * Get the additional actions for this field.  This will return null
-     * if there are no additional actions for this field.
-     * As of PDF 1.6 this is only used for Widget Annotations.
-     *
-     * @return The actions of the field.
-     */
-    public PDAnnotationAdditionalActions getActions()
-    {
-        COSDictionary aa = (COSDictionary)dictionary.getDictionaryObject( "AA" );
-        PDAnnotationAdditionalActions retval = null;
-        if( aa != null )
-        {
-            retval = new PDAnnotationAdditionalActions( aa );
-        }
-        return retval;
-    }
-
-    /**
-     * Set the actions of the field.
-     *
-     * @param actions The field actions.
-     */
-    public void setActions( PDAnnotationAdditionalActions actions )
-    {
-        dictionary.setItem( "AA", actions );
-    }
-
-    /**
      * Get the "contents" of the field.
      *
      * @return the value of the contents.
@@ -556,38 +504,6 @@
     }
 
     /**
-     * This will set the border style dictionary, specifying the width and dash
-     * pattern used in drawing the line.
-     *
-     * @param bs the border style dictionary to set.
-     *
-     */
-    public void setBorderStyle( PDBorderStyleDictionary bs )
-    {
-        getDictionary().setItem( "BS", bs);
-    }
-
-    /**
-     * This will retrieve the border style dictionary, specifying the width and
-     * dash pattern used in drawing the line.
-     *
-     * @return the border style dictionary.
-     */
-    public PDBorderStyleDictionary getBorderStyle()
-    {
-        COSDictionary bs = (COSDictionary) getDictionary().getItem(
-                COSName.getPDFName( "BS" ) );
-        if (bs != null)
-        {
-            return new PDBorderStyleDictionary( bs );
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    /**
      * This will retrieve the date and time the annotation was modified.
      *
      * @return the modified date/time (often in date format, but can be an arbitary string).
@@ -609,11 +525,11 @@
     }
 
     /**
-     * This will get the name, a string intended to uniquely identify each annotatoin
+     * This will get the name, a string intended to uniquely identify each annotation
      * within a page. Not to be confused with some annotations Name entry which
      * impact the default image drawn for them.
      *
-     * @return The identifying name for the Annotion.
+     * @return The identifying name for the Annotation.
      */
     public String getAnnotationName()
     {
@@ -621,7 +537,7 @@
     }
 
     /**
-     * This will set the name, a string intended to uniquely identify each annotatoin
+     * This will set the name, a string intended to uniquely identify each annotation
      * within a page. Not to be confused with some annotations Name entry which
      * impact the default image drawn for them.
      *
@@ -672,4 +588,30 @@
             return null;
         }
     }
+
+    /** 
+     * This will retrieve the subtype of the annotation.
+     * 
+     * @return the subtype
+     */
+    public String getSubtype()
+    {
+        return this.getDictionary().getNameAsString(COSName.SUBTYPE);
+    }
+
+    /**
+     * This will retrieve the corresponding page of this annotation.
+     * 
+     * @return the corresponding page
+     */
+    public PDPage getPage()
+    {
+        COSDictionary p = (COSDictionary) this.getDictionary().getDictionaryObject(COSName.P);
+        if (p != null)
+        {
+            return new PDPage(p);
+        }
+        return null;
+    }
+
 }

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFileAttachment.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFileAttachment.java?rev=907418&r1=907417&r2=907418&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFileAttachment.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFileAttachment.java Sun Feb  7 12:18:34 2010
@@ -28,7 +28,7 @@
  * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
  * @version $Revision: 1.2 $
  */
-public class PDAnnotationFileAttachment extends PDAnnotation
+public class PDAnnotationFileAttachment extends PDAnnotationMarkup
 {
     /**
      * See get/setAttachmentName.

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLine.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLine.java?rev=907418&r1=907417&r2=907418&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLine.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLine.java Sun Feb  7 12:18:34 2010
@@ -18,6 +18,7 @@
 
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSFloat;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.graphics.color.PDGamma;
 
@@ -124,7 +125,7 @@
      * object definition.
      *
      * @param field
-     *            the PDF objet to represent as a field.
+     *            the PDF object to represent as a field.
      */
     public PDAnnotationLine( COSDictionary field )
     {
@@ -303,4 +304,190 @@
         return getDictionary().getBoolean( "Cap", false );
     }
 
+    /**
+     * This will set the border style dictionary, specifying the width and dash
+     * pattern used in drawing the line.
+     *
+     * @param bs the border style dictionary to set.
+     *
+     */
+    public void setBorderStyle( PDBorderStyleDictionary bs )
+    {
+        this.getDictionary().setItem( "BS", bs);
+    }
+
+    /**
+     * This will retrieve the border style dictionary, specifying the width and
+     * dash pattern used in drawing the line.
+     *
+     * @return the border style dictionary.
+     */
+    public PDBorderStyleDictionary getBorderStyle()
+    {
+        COSDictionary bs = (COSDictionary) this.getDictionary().getItem(
+                COSName.getPDFName( "BS" ) );
+        if (bs != null)
+        {
+            return new PDBorderStyleDictionary( bs );
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    /**
+     * This will retrieve the length of the leader line.
+     * 
+     * @return the length of the leader line
+     */
+    public float getLeaderLineLength()
+    {
+        return this.getDictionary().getFloat("LL");
+    }
+
+    /**
+     * This will set the length of the leader line.
+     * 
+     * @param leaderLineLength length of the leader line
+     */
+    public void setLeaderLineLength(float leaderLineLength)
+    {
+        this.getDictionary().setFloat("LL", leaderLineLength);
+    }
+
+    /**
+     * This will retrieve the length of the leader line extensions.
+     * 
+     * @return the length of the leader line extensions
+     */
+    public float getLeaderLineExtensionLength()
+    {
+        return this.getDictionary().getFloat("LLE");
+    }
+
+    /**
+     * This will set the length of the leader line extensions.
+     * 
+     * @param leaderLineExtensionLength length of the leader line extensions
+     */
+    public void setLeaderLineExtensionLength(float leaderLineExtensionLength)
+    {
+        this.getDictionary().setFloat("LLE", leaderLineExtensionLength);
+    }
+
+    /**
+     * This will retrieve the length of the leader line offset.
+     * 
+     * @return the length of the leader line offset
+     */
+    public float getLeaderLineOffsetLength()
+    {
+        return this.getDictionary().getFloat("LLO");
+    }
+
+    /**
+     * This will set the length of the leader line offset.
+     * 
+     * @param leaderLineOffsetLength length of the leader line offset
+     */
+    public void setLeaderLineOffsetLength(float leaderLineOffsetLength)
+    {
+        this.getDictionary().setFloat("LLO", leaderLineOffsetLength);
+    }
+
+    /**
+     * This will retrieve the caption positioning.
+     * 
+     * @return the caption positioning
+     */
+    public String getCaptionPositioning()
+    {
+        return this.getDictionary().getString("CP");
+    }
+
+    /**
+     * This will set the caption positioning.
+     * Allowed values are: "Inline" and "Top"
+     * 
+     * @param captionPositioning caption positioning
+     */
+    public void setCaptionPositioning(String captionPositioning)
+    {
+        this.getDictionary().setString("CP", captionPositioning);
+    }
+
+    /**
+     * This will set the horizontal offset of the caption.
+     * 
+     * @param offset the horizontal offset of the caption
+     */
+    public void setCaptionHorizontalOffset( float offset )
+    {
+        COSArray array = (COSArray)this.getDictionary().getDictionaryObject( "CO" );
+        if( array == null )
+        {
+            array = new COSArray();
+            array.setFloatArray(new float[] {offset, 0.f});
+            this.getDictionary().setItem( "CO", array );
+        }
+        else
+        {
+            array.set(0, new COSFloat(offset) );
+        }
+    }
+
+    /**
+     * This will retrieve the horizontal offset of the caption.
+     * 
+     * @return the the horizontal offset of the caption
+     */
+    public float getCaptionHorizontalOffset()
+    {
+        float retval = 0.f;
+        COSArray array = (COSArray)this.getDictionary().getDictionaryObject( "CO" );
+        if( array != null )
+        {
+            retval = array.toFloatArray()[0];
+        }
+
+        return retval;
+    }
+
+    /**
+     * This will set the vertical offset of the caption.
+     * 
+     * @param offset vertical offset of the caption
+     */
+    public void setCaptionVerticalOffset( float offset )
+    {
+        COSArray array = (COSArray)this.getDictionary().getDictionaryObject( "CO" );
+        if( array == null )
+        {
+            array = new COSArray();
+            array.setFloatArray(new float[] {0.f, offset});
+            this.getDictionary().setItem( "CO", array );
+        }
+        else
+        {
+            array.set(1, new COSFloat(offset) );
+        }
+    }
+
+    /**
+     * This will retrieve the vertical offset of the caption.
+     * 
+     * @return the vertical offset of the caption
+     */
+    public float getCaptionVerticalOffset()
+    {
+        float retval = 0.f;
+        COSArray array = (COSArray)this.getDictionary().getDictionaryObject( "CO" );
+        if( array != null )
+        {
+            retval = array.toFloatArray()[1];
+        }
+        return retval;
+    }
+
 }

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLink.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLink.java?rev=907418&r1=907417&r2=907418&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLink.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLink.java Sun Feb  7 12:18:34 2010
@@ -22,6 +22,8 @@
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory;
+import org.apache.pdfbox.pdmodel.interactive.action.type.PDAction;
 import org.apache.pdfbox.pdmodel.interactive.action.type.PDActionURI;
 import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination;
 
@@ -80,6 +82,66 @@
     }
 
     /**
+     * Get the action to be performed when this annotation is to be activated.
+     *
+     * @return The action to be performed when this annotation is activated.
+     *
+     * @throws IOException If there is an error creating the action.
+     * TODO not all annotations have an A entry
+     */
+    public PDAction getAction() throws IOException
+    {
+        COSDictionary action = (COSDictionary)
+            this.getDictionary().getDictionaryObject( COSName.A );
+        return PDActionFactory.createAction( action );
+    }
+
+    /**
+     * Set the annotation action.
+     * As of PDF 1.6 this is only used for Widget Annotations
+     * @param action The annotation action.
+     * TODO not all annotations have an A entry
+     */
+    public void setAction( PDAction action )
+    {
+        this.getDictionary().setItem( COSName.A, action );
+    }
+
+    /**
+     * This will set the border style dictionary, specifying the width and dash
+     * pattern used in drawing the line.
+     *
+     * @param bs the border style dictionary to set.
+     * TODO not all annotations may have a BS entry
+     *
+     */
+    public void setBorderStyle( PDBorderStyleDictionary bs )
+    {
+        this.getDictionary().setItem( "BS", bs);
+    }
+
+    /**
+     * This will retrieve the border style dictionary, specifying the width and
+     * dash pattern used in drawing the line.
+     *
+     * @return the border style dictionary.
+     * TODO not all annotations may have a BS entry
+     */
+    public PDBorderStyleDictionary getBorderStyle()
+    {
+        COSDictionary bs = (COSDictionary) this.getDictionary().getItem(
+                COSName.getPDFName( "BS" ) );
+        if (bs != null)
+        {
+            return new PDBorderStyleDictionary( bs );
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    /**
      * Get the destination to be displayed when the annotation is activated.  Either
      * this or the A should be set but not both.
      *

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationMarkup.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationMarkup.java?rev=907418&r1=907417&r2=907418&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationMarkup.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationMarkup.java Sun Feb  7 12:18:34 2010
@@ -36,8 +36,8 @@
 {
 
     /*
-     * The various values of the reply type as defined in the PDF 1.6 reference
-     * Table 8.17
+     * The various values of the reply type as defined in the PDF 1.7 reference
+     * Table 170
      */
 
     /**
@@ -217,8 +217,7 @@
      * This will set the annotation to which this one is "In Reply To" the
      * actual relationship is specified by the RT entry.
      *
-     * @param irt
-     *            the annotation this one is "In Reply To".
+     * @param irt the annotation this one is "In Reply To".
      */
     public void setInReplyTo( PDAnnotation irt )
     {
@@ -238,8 +237,7 @@
     /**
      * This will set the short description of the subject of the annotation.
      *
-     * @param subj
-     *            short description of the subject.
+     * @param subj short description of the subject.
      */
     public void setSubject( String subj )
     {
@@ -261,8 +259,7 @@
      * This will set the Reply Type (relationship) with the annotation in the
      * IRT entry See the RT_* constants for the available values.
      *
-     * @param rt
-     *            the reply type.
+     * @param rt the reply type.
      */
     public void setReplyType( String rt )
     {
@@ -286,12 +283,36 @@
      * specific to the actual annotation See the IT_* constants for the
      * annotation classes.
      *
-     * @param it
-     *            the intent
+     * @param it the intent
      */
     public void setIntent( String it )
     {
         getDictionary().setName( "IT", it );
     }
 
+    /**
+     * This will return the external data dictionary.
+     * 
+     * @return the external data dictionary
+     */
+    public PDExternalDataDictionary getExternalData()
+    {
+        COSBase exData = this.getDictionary().getDictionaryObject("ExData");
+        if (exData instanceof COSDictionary)
+        {
+            return new PDExternalDataDictionary((COSDictionary) exData);
+        }
+        return null;
+    }
+
+    /**
+     * This will set the external data dictionary.
+     * 
+     * @param externalData the external data dictionary
+     */
+    public void setExternalData(PDExternalDataDictionary externalData)
+    {
+        this.getDictionary().setItem("ExData", externalData);
+    }
+
 }

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquareCircle.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquareCircle.java?rev=907418&r1=907417&r2=907418&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquareCircle.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquareCircle.java Sun Feb  7 12:18:34 2010
@@ -41,12 +41,6 @@
      */
     public static final String SUB_TYPE_CIRCLE = "Circle";
 
-    private PDAnnotationSquareCircle()
-    {
-        // Must be constructed with a subType or dictionary parameter
-    }
-
-
     /**
      * Creates a Circle or Square annotation of the specified sub type.
      *
@@ -194,4 +188,38 @@
         return getDictionary().getNameAsString( COSName.SUBTYPE);
     }
 
+    /**
+     * This will set the border style dictionary, specifying the width and dash
+     * pattern used in drawing the line.
+     *
+     * @param bs the border style dictionary to set.
+     * TODO not all annotations may have a BS entry
+     *
+     */
+    public void setBorderStyle( PDBorderStyleDictionary bs )
+    {
+        this.getDictionary().setItem( "BS", bs);
+    }
+
+    /**
+     * This will retrieve the border style dictionary, specifying the width and
+     * dash pattern used in drawing the line.
+     *
+     * @return the border style dictionary.
+     * TODO not all annotations may have a BS entry
+     */
+    public PDBorderStyleDictionary getBorderStyle()
+    {
+        COSDictionary bs = (COSDictionary) this.getDictionary().getItem(
+                COSName.getPDFName( "BS" ) );
+        if (bs != null)
+        {
+            return new PDBorderStyleDictionary( bs );
+        }
+        else
+        {
+            return null;
+        }
+    }
+
 }

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationText.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationText.java?rev=907418&r1=907417&r2=907418&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationText.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationText.java Sun Feb  7 12:18:34 2010
@@ -29,8 +29,8 @@
 {
 
     /*
-     * The various values of the Text as defined in the PDF 1.6 reference Table
-     * 8.19
+     * The various values of the Text as defined in the PDF 1.7 reference Table
+     * 172
      */
 
     /**
@@ -88,7 +88,7 @@
      * object definition.
      *
      * @param field
-     *            the PDF objet to represent as a field.
+     *            the PDF object to represent as a field.
      */
     public PDAnnotationText( COSDictionary field )
     {
@@ -96,7 +96,7 @@
     }
 
     /**
-     * This will set inital state of the annotation, open or closed.
+     * This will set initial state of the annotation, open or closed.
      *
      * @param open
      *            Boolean value, true = open false = closed
@@ -140,4 +140,45 @@
         return getDictionary().getNameAsString( COSName.NAME, NAME_NOTE );
     }
 
+    /**
+     * This will retrieve the annotation state.
+     * 
+     * @return the annotation state
+     */
+    public String getState()
+    {
+        return this.getDictionary().getString("State");
+    }
+
+    /**
+     * This will set the annotation state.
+     * 
+     * @param state the annotation state 
+     */
+    public void setState(String state)
+    {
+        this.getDictionary().setString("State", state);
+    }
+
+    /**
+     * This will retrieve the annotation state model.
+     * 
+     * @return the annotation state model
+     */
+    public String getStateModel()
+    {
+        return this.getDictionary().getString("StateModel");
+    }
+
+    /**
+     * This will set the annotation state model.
+     * Allowed values are "Marked" and "Review"
+     * 
+     * @param stateModel the annotation state model
+     */
+    public void setStateModel(String stateModel)
+    {
+        this.getDictionary().setString("StateModel", stateModel);
+    }
+
 }

Modified: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationWidget.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationWidget.java?rev=907418&r1=907417&r2=907418&view=diff
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationWidget.java (original)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationWidget.java Sun Feb  7 12:18:34 2010
@@ -16,8 +16,14 @@
  */
 package org.apache.pdfbox.pdmodel.interactive.annotation;
 
+import java.io.IOException;
+
+import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory;
+import org.apache.pdfbox.pdmodel.interactive.action.PDAnnotationAdditionalActions;
+import org.apache.pdfbox.pdmodel.interactive.action.type.PDAction;
 
 /**
  * This is the class that represents a widget.
@@ -53,4 +59,187 @@
     {
         super( field );
     }
+
+    /**
+     * Returns the highlighting mode. Default value: <code>I</code>
+     * <dl>
+     *   <dt><code>N</code></dt>
+     *     <dd>(None) No highlighting.</dd>
+     *   <dt><code>I</code></dt>
+     *     <dd>(Invert) Invert the contents of the annotation rectangle.</dd>
+     *   <dt><code>O</code></dt>
+     *     <dd>(Outline) Invert the annotation's border.</dd>
+     *   <dt><code>P</code></dt>
+     *     <dd>(Push) Display the annotation's down appearance, if any. If no
+     *      down appearance is defined, the contents of the annotation rectangle
+     *      shall be offset to appear as if it were pushed below the surface of
+     *      the page</dd>
+     *   <dt><code>T</code></dt>
+     *     <dd>(Toggle) Same as <code>P</code> (which is preferred).</dd>
+     * </dl>
+     * 
+     * @return the highlighting mode
+     */
+    public String getHighlightingMode()
+    {
+        return this.getDictionary().getNameAsString(COSName.H, "I");
+    }
+
+    /**
+     * Sets the highlighting mode.
+     * <dl>
+     *   <dt><code>N</code></dt>
+     *     <dd>(None) No highlighting.</dd>
+     *   <dt><code>I</code></dt>
+     *     <dd>(Invert) Invert the contents of the annotation rectangle.</dd>
+     *   <dt><code>O</code></dt>
+     *     <dd>(Outline) Invert the annotation's border.</dd>
+     *   <dt><code>P</code></dt>
+     *     <dd>(Push) Display the annotation's down appearance, if any. If no
+     *      down appearance is defined, the contents of the annotation rectangle
+     *      shall be offset to appear as if it were pushed below the surface of
+     *      the page</dd>
+     *   <dt><code>T</code></dt>
+     *     <dd>(Toggle) Same as <code>P</code> (which is preferred).</dd>
+     * </dl>
+     * 
+     * @param highlightingMode the highlighting mode
+     *  the defined values
+     */
+    public void setHighlightingMode(String highlightingMode)
+    {
+        if ((highlightingMode == null)
+            || "N".equals(highlightingMode) || "I".equals(highlightingMode)
+            || "O".equals(highlightingMode) || "P".equals(highlightingMode)
+            || "T".equals(highlightingMode))
+        {
+            this.getDictionary().setName(COSName.H, highlightingMode);
+        }
+        else
+        {
+            throw new IllegalArgumentException( "Valid values for highlighting mode are " +
+                "'N', 'N', 'O', 'P' or 'T'" );
+        }
+    }
+
+    /**
+     * Returns the appearance characteristics dictionary.
+     * 
+     * @return the appearance characteristics dictionary
+     */
+    public PDAppearanceCharacteristicsDictionary getAppearanceCharacteristics()
+    {
+        COSBase mk = this.getDictionary().getDictionaryObject(COSName.getPDFName("MK"));
+        if (mk instanceof COSDictionary)
+        {
+            return new PDAppearanceCharacteristicsDictionary((COSDictionary) mk);
+        }
+        return null;
+    }
+
+    /**
+     * Sets the appearance characteristics dictionary.
+     * 
+     * @param appearanceCharacteristics the appearance characteristics dictionary
+     */
+    public void setAppearanceCharacteristics(PDAppearanceCharacteristicsDictionary appearanceCharacteristics)
+    {
+        this.getDictionary().setItem("MK", appearanceCharacteristics);
+    }
+
+    /**
+     * Get the action to be performed when this annotation is to be activated.
+     *
+     * @return The action to be performed when this annotation is activated.
+     *
+     * @throws IOException If there is an error creating the action.
+     */
+    public PDAction getAction() throws IOException
+    {
+        COSDictionary action = (COSDictionary)
+            this.getDictionary().getDictionaryObject( COSName.A );
+        return PDActionFactory.createAction( action );
+    }
+
+    /**
+     * Set the annotation action.
+     * As of PDF 1.6 this is only used for Widget Annotations
+     * @param action The annotation action.
+     */
+    public void setAction( PDAction action )
+    {
+        this.getDictionary().setItem( COSName.A, action );
+    }
+
+    /**
+     * Get the additional actions for this field.  This will return null
+     * if there are no additional actions for this field.
+     * As of PDF 1.6 this is only used for Widget Annotations.
+     *
+     * @return The actions of the field.
+     */
+    public PDAnnotationAdditionalActions getActions()
+    {
+        COSDictionary aa = (COSDictionary)this.getDictionary().getDictionaryObject( "AA" );
+        PDAnnotationAdditionalActions retval = null;
+        if( aa != null )
+        {
+            retval = new PDAnnotationAdditionalActions( aa );
+        }
+        return retval;
+    }
+
+    /**
+     * Set the actions of the field.
+     *
+     * @param actions The field actions.
+     */
+    public void setActions( PDAnnotationAdditionalActions actions )
+    {
+        this.getDictionary().setItem( "AA", actions );
+    }
+
+    /**
+     * This will set the border style dictionary, specifying the width and dash
+     * pattern used in drawing the line.
+     *
+     * @param bs the border style dictionary to set.
+     *
+     */
+    public void setBorderStyle( PDBorderStyleDictionary bs )
+    {
+        this.getDictionary().setItem( "BS", bs);
+    }
+
+    /**
+     * This will retrieve the border style dictionary, specifying the width and
+     * dash pattern used in drawing the line.
+     *
+     * @return the border style dictionary.
+     */
+    public PDBorderStyleDictionary getBorderStyle()
+    {
+        COSDictionary bs = (COSDictionary) this.getDictionary().getItem(
+                COSName.getPDFName( "BS" ) );
+        if (bs != null)
+        {
+            return new PDBorderStyleDictionary( bs );
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    // TODO where to get acroForm from?
+//    public PDField getParent() throws IOException
+//    {
+//        COSBase parent = this.getDictionary().getDictionaryObject(COSName.PARENT);
+//        if (parent instanceof COSDictionary)
+//        {
+//            PDAcroForm acroForm = null;
+//            return PDFieldFactory.createField(acroForm, (COSDictionary) parent);
+//        }
+//        return null;
+//    }
 }

Added: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceCharacteristicsDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceCharacteristicsDictionary.java?rev=907418&view=auto
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceCharacteristicsDictionary.java (added)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceCharacteristicsDictionary.java Sun Feb  7 12:18:34 2010
@@ -0,0 +1,243 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.pdfbox.pdmodel.interactive.annotation;
+
+import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
+import org.apache.pdfbox.pdmodel.graphics.color.PDGamma;
+import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectForm;
+
+/**
+ * This class represents an appearance characteristics dictionary.
+ *
+ * @version $Revision: 1.0 $ 
+ *
+ */
+public class PDAppearanceCharacteristicsDictionary implements COSObjectable
+{
+
+    private COSDictionary dictionary;
+
+    /**
+     * Constructor.
+     * 
+     * @param dict dictionary
+     */
+    public PDAppearanceCharacteristicsDictionary(COSDictionary dict)
+    {
+        this.dictionary = dict;
+    }
+
+
+    /**
+     * returns the dictionary.
+     * @return the dictionary
+     */
+    public COSDictionary getDictionary()
+    {
+        return this.dictionary;
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     */
+    public COSBase getCOSObject()
+    {
+        return this.dictionary;
+    }
+
+    /**
+     * This will retrieve the rotation of the annotation widget.
+     * It must be a multiple of 90. Default is 0 
+     * @return the rotation
+     */
+    public int getRotation()
+    {
+        return this.getDictionary().getInt(COSName.R, 0);
+    }
+
+    /**
+     * This will set the rotation.
+     * 
+     * @param rotation the rotation as a multiple of 90
+     */
+    public void setRotation(int rotation)
+    {
+        this.getDictionary().setInt(COSName.R, rotation);
+    }
+
+    /**
+     * This will retrieve the border color.
+     * 
+     * @return the border color.
+     */
+    public PDGamma getBorderColour()
+    {
+        COSBase c = this.getDictionary().getItem(COSName.getPDFName("BC"));
+        if (c instanceof COSArray)
+        {
+            return new PDGamma((COSArray) c);
+        }
+        return null;
+    }
+
+    /**
+     * This will set the border color.
+     * 
+     * @param c the border color
+     */
+    public void setBorderColour(PDGamma c)
+    {
+        this.getDictionary().setItem("BC", c);
+    }
+
+    /**
+     * This will retrieve the background color.
+     * 
+     * @return the background color.
+     */
+    public PDGamma getBackground()
+    {
+        COSBase c = this.getDictionary().getItem(COSName.getPDFName("BG"));
+        if (c instanceof COSArray)
+        {
+            return new PDGamma((COSArray) c);
+        }
+        return null;
+    }
+
+    /**
+     * This will set the background color.
+     * 
+     * @param c the background color
+     */
+    public void setBackground(PDGamma c)
+    {
+        this.getDictionary().setItem("BG", c);
+    }
+
+    /**
+     * This will retrieve the normal caption.
+     * 
+     * @return the normal caption.
+     */
+    public String getNormalCaption()
+    {
+        return this.getDictionary().getString("CA");
+    }
+
+    /**
+     * This will set the normal caption.
+     * 
+     * @param caption the normal caption
+     */
+    public void setNormalCaption(String caption)
+    {
+        this.getDictionary().setString("CA", caption);
+    }
+
+    /**
+     * This will retrieve the rollover caption.
+     * 
+     * @return the rollover caption.
+     */
+    public String getRolloverCaption()
+    {
+        return this.getDictionary().getString("RC");
+    }
+
+    /**
+     * This will set the rollover caption.
+     * 
+     * @param caption the rollover caption
+     */
+    public void setRolloverCaption(String caption)
+    {
+        this.getDictionary().setString("RC", caption);
+    }
+
+    /**
+     * This will retrieve the alternate caption.
+     * 
+     * @return the alternate caption.
+     */
+    public String getAlternateCaption()
+    {
+        return this.getDictionary().getString("AC");
+    }
+
+    /**
+     * This will set the alternate caption.
+     * 
+     * @param caption the alternate caption
+     */
+    public void setAlternateCaption(String caption)
+    {
+        this.getDictionary().setString("AC", caption);
+    }
+
+    /**
+     * This will retrieve the normal icon.
+     * 
+     * @return the normal icon.
+     */
+    public PDXObjectForm getNormalIcon()
+    {
+        COSBase i = this.getDictionary().getDictionaryObject("I");
+        if (i instanceof COSStream)
+        {
+            return new PDXObjectForm((COSStream) i);
+        }
+        return null;
+    }
+
+    /**
+     * This will retrieve the rollover icon.
+     * 
+     * @return the rollover icon
+     */
+    public PDXObjectForm getRolloverIcon()
+    {
+        COSBase i = this.getDictionary().getDictionaryObject("RI");
+        if (i instanceof COSStream)
+        {
+            return new PDXObjectForm((COSStream) i);
+        }
+        return null;
+    }
+
+    /**
+     * This will retrieve the alternate icon.
+     * 
+     * @return the alternate icon.
+     */
+    public PDXObjectForm getAlternateIcon()
+    {
+        COSBase i = this.getDictionary().getDictionaryObject("IX");
+        if (i instanceof COSStream)
+        {
+            return new PDXObjectForm((COSStream) i);
+        }
+        return null;
+    }
+
+}

Added: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDExternalDataDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDExternalDataDictionary.java?rev=907418&view=auto
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDExternalDataDictionary.java (added)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDExternalDataDictionary.java Sun Feb  7 12:18:34 2010
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.pdfbox.pdmodel.interactive.annotation;
+
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
+
+/**
+ * This class represents an external data dictionary.
+ * 
+ * @version $Revision: 1.0 $
+ * 
+ */
+public class PDExternalDataDictionary implements COSObjectable
+{
+
+    private COSDictionary dataDictionary;
+
+    /**
+     * Constructor.
+     */
+    public PDExternalDataDictionary()
+    {
+        this.dataDictionary = new COSDictionary();
+        this.dataDictionary.setName(COSName.TYPE, "ExData");
+    }
+
+    /**
+     * Constructor.
+     * 
+     *  @param dictionary Dictionary
+     */
+    public PDExternalDataDictionary(COSDictionary dictionary)
+    {
+        this.dataDictionary = dictionary;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public COSBase getCOSObject()
+    {
+        return this.dataDictionary;
+    }
+
+    /**
+     * returns the dictionary.
+     *
+     * @return the dictionary
+     */
+    public COSDictionary getDictionary()
+    {
+        return this.dataDictionary;
+    }
+
+    /**
+     * returns the type of the external data dictionary.
+     * It must be "ExData", if present
+     * @return the type of the external data dictionary
+     */
+    public String getType()
+    {
+        return this.getDictionary().getNameAsString(COSName.TYPE, "ExData");
+    }
+
+    /**
+     * returns the subtype of the external data dictionary.
+     * @return the subtype of the external data dictionary
+     */
+    public String getSubtype()
+    {
+        return this.getDictionary().getNameAsString(COSName.SUBTYPE);
+    }
+
+    /**
+     * This will set the subtype of the external data dictionary.
+     * @param subtype the subtype of the external data dictionary
+     */
+    public void setSubtype(String subtype)
+    {
+        this.getDictionary().setName(COSName.SUBTYPE, subtype);
+    }
+
+}

Added: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDMeasureDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDMeasureDictionary.java?rev=907418&view=auto
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDMeasureDictionary.java (added)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDMeasureDictionary.java Sun Feb  7 12:18:34 2010
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.pdfbox.pdmodel.interactive.measurement;
+
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
+
+/**
+ * This class represents a measure dictionary.
+ * 
+ * @version $Revision: 1.0 $
+ *
+ */
+public class PDMeasureDictionary implements COSObjectable
+{
+    /**
+     * The type of the dictionary.
+     */
+    public static final String TYPE = "Measure";
+
+    private COSDictionary measureDictionary;
+
+    /**
+     * Constructor.
+     */
+    protected PDMeasureDictionary()
+    {
+        this.measureDictionary = new COSDictionary();
+        this.getDictionary().setName(COSName.TYPE, TYPE);
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param dictionary the corresponding dictionary
+     */
+    public PDMeasureDictionary(COSDictionary dictionary)
+    {
+        this.measureDictionary = dictionary;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public COSBase getCOSObject()
+    {
+        return this.measureDictionary;
+    }
+
+    /**
+     * This will return the corresponding dictionary.
+     * 
+     * @return the measure dictionary
+     */
+    public COSDictionary getDictionary()
+    {
+        return this.measureDictionary;
+    }
+
+    /**
+     * This will return the type of the measure dictionary.
+     * It must be "Measure"
+     * 
+     * @return the type
+     */
+    public String getType()
+    {
+        return TYPE;
+    }
+
+    /**
+     * returns the subtype of the measure dictionary.
+     * @return the subtype of the measure data dictionary
+     */
+
+    public String getSubtype()
+    {
+        return this.getDictionary().getNameAsString(COSName.SUBTYPE,
+                PDRectlinearMeasureDictionary.SUBTYPE);
+    }
+
+    /**
+     * This will set the subtype of the measure dictionary.
+     * @param subtype the subtype of the measure dictionary
+     */
+    protected void setSubtype(String subtype)
+    {
+        this.getDictionary().setName(COSName.SUBTYPE, subtype);
+    }
+
+}

Added: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDNumberFormatDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDNumberFormatDictionary.java?rev=907418&view=auto
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDNumberFormatDictionary.java (added)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDNumberFormatDictionary.java Sun Feb  7 12:18:34 2010
@@ -0,0 +1,333 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.pdfbox.pdmodel.interactive.measurement;
+
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
+
+/**
+ * This class represents a number format dictionary.
+ * 
+ * @version $Revision: 1.0$
+ *
+ */
+public class PDNumberFormatDictionary implements COSObjectable
+{
+
+    /**
+     * The type of the dictionary.
+     */
+    public static final String TYPE = "NumberFormat";
+
+    /**
+     * Constant indicating that the label specified by U is a suffix to the value.
+     */
+    public static final String LABEL_SUFFIX_TO_VALUE = "S";
+    /**
+     * Constant indicating that the label specified by U is a postfix to the value.
+     */
+    public static final String LABEL_PREFIX_TO_VALUE = "P";
+
+    /**
+     * Constant for showing a fractional value as decimal to the precision specified by the D entry.
+     */
+    public static final String FRACTIONAL_DISPLAY_DECIMAL = "D";
+    /**
+     * Constant for showing a fractional value as a fraction with denominator specified by the D entry.
+     */
+    public static final String FRACTIONAL_DISPLAY_FRACTION = "F";
+    /**
+     * Constant for showing a fractional value without fractional part; round to the nearest whole unit.
+     */
+    public static final String FRACTIONAL_DISPLAY_ROUND = "R";
+    /**
+     * Constant for showing a fractional value without fractional part; truncate to achieve whole units.
+     */
+    public static final String FRACTIONAL_DISPLAY_TRUNCATE = "T";
+
+    private COSDictionary numberFormatDictionary;
+
+    /**
+     * Constructor.
+     */
+    public PDNumberFormatDictionary()
+    {
+        this.numberFormatDictionary = new COSDictionary();
+        this.numberFormatDictionary.setName(COSName.TYPE, TYPE);
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param dictionary the corresponding dictionary
+     */
+    public PDNumberFormatDictionary(COSDictionary dictionary)
+    {
+        this.numberFormatDictionary = dictionary;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public COSBase getCOSObject()
+    {
+        return this.numberFormatDictionary;
+    }
+
+    /**
+     * This will return the dictionary.
+     * 
+     * @return the number format dictionary
+     */
+    public COSDictionary getDictionary()
+    {
+        return this.numberFormatDictionary;
+    }
+
+    /**
+     * This will return the type of the number format dictionary.
+     * It must be "NumberFormat"
+     * 
+     * @return the type
+     */
+    public String getType()
+    {
+        return TYPE;
+    }
+
+    /**
+     * This will return the label for the units.
+     * 
+     * @return the label for the units
+     */
+    public String getUnits()
+    {
+        return this.getDictionary().getString("U");
+    }
+
+    /**
+     * This will set the label for the units.
+     * 
+     * @param units the label for the units
+     */
+    public void setUnits(String units)
+    {
+        this.getDictionary().setString("U", units);
+    }
+
+    /**
+     * This will return the conversion factor.
+     * 
+     * @return the conversion factor
+     */
+    public float getConversionFactor()
+    {
+        return this.getDictionary().getFloat("C");
+    }
+
+    /**
+     * This will set the conversion factor.
+     * 
+     * @param conversionFactor the conversion factor
+     */
+    public void setConversionFactor(float conversionFactor)
+    {
+        this.getDictionary().setFloat("C", conversionFactor);
+    }
+
+    /** 
+     * This will return the value for the manner to display a fractional value.
+     *  
+     * @return the manner to display a fractional value
+     */
+    public String getFractionalDisplay()
+    {
+        return this.getDictionary().getString("F", FRACTIONAL_DISPLAY_DECIMAL);
+    }
+
+    /** 
+     * This will set the value for the manner to display a fractional value.
+     * Allowed values are "D", "F", "R" and "T"
+     * @param fractionalDisplay the manner to display a fractional value
+     */
+    public void setFractionalDisplay(String fractionalDisplay)
+    {
+        if ((fractionalDisplay == null)
+            || FRACTIONAL_DISPLAY_DECIMAL.equals(fractionalDisplay)
+            || FRACTIONAL_DISPLAY_FRACTION.equals(fractionalDisplay)
+            || FRACTIONAL_DISPLAY_ROUND.equals(fractionalDisplay)
+            || FRACTIONAL_DISPLAY_TRUNCATE.equals(fractionalDisplay))
+        {
+            this.getDictionary().setString("F", fractionalDisplay);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value must be \"D\", \"F\", \"R\", or \"T\", (or null).");
+        }
+    }
+
+    /**
+     * This will return the precision or denominator of a fractional amount.
+     * 
+     * @return the precision or denominator
+     */
+    public int getDenominator()
+    {
+        return this.getDictionary().getInt("D");
+    }
+
+    /**
+     * This will set the precision or denominator of a fractional amount.
+     * 
+     * @param denominator the precision or denominator
+     */
+    public void setDenominator(int denominator)
+    {
+        this.getDictionary().setInt("D", denominator);
+    }
+
+    /**
+     * This will return the value indication if the denominator of the fractional value is reduced/truncated .
+     * 
+     * @return fd
+     */
+    public boolean isFD()
+    {
+        return this.getDictionary().getBoolean("FD", false);
+    }
+
+    /**
+     * This will set the value indication if the denominator of the fractional value is reduced/truncated .
+     * The denominator may not be reduced/truncated if true
+     * @param fd fd
+     */
+    public void setFD(boolean fd)
+    {
+        this.getDictionary().setBoolean("FD", fd);
+    }
+
+    /**
+     * This will return the text to be used between orders of thousands in display of numerical values.
+     * 
+     * @return thousands separator
+     */
+    public String getThousandsSeparator()
+    {
+        return this.getDictionary().getString("RT", ",");
+    }
+
+    /**
+     * This will set the text to be used between orders of thousands in display of numerical values.
+     * 
+     * @param thousandsSeparator thousands separator
+     */
+    public void setThousandsSeparator(String thousandsSeparator)
+    {
+        this.getDictionary().setString("RT", thousandsSeparator);
+    }
+
+    /**
+     * This will return the text to be used as the decimal point in displaying numerical values.
+     * 
+     * @return decimal separator
+     */
+    public String getDecimalSeparator()
+    {
+        return this.getDictionary().getString("RD", ".");
+    }
+
+    /**
+     * This will set the text to be used as the decimal point in displaying numerical values.
+     * 
+     * @param decimalSeparator decimal separator
+     */
+    public void setDecimalSeparator(String decimalSeparator)
+    {
+        this.getDictionary().setString("RD", decimalSeparator);
+    }
+
+    /**
+     * This will return the text to be concatenated to the left of the label specified by U.
+     * @return label prefix
+     */
+    public String getLabelPrefixString()
+    {
+        return this.getDictionary().getString("PS", " ");
+    }
+
+    /**
+     * This will set the text to be concatenated to the left of the label specified by U.
+     * @param labelPrefixString label prefix
+     */
+    public void setLabelPrefixString(String labelPrefixString)
+    {
+        this.getDictionary().setString("PS", labelPrefixString);
+    }
+
+    /**
+     * This will return the text to be concatenated after the label specified by U.
+     * 
+     * @return label suffix
+     */
+    public String getLabelSuffixString()
+    {
+        return this.getDictionary().getString("SS", " ");
+    }
+
+    /**
+     * This will set the text to be concatenated after the label specified by U.
+     * 
+     * @param labelSuffixString label suffix
+     */
+    public void setLabelSuffixString(String labelSuffixString)
+    {
+        this.getDictionary().setString("SS", labelSuffixString);
+    }
+
+    /**
+     * This will return a value indicating the ordering of the label specified by U to the calculated unit value.
+     * 
+     * @return label position 
+     */
+    public String getLabelPositionToValue()
+    {
+        return this.getDictionary().getString("O", LABEL_SUFFIX_TO_VALUE);
+    }
+
+    /**
+     * This will set the value indicating the ordering of the label specified by U to the calculated unit value.
+     * Possible values are "S" and "P"
+     * 
+     * @param labelPositionToValue label position 
+     */
+    public void setLabelPositionToValue(String labelPositionToValue)
+    {
+        if ((labelPositionToValue == null)
+            || LABEL_PREFIX_TO_VALUE.equals(labelPositionToValue)
+            || LABEL_SUFFIX_TO_VALUE.equals(labelPositionToValue))
+        {
+            this.getDictionary().setString("O", labelPositionToValue);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value must be \"S\", or \"P\" (or null).");
+        }
+    }
+
+}

Added: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDRectlinearMeasureDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDRectlinearMeasureDictionary.java?rev=907418&view=auto
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDRectlinearMeasureDictionary.java (added)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDRectlinearMeasureDictionary.java Sun Feb  7 12:18:34 2010
@@ -0,0 +1,344 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.pdfbox.pdmodel.interactive.measurement;
+
+import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+
+/**
+ * This class represents a rectlinear measure dictionary.
+ * 
+ * @version $Revision: 1.0 $
+ *
+ */
+public class PDRectlinearMeasureDictionary extends PDMeasureDictionary
+{
+
+    /**
+     * The subtype of the rectlinear measure dictionary.
+     */
+    public static final String SUBTYPE = "RL";
+
+    /**
+     * Constructor.
+     */
+    public PDRectlinearMeasureDictionary()
+    {
+        this.setSubtype(SUBTYPE);
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param dictionary the corresponding dictionary
+     */
+    public PDRectlinearMeasureDictionary(COSDictionary dictionary)
+    {
+        super(dictionary);
+    }
+
+    /**
+     * This will return the scale ration.
+     * 
+     * @return the scale ratio.
+     */
+    public String getScaleRatio()
+    {
+        return this.getDictionary().getString(COSName.R);
+    }
+
+    /**
+     * This will set the scale ration.
+     * 
+     * @param scaleRatio the scale ratio.
+     */
+    public void setScaleRatio(String scaleRatio)
+    {
+        this.getDictionary().setString(COSName.R, scaleRatio);
+    }
+
+    /**
+     * This will return the changes along the x-axis.
+     * 
+     * @return changes along the x-axis
+     */
+    public PDNumberFormatDictionary[] getChangeXs()
+    {
+        COSArray x = (COSArray)this.getDictionary().getDictionaryObject("X");
+        if (x != null)
+        {
+            PDNumberFormatDictionary[] retval =
+                new PDNumberFormatDictionary[x.size()];
+            for (int i = 0; i < x.size(); i++)
+            {
+                COSDictionary dic = (COSDictionary) x.get(i);
+                retval[i] = new PDNumberFormatDictionary(dic);
+            }
+            return retval;
+        }
+        return null;
+    }
+
+    /**
+     * This will set the changes along the x-axis.
+     * 
+     * @param changeXs changes along the x-axis
+     */
+    public void setChangeXs(PDNumberFormatDictionary[] changeXs)
+    {
+        COSArray array = new COSArray();
+        for (int i = 0; i < changeXs.length; i++)
+        {
+            array.add(changeXs[i]);
+        }
+        this.getDictionary().setItem("X", array);
+    }
+
+    /**
+     * This will return the changes along the y-axis.
+     * 
+     * @return changes along the y-axis
+     */
+    public PDNumberFormatDictionary[] getChangeYs()
+    {
+        COSArray y = (COSArray)this.getDictionary().getDictionaryObject("Y");
+        if (y != null)
+        {
+            PDNumberFormatDictionary[] retval =
+                new PDNumberFormatDictionary[y.size()];
+            for (int i = 0; i < y.size(); i++)
+            {
+                COSDictionary dic = (COSDictionary) y.get(i);
+                retval[i] = new PDNumberFormatDictionary(dic);
+            }
+            return retval;
+        }
+        return null;
+    }
+
+    /**
+     * This will set the changes along the y-axis.
+     * 
+     * @param changeYs changes along the y-axis
+     */
+    public void setChangeYs(PDNumberFormatDictionary[] changeYs)
+    {
+        COSArray array = new COSArray();
+        for (int i = 0; i < changeYs.length; i++)
+        {
+            array.add(changeYs[i]);
+        }
+        this.getDictionary().setItem("Y", array);
+    }
+
+    /**
+     * This will return the distances.
+     * 
+     * @return distances
+     */
+    public PDNumberFormatDictionary[] getDistances()
+    {
+        COSArray d = (COSArray)this.getDictionary().getDictionaryObject("D");
+        if (d != null)
+        {
+            PDNumberFormatDictionary[] retval =
+                new PDNumberFormatDictionary[d.size()];
+            for (int i = 0; i < d.size(); i++)
+            {
+                COSDictionary dic = (COSDictionary) d.get(i);
+                retval[i] = new PDNumberFormatDictionary(dic);
+            }
+            return retval;
+        }
+        return null;
+    }
+
+    /**
+     * This will set the distances.
+     * 
+     * @param distances distances
+     */
+    public void setDistances(PDNumberFormatDictionary[] distances)
+    {
+        COSArray array = new COSArray();
+        for (int i = 0; i < distances.length; i++)
+        {
+            array.add(distances[i]);
+        }
+        this.getDictionary().setItem("D", array);
+    }
+
+    /**
+     * This will return the areas.
+     * 
+     * @return areas
+     */
+    public PDNumberFormatDictionary[] getAreas()
+    {
+        COSArray a = (COSArray)this.getDictionary().getDictionaryObject(COSName.A);
+        if (a != null)
+        {
+            PDNumberFormatDictionary[] retval =
+                new PDNumberFormatDictionary[a.size()];
+            for (int i = 0; i < a.size(); i++)
+            {
+                COSDictionary dic = (COSDictionary) a.get(i);
+                retval[i] = new PDNumberFormatDictionary(dic);
+            }
+            return retval;
+        }
+        return null;
+    }
+
+    /**
+     * This will set the areas.
+     * 
+     * @param areas areas
+     */
+    public void setAreas(PDNumberFormatDictionary[] areas)
+    {
+        COSArray array = new COSArray();
+        for (int i = 0; i < areas.length; i++)
+        {
+            array.add(areas[i]);
+        }
+        this.getDictionary().setItem(COSName.A, array);
+    }
+
+    /**
+     * This will return the angles.
+     * 
+     * @return angles
+     */
+    public PDNumberFormatDictionary[] getAngles()
+    {
+        COSArray t = (COSArray)this.getDictionary().getDictionaryObject("T");
+        if (t != null)
+        {
+            PDNumberFormatDictionary[] retval =
+                new PDNumberFormatDictionary[t.size()];
+            for (int i = 0; i < t.size(); i++)
+            {
+                COSDictionary dic = (COSDictionary) t.get(i);
+                retval[i] = new PDNumberFormatDictionary(dic);
+            }
+            return retval;
+        }
+        return null;
+    }
+
+    /**
+     * This will set the angles.
+     * 
+     * @param angles angles
+     */
+    public void setAngles(PDNumberFormatDictionary[] angles)
+    {
+        COSArray array = new COSArray();
+        for (int i = 0; i < angles.length; i++)
+        {
+            array.add(angles[i]);
+        }
+        this.getDictionary().setItem("T", array);
+    }
+
+    /**
+     * This will return the sloaps of a line.
+     * 
+     * @return the sloaps of a line
+     */
+    public PDNumberFormatDictionary[] getLineSloaps()
+    {
+        COSArray s = (COSArray)this.getDictionary().getDictionaryObject("S");
+        if (s != null)
+        {
+            PDNumberFormatDictionary[] retval =
+                new PDNumberFormatDictionary[s.size()];
+            for (int i = 0; i < s.size(); i++)
+            {
+                COSDictionary dic = (COSDictionary) s.get(i);
+                retval[i] = new PDNumberFormatDictionary(dic);
+            }
+            return retval;
+        }
+        return null;
+    }
+
+    /**
+     * This will set the sloaps of a line.
+     * 
+     * @param lineSloaps the sloaps of a line
+     */
+    public void setLineSloaps(PDNumberFormatDictionary[] lineSloaps)
+    {
+        COSArray array = new COSArray();
+        for (int i = 0; i < lineSloaps.length; i++)
+        {
+            array.add(lineSloaps[i]);
+        }
+        this.getDictionary().setItem("S", array);
+    }
+
+    /**
+     * This will return the origin of the coordinate system.
+     * 
+     * @return the origin
+     */
+    public float[] getCoordSystemOrigin()
+    {
+        COSArray o = (COSArray)this.getDictionary().getDictionaryObject("O");
+        if (o != null)
+        {
+            return o.toFloatArray();
+        }
+        return null;
+    }
+
+    /**
+     * This will set the origin of the coordinate system.
+     * 
+     * @param coordSystemOrigin the origin
+     */
+    public void setCoordSystemOrigin(float[] coordSystemOrigin)
+    {
+        COSArray array = new COSArray();
+        array.setFloatArray(coordSystemOrigin);
+        this.getDictionary().setItem("O", array);
+    }
+
+    /**
+     * This will return the CYX factor.
+     * 
+     * @return CYX factor
+     */
+    public float getCYX()
+    {
+        return this.getDictionary().getFloat("CYX");
+    }
+
+    /**
+     * This will set the CYX factor.
+     * 
+     * @param cyx CYX factor
+     */
+    public void setCYX(float cyx)
+    {
+        this.getDictionary().setFloat("CYX", cyx);
+    }
+
+}

Added: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDViewportDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDViewportDictionary.java?rev=907418&view=auto
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDViewportDictionary.java (added)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDViewportDictionary.java Sun Feb  7 12:18:34 2010
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.pdfbox.pdmodel.interactive.measurement;
+
+import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+
+/**
+ * This class represents a viewport dictionary.
+ * 
+ * @version $Revision: 1.0 $
+ *
+ */
+public class PDViewportDictionary implements COSObjectable
+{
+
+    /**
+     * The type of this annotation.
+     */
+    public static final String TYPE = "Viewport";
+    
+    private COSDictionary viewportDictionary;
+
+    /**
+     * Constructor.
+     */
+    public PDViewportDictionary()
+    {
+        this.viewportDictionary = new COSDictionary();
+    }
+
+    /**
+     * Constructor.
+     * 
+     * @param dictionary the dictionary
+     */
+    public PDViewportDictionary(COSDictionary dictionary)
+    {
+        this.viewportDictionary = dictionary;
+    }
+
+    /**
+     * {@inheritDoc} 
+     */
+    public COSBase getCOSObject()
+    {
+        return this.viewportDictionary;
+    }
+
+    /**
+     * This will return the corresponding dictionary.
+     * 
+     * @return the viewport dictionary
+     */
+    public COSDictionary getDictionary()
+    {
+        return this.viewportDictionary;
+    }
+
+    /**
+     * Returns the type of the viewport dictionary.
+     * It must be "Viewport"
+     * @return the type of the external data dictionary
+     */
+
+    public String getType()
+    {
+        return TYPE;
+    }
+
+    /**
+     * This will retrieve the rectangle specifying the location of the viewport.
+     * 
+     * @return the location
+     */
+    public PDRectangle getBBox()
+    {
+        COSArray bbox = (COSArray)this.getDictionary().getDictionaryObject("BBox");
+        if (bbox != null)
+        {
+            return new PDRectangle(bbox);
+        }
+        return null;
+    }
+
+    /**
+     * This will set the rectangle specifying the location of the viewport.
+     * 
+     * @param rectangle the rectangle specifying the location.
+     */
+    public void setBBox(PDRectangle rectangle)
+    {
+        this.getDictionary().setItem("BBox", rectangle);
+    }
+
+    /**
+     * This will retrieve the name of the viewport.
+     * 
+     * @return the name of the viewport
+     */
+    public String getName()
+    {
+        return this.getDictionary().getNameAsString(COSName.NAME);
+    }
+
+   /**
+    * This will set the name of the viewport.
+    *  
+    * @param name the name of the viewport
+    */
+    public void setName(String name)
+    {
+        this.getDictionary().setName(COSName.NAME, name);
+    }
+
+    /**
+     * This will retrieve the measure dictionary.
+     * 
+     * @return the measure dictionary
+     */
+    public PDMeasureDictionary getMeasure()
+    {
+        COSDictionary measure = (COSDictionary)this.getDictionary().getDictionaryObject("Measure");
+        if (measure != null)
+        {
+            return new PDMeasureDictionary(measure);
+        }
+        return null;
+    }
+
+    /**
+     * This will set the measure dictionary.
+     * 
+     * @param measure the measure dictionary
+     */
+    public void setMeasure(PDMeasureDictionary measure)
+    {
+        this.getDictionary().setItem("Measure", measure);
+    }
+
+}

Added: pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/package.html
URL: http://svn.apache.org/viewvc/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/package.html?rev=907418&view=auto
==============================================================================
--- pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/package.html (added)
+++ pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/package.html Sun Feb  7 12:18:34 2010
@@ -0,0 +1,25 @@
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one or more
+ ! contributor license agreements.  See the NOTICE file distributed with
+ ! this work for additional information regarding copyright ownership.
+ ! The ASF licenses this file to You 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.
+ !-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+
+</head>
+<body>
+The measurement package contains classes that work with elements specifying measure properties.
+</body>
+</html>



Mime
View raw message