001: /**
002: * Copyright (c) 2004-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.form;
031:
032: import org.pdfbox.cos.COSDictionary;
033: import org.pdfbox.cos.COSInteger;
034: import org.pdfbox.cos.COSName;
035: import org.pdfbox.cos.COSNumber;
036: import org.pdfbox.cos.COSString;
037: import org.pdfbox.util.BitFlagHelper;
038:
039: import java.io.IOException;
040:
041: /**
042: * A class for handling PDF fields that display text.
043: *
044: * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
045: * @version $Revision: 1.7 $
046: */
047: public abstract class PDVariableText extends PDField {
048: /**
049: * A Ff flag.
050: */
051: public static final int FLAG_MULTILINE = 1 << 12;
052: /**
053: * A Ff flag.
054: */
055: public static final int FLAG_PASSWORD = 1 << 13;
056: /**
057: * A Ff flag.
058: */
059: public static final int FLAG_FILE_SELECT = 1 << 20;
060: /**
061: * A Ff flag.
062: */
063: public static final int FLAG_DO_NOT_SPELL_CHECK = 1 << 22;
064: /**
065: * A Ff flag.
066: */
067: public static final int FLAG_DO_NOT_SCROLL = 1 << 23;
068: /**
069: * A Ff flag.
070: */
071: public static final int FLAG_COMB = 1 << 24;
072: /**
073: * A Ff flag.
074: */
075: public static final int FLAG_RICH_TEXT = 1 << 25;
076:
077: /**
078: * DA Default appearance.
079: */
080: private COSString da;
081:
082: private PDAppearance appearance;
083:
084: /**
085: * A Q value.
086: */
087: public static final int QUADDING_LEFT = 0;
088:
089: /**
090: * A Q value.
091: */
092: public static final int QUADDING_CENTERED = 1;
093:
094: /**
095: * A Q value.
096: */
097: public static final int QUADDING_RIGHT = 2;
098:
099: /**
100: * @see PDField#PDField(PDAcroForm,COSDictionary)
101: *
102: * @param theAcroForm The acroform.
103: */
104: public PDVariableText(PDAcroForm theAcroForm) {
105: super (theAcroForm);
106: }
107:
108: /**
109: * @see org.pdfbox.pdmodel.interactive.form.PDField#PDField(PDAcroForm,COSDictionary)
110: *
111: * @param theAcroForm The acroForm for this field.
112: * @param field The field's dictionary.
113: */
114: public PDVariableText(PDAcroForm theAcroForm, COSDictionary field) {
115: super (theAcroForm, field);
116: da = (COSString) field.getDictionaryObject(COSName
117: .getPDFName("DA"));
118: }
119:
120: /**
121: * @see org.pdfbox.pdmodel.interactive.form.PDField#setValue(java.lang.String)
122: *
123: * @param value The new value for this text field.
124: *
125: * @throws IOException If there is an error calculating the appearance stream.
126: */
127: public void setValue(String value) throws IOException {
128: COSString fieldValue = new COSString(value);
129: getDictionary().setItem(COSName.getPDFName("V"), fieldValue);
130:
131: //hmm, not sure what the case where the DV gets set to the field
132: //value, for now leave blank until we can come up with a case
133: //where it needs to be in there
134: //getDictionary().setItem( COSName.getPDFName( "DV" ), fieldValue );
135: if (appearance == null) {
136: this .appearance = new PDAppearance(getAcroForm(), this );
137: }
138: appearance.setAppearanceValue(value);
139: }
140:
141: /**
142: * getValue gets the fields value to as a string.
143: *
144: * @return The string value of this field.
145: *
146: * @throws IOException If there is an error getting the value.
147: */
148: public String getValue() throws IOException {
149: return getDictionary().getString("V");
150: }
151:
152: /**
153: * @return true if the field is multiline
154: */
155: public boolean isMultiline() {
156: return BitFlagHelper.getFlag(getDictionary(), "Ff",
157: FLAG_MULTILINE);
158: }
159:
160: /**
161: * Set the multiline bit.
162: *
163: * @param multiline The value for the multiline.
164: */
165: public void setMultiline(boolean multiline) {
166: BitFlagHelper.setFlag(getDictionary(), "Ff", FLAG_MULTILINE,
167: multiline);
168: }
169:
170: /**
171: * @return true if the field is a password field.
172: */
173: public boolean isPassword() {
174: return BitFlagHelper.getFlag(getDictionary(), "Ff",
175: FLAG_PASSWORD);
176: }
177:
178: /**
179: * Set the password bit.
180: *
181: * @param password The value for the password.
182: */
183: public void setPassword(boolean password) {
184: BitFlagHelper.setFlag(getDictionary(), "Ff", FLAG_PASSWORD,
185: password);
186: }
187:
188: /**
189: * @return true if the field is a file select field.
190: */
191: public boolean isFileSelect() {
192: return BitFlagHelper.getFlag(getDictionary(), "Ff",
193: FLAG_FILE_SELECT);
194: }
195:
196: /**
197: * Set the file select bit.
198: *
199: * @param fileSelect The value for the fileSelect.
200: */
201: public void setFileSelect(boolean fileSelect) {
202: BitFlagHelper.setFlag(getDictionary(), "Ff", FLAG_FILE_SELECT,
203: fileSelect);
204: }
205:
206: /**
207: * @return true if the field is not suppose to spell check.
208: */
209: public boolean doNotSpellCheck() {
210: return BitFlagHelper.getFlag(getDictionary(), "Ff",
211: FLAG_DO_NOT_SPELL_CHECK);
212: }
213:
214: /**
215: * Set the doNotSpellCheck bit.
216: *
217: * @param doNotSpellCheck The value for the doNotSpellCheck.
218: */
219: public void setDoNotSpellCheck(boolean doNotSpellCheck) {
220: BitFlagHelper.setFlag(getDictionary(), "Ff",
221: FLAG_DO_NOT_SPELL_CHECK, doNotSpellCheck);
222: }
223:
224: /**
225: * @return true if the field is not suppose to scroll.
226: */
227: public boolean doNotScroll() {
228: return BitFlagHelper.getFlag(getDictionary(), "Ff",
229: FLAG_DO_NOT_SCROLL);
230: }
231:
232: /**
233: * Set the doNotScroll bit.
234: *
235: * @param doNotScroll The value for the doNotScroll.
236: */
237: public void setDoNotScroll(boolean doNotScroll) {
238: BitFlagHelper.setFlag(getDictionary(), "Ff",
239: FLAG_DO_NOT_SCROLL, doNotScroll);
240: }
241:
242: /**
243: * @return true if the field is not suppose to comb the text display.
244: */
245: public boolean shouldComb() {
246: return BitFlagHelper.getFlag(getDictionary(), "Ff", FLAG_COMB);
247: }
248:
249: /**
250: * Set the comb bit.
251: *
252: * @param comb The value for the comb.
253: */
254: public void setComb(boolean comb) {
255: BitFlagHelper.setFlag(getDictionary(), "Ff", FLAG_COMB, comb);
256: }
257:
258: /**
259: * @return true if the field is a rich text field.
260: */
261: public boolean isRichText() {
262: return BitFlagHelper.getFlag(getDictionary(), "Ff",
263: FLAG_RICH_TEXT);
264: }
265:
266: /**
267: * Set the richText bit.
268: *
269: * @param richText The value for the richText.
270: */
271: public void setRichText(boolean richText) {
272: BitFlagHelper.setFlag(getDictionary(), "Ff", FLAG_RICH_TEXT,
273: richText);
274: }
275:
276: /**
277: * @return the DA element of the dictionary object
278: */
279: protected COSString getDefaultAppearance() {
280: return da;
281: }
282:
283: /**
284: * This will get the 'quadding' or justification of the text to be displayed.
285: * 0 - Left(default)<br/>
286: * 1 - Centered<br />
287: * 2 - Right<br />
288: * Please see the QUADDING_CONSTANTS.
289: *
290: * @return The justification of the text strings.
291: */
292: public int getQ() {
293: int retval = 0;
294: COSNumber number = (COSNumber) getDictionary()
295: .getDictionaryObject(COSName.getPDFName("Q"));
296: if (number != null) {
297: retval = number.intValue();
298: }
299: return retval;
300: }
301:
302: /**
303: * This will set the quadding/justification of the text. See QUADDING constants.
304: *
305: * @param q The new text justification.
306: */
307: public void setQ(int q) {
308: getDictionary().setItem(COSName.getPDFName("Q"),
309: new COSInteger(q));
310: }
311:
312: }
|