001: /**
002: * Copyright (c) 2005, www.pdfbox.org
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms, with or without
006: * modification, are permitted provided that the following conditions are met:
007: *
008: * 1. Redistributions of source code must retain the above copyright notice,
009: * this list of conditions and the following disclaimer.
010: * 2. Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: * 3. Neither the name of pdfbox; nor the names of its
014: * contributors may be used to endorse or promote products derived from this
015: * software without specific prior written permission.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
018: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
019: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
020: * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
021: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
022: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
023: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
024: * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
026: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: *
028: * http://www.pdfbox.org
029: *
030: */package org.pdfbox.pdmodel.interactive.annotation;
031:
032: import org.pdfbox.cos.COSArray;
033: import org.pdfbox.cos.COSDictionary;
034: import org.pdfbox.cos.COSName;
035: import org.pdfbox.pdmodel.graphics.color.PDGamma;
036: import org.pdfbox.pdmodel.common.PDRectangle;
037:
038: /**
039: * This is the class that represents a rectangular or eliptical annotation
040: * Introduced in PDF 1.3 specification .
041: *
042: * @author Paul King
043: * @version $Revision: 1.1 $
044: */
045: public class PDAnnotationSquareCircle extends PDAnnotationMarkup {
046:
047: /**
048: * Constant for a Rectangular type of annotation.
049: */
050: public static final String SUB_TYPE_SQUARE = "Square";
051: /**
052: * Constant for an Eliptical type of annotation.
053: */
054: public static final String SUB_TYPE_CIRCLE = "Circle";
055:
056: private PDAnnotationSquareCircle() {
057: // Must be constructed with a subType or dictionary parameter
058: }
059:
060: /**
061: * Creates a Circle or Square annotation of the specified sub type.
062: *
063: * @param subType the subtype the annotation represents.
064: */
065: public PDAnnotationSquareCircle(String subType) {
066: super ();
067: setSubtype(subType);
068: }
069:
070: /**
071: * Creates a Line annotation from a COSDictionary, expected to be a correct
072: * object definition.
073: *
074: * @param field
075: * the PDF objet to represent as a field.
076: */
077: public PDAnnotationSquareCircle(COSDictionary field) {
078: super (field);
079: }
080:
081: /**
082: * This will set interior colour of the drawn area
083: * Colour is in DeviceRGB colourspace.
084: *
085: * @param ic
086: * colour in the DeviceRGB colourspace.
087: *
088: */
089: public void setInteriorColour(PDGamma ic) {
090: getDictionary().setItem("IC", ic);
091: }
092:
093: /**
094: * This will retrieve the interior colour of the drawn area
095: * Colour is in DeviceRGB colourspace.
096: *
097: *
098: * @return PDGamma object representing the colour.
099: *
100: */
101: public PDGamma getInteriorColour() {
102:
103: COSArray ic = (COSArray) getDictionary().getItem(
104: COSName.getPDFName("IC"));
105: if (ic != null) {
106: return new PDGamma(ic);
107: } else {
108: return null;
109: }
110: }
111:
112: /**
113: * This will set the border effect dictionary, specifying effects to be applied
114: * when drawing the line.
115: *
116: * @param be The border effect dictionary to set.
117: *
118: */
119: public void setBorderEffect(PDBorderEffectDictionary be) {
120: getDictionary().setItem("BE", be);
121: }
122:
123: /**
124: * This will retrieve the border effect dictionary, specifying effects to be
125: * applied used in drawing the line.
126: *
127: * @return The border effect dictionary
128: */
129: public PDBorderEffectDictionary getBorderEffect() {
130: COSDictionary be = (COSDictionary) getDictionary()
131: .getDictionaryObject("BE");
132: if (be != null) {
133: return new PDBorderEffectDictionary(be);
134: } else {
135: return null;
136: }
137: }
138:
139: /**
140: * This will set the rectangle difference rectangle. Giving the difference
141: * between the annotations rectangle and where the drawing occurs.
142: * (To take account of any effects applied through the BE entry forexample)
143: *
144: * @param rd the rectangle difference
145: *
146: */
147: public void setRectDifference(PDRectangle rd) {
148: getDictionary().setItem("RD", rd);
149: }
150:
151: /**
152: * This will get the rectangle difference rectangle. Giving the difference
153: * between the annotations rectangle and where the drawing occurs.
154: * (To take account of any effects applied through the BE entry forexample)
155: *
156: * @return the rectangle difference
157: */
158: public PDRectangle getRectDifference() {
159: COSArray rd = (COSArray) getDictionary().getDictionaryObject(
160: "RD");
161: if (rd != null) {
162: return new PDRectangle(rd);
163: } else {
164: return null;
165: }
166: }
167:
168: /**
169: * This will set the sub type (and hence appearance, AP taking precedence) For
170: * this annotation. See the SUB_TYPE_XXX constants for valid values.
171: *
172: * @param subType The subtype of the annotation
173: */
174: public void setSubtype(String subType) {
175: getDictionary().setName(COSName.SUBTYPE, subType);
176: }
177:
178: /**
179: * This will retrieve the sub type (and hence appearance, AP taking precedence)
180: * For this annotation.
181: *
182: * @return The subtype of this annotation, see the SUB_TYPE_XXX constants.
183: */
184: public String getSubtype() {
185: return getDictionary().getNameAsString(COSName.SUBTYPE);
186: }
187:
188: }
|