001: /**
002: * Copyright (c) 2003-2006, 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.text;
031:
032: import org.pdfbox.pdmodel.font.PDFont;
033:
034: /**
035: * This class will hold the current state of the text parameters when executing a
036: * content stream.
037: *
038: * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
039: * @version $Revision: 1.4 $
040: */
041: public class PDTextState implements Cloneable {
042: /**
043: * See PDF Reference 1.5 Table 5.3.
044: */
045: public static final int RENDERING_MODE_FILL_TEXT = 0;
046: /**
047: * See PDF Reference 1.5 Table 5.3.
048: */
049: public static final int RENDERING_MODE_STROKE_TEXT = 1;
050: /**
051: * See PDF Reference 1.5 Table 5.3.
052: */
053: public static final int RENDERING_MODE_FILL_THEN_STROKE_TEXT = 2;
054: /**
055: * See PDF Reference 1.5 Table 5.3.
056: */
057: public static final int RENDERING_MODE_NEITHER_FILL_NOR_STROKE_TEXT = 3;
058: /**
059: * See PDF Reference 1.5 Table 5.3.
060: */
061: public static final int RENDERING_MODE_FILL_TEXT_AND_ADD_TO_PATH_FOR_CLIPPING = 4;
062: /**
063: * See PDF Reference 1.5 Table 5.3.
064: */
065: public static final int RENDERING_MODE_STROKE_TEXT_AND_ADD_TO_PATH_FOR_CLIPPING = 5;
066: /**
067: * See PDF Reference 1.5 Table 5.3.
068: */
069: public static final int RENDERING_MODE_FILL_THEN_STROKE_TEXT_AND_ADD_TO_PATH_FOR_CLIPPING = 6;
070: /**
071: * See PDF Reference 1.5 Table 5.3.
072: */
073: public static final int RENDERING_MODE_ADD_TEXT_TO_PATH_FOR_CLIPPING = 7;
074:
075: //these are set default according to PDF Reference 1.5 section 5.2
076: private float characterSpacing = 0;
077: private float wordSpacing = 0;
078: private float horizontalScaling = 100;
079: private float leading = 0;
080: private PDFont font;
081: private float fontSize;
082: private int renderingMode = 0;
083: private float rise = 0;
084: private boolean knockout = true;
085:
086: /**
087: * Get the value of the characterSpacing.
088: *
089: * @return The current characterSpacing.
090: */
091: public float getCharacterSpacing() {
092: return characterSpacing;
093: }
094:
095: /**
096: * Set the value of the characterSpacing.
097: *
098: * @param value The characterSpacing.
099: */
100: public void setCharacterSpacing(float value) {
101: characterSpacing = value;
102: }
103:
104: /**
105: * Get the value of the wordSpacing.
106: *
107: * @return The wordSpacing.
108: */
109: public float getWordSpacing() {
110: return wordSpacing;
111: }
112:
113: /**
114: * Set the value of the wordSpacing.
115: *
116: * @param value The wordSpacing.
117: */
118: public void setWordSpacing(float value) {
119: wordSpacing = value;
120: }
121:
122: /**
123: * Get the value of the horizontalScaling. The default is 100. This value
124: * is the percentage value 0-100 and not 0-1. So for mathematical operations
125: * you will probably need to divide by 100 first.
126: *
127: * @return The horizontalScaling.
128: */
129: public float getHorizontalScalingPercent() {
130: return horizontalScaling;
131: }
132:
133: /**
134: * Set the value of the horizontalScaling.
135: *
136: * @param value The horizontalScaling.
137: */
138: public void setHorizontalScalingPercent(float value) {
139: horizontalScaling = value;
140: }
141:
142: /**
143: * Get the value of the leading.
144: *
145: * @return The leading.
146: */
147: public float getLeading() {
148: return leading;
149: }
150:
151: /**
152: * Set the value of the leading.
153: *
154: * @param value The leading.
155: */
156: public void setLeading(float value) {
157: leading = value;
158: }
159:
160: /**
161: * Get the value of the font.
162: *
163: * @return The font.
164: */
165: public PDFont getFont() {
166: return font;
167: }
168:
169: /**
170: * Set the value of the font.
171: *
172: * @param value The font.
173: */
174: public void setFont(PDFont value) {
175: font = value;
176: }
177:
178: /**
179: * Get the value of the fontSize.
180: *
181: * @return The fontSize.
182: */
183: public float getFontSize() {
184: return fontSize;
185: }
186:
187: /**
188: * Set the value of the fontSize.
189: *
190: * @param value The fontSize.
191: */
192: public void setFontSize(float value) {
193: fontSize = value;
194: }
195:
196: /**
197: * Get the value of the renderingMode.
198: *
199: * @return The renderingMode.
200: */
201: public int getRenderingMode() {
202: return renderingMode;
203: }
204:
205: /**
206: * Set the value of the renderingMode.
207: *
208: * @param value The renderingMode.
209: */
210: public void setRenderingMode(int value) {
211: renderingMode = value;
212: }
213:
214: /**
215: * Get the value of the rise.
216: *
217: * @return The rise.
218: */
219: public float getRise() {
220: return rise;
221: }
222:
223: /**
224: * Set the value of the rise.
225: *
226: * @param value The rise.
227: */
228: public void setRise(float value) {
229: rise = value;
230: }
231:
232: /**
233: * Get the value of the knockout.
234: *
235: * @return The knockout.
236: */
237: public boolean getKnockoutFlag() {
238: return knockout;
239: }
240:
241: /**
242: * Set the value of the knockout.
243: *
244: * @param value The knockout.
245: */
246: public void setKnockoutFlag(boolean value) {
247: knockout = value;
248: }
249:
250: /**
251: * {@inheritDoc}
252: */
253: public Object clone() {
254: try {
255: return super .clone();
256: } catch (CloneNotSupportedException ignore) {
257: //ignore
258: }
259: return null;
260: }
261: }
|