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.documentinterchange.prepress;
031:
032: import org.pdfbox.cos.COSArray;
033: import org.pdfbox.cos.COSBase;
034: import org.pdfbox.cos.COSDictionary;
035: import org.pdfbox.cos.COSInteger;
036: import org.pdfbox.pdmodel.common.COSObjectable;
037: import org.pdfbox.pdmodel.graphics.PDLineDashPattern;
038: import org.pdfbox.pdmodel.graphics.color.PDColorSpaceInstance;
039: import org.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
040:
041: /**
042: * The Box Style specifies visual characteristics for displaying box areas.
043: *
044: * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
045: * @version $Revision: 1.3 $
046: */
047: public class PDBoxStyle implements COSObjectable {
048: /**
049: * Style for guideline.
050: */
051: public static final String GUIDELINE_STYLE_SOLID = "S";
052: /**
053: * Style for guideline.
054: */
055: public static final String GUIDELINE_STYLE_DASHED = "D";
056:
057: private COSDictionary dictionary;
058:
059: /**
060: * Default Constructor.
061: *
062: */
063: public PDBoxStyle() {
064: dictionary = new COSDictionary();
065: }
066:
067: /**
068: * Constructor for an existing BoxStyle element.
069: *
070: * @param dic The existing dictionary.
071: */
072: public PDBoxStyle(COSDictionary dic) {
073: dictionary = dic;
074: }
075:
076: /**
077: * Convert this standard java object to a COS object.
078: *
079: * @return The cos object that matches this Java object.
080: */
081: public COSBase getCOSObject() {
082: return dictionary;
083: }
084:
085: /**
086: * Convert this standard java object to a COS object.
087: *
088: * @return The cos object that matches this Java object.
089: */
090: public COSDictionary getDictionary() {
091: return dictionary;
092: }
093:
094: /**
095: * Get the color to be used for the guidelines. This is guaranteed to
096: * not return null. The color space will always be DeviceRGB and the
097: * default color is [0,0,0].
098: *
099: *@return The guideline color.
100: */
101: public PDColorSpaceInstance getGuidelineColor() {
102: COSArray colorValues = (COSArray) dictionary
103: .getDictionaryObject("C");
104: if (colorValues == null) {
105: colorValues = new COSArray();
106: colorValues.add(COSInteger.ZERO);
107: colorValues.add(COSInteger.ZERO);
108: colorValues.add(COSInteger.ZERO);
109: dictionary.setItem("C", colorValues);
110: }
111: PDColorSpaceInstance instance = new PDColorSpaceInstance(
112: colorValues);
113: instance.setColorSpace(PDDeviceRGB.INSTANCE);
114: return instance;
115: }
116:
117: /**
118: * Set the color space instance for this box style. This must be a
119: * PDDeviceRGB!
120: *
121: * @param color The new colorspace value.
122: */
123: public void setGuideLineColor(PDColorSpaceInstance color) {
124: COSArray values = null;
125: if (color != null) {
126: values = color.getCOSColorSpaceValue();
127: }
128: dictionary.setItem("C", values);
129: }
130:
131: /**
132: * Get the width of the of the guideline in default user space units.
133: * The default is 1.
134: *
135: * @return The width of the guideline.
136: */
137: public float getGuidelineWidth() {
138: return dictionary.getFloat("W", 1);
139: }
140:
141: /**
142: * Set the guideline width.
143: *
144: * @param width The width in default user space units.
145: */
146: public void setGuidelineWidth(float width) {
147: dictionary.setFloat("W", width);
148: }
149:
150: /**
151: * Get the style for the guideline. The default is "S" for solid.
152: *
153: * @return The guideline style.
154: * @see PDBoxStyle#GUIDELINE_STYLE_DASHED
155: * @see PDBoxStyle#GUIDELINE_STYLE_SOLID
156: */
157: public String getGuidelineStyle() {
158: return dictionary.getNameAsString("S", GUIDELINE_STYLE_SOLID);
159: }
160:
161: /**
162: * Set the style for the box.
163: *
164: * @param style The style for the box line.
165: * @see PDBoxStyle#GUIDELINE_STYLE_DASHED
166: * @see PDBoxStyle#GUIDELINE_STYLE_SOLID
167: */
168: public void setGuidelineStyle(String style) {
169: dictionary.setName("S", style);
170: }
171:
172: /**
173: * Get the line dash pattern for this box style. This is guaranteed to not
174: * return null. The default is [3],0.
175: *
176: * @return The line dash pattern.
177: */
178: public PDLineDashPattern getLineDashPattern() {
179: PDLineDashPattern pattern = null;
180: COSArray d = (COSArray) dictionary.getDictionaryObject("D");
181: if (d == null) {
182: d = new COSArray();
183: d.add(new COSInteger(3));
184: dictionary.setItem("D", d);
185: }
186: COSArray lineArray = new COSArray();
187: lineArray.add(d);
188: //dash phase is not specified and assumed to be zero.
189: lineArray.add(new COSInteger(0));
190: pattern = new PDLineDashPattern(lineArray);
191: return pattern;
192: }
193:
194: /**
195: * Set the line dash pattern associated with this box style.
196: *
197: * @param pattern The patter for this box style.
198: */
199: public void setLineDashPattern(PDLineDashPattern pattern) {
200: COSArray array = null;
201: if (pattern != null) {
202: array = pattern.getCOSDashPattern();
203: }
204: dictionary.setItem("D", array);
205: }
206: }
|