com.snowtide.pdf.forms
Class AcroButtonField

java.lang.Object
  extended by com.snowtide.pdf.forms.AcroButtonField
All Implemented Interfaces:
AcroFormField, FormField
Direct Known Subclasses:
AcroCheckboxField, AcroRadioButtonGroupField

public class AcroButtonField
extends java.lang.Object

Represents a button form field in an interactive AcroForm. This is the superclass of AcroCheckboxField and AcroRadioButtonGroupField.

There are three possible types of button fields:

Values retained by button fields, available via getValue(), typically have no semantic value related to the context of the form. Intead, they are simple codes used by a PDF viewer to select how to display the field's widget. Developers should therefore not expect button field values to be meaningful or useful within an end-user context. User-friendly values are sometimes specified by button fields; see the section on export values below for details.

If a checkbox is unselected (i.e. visually unchecked), its value will be null, or the String '/Off'. Common base values for checked checkboxes include '/On' and '/Yes'.

Radio Button Groups

AcroRadioButtonGroupField instances represent groups of radio button widgets. The value returned by such fields is therefore the one associated with the radio button widget that is selected -- all other options in the group are necessarily unselected.

A typical example would be a radio button group indicating payment options (Mastercard, Visa, AMEX, etc). There would be one widget shown in the PDF form for each option; PDFTextStream would represent the group of widgets as a single AcroRadioButtonGroupField instance. That form field instance would retain a value indicating the selected widget (one of the Strings '/Mastercard', '/Visa', or '/AMEX', perhaps), or the String '/Off', or null (both of which would indicate that none of the widgets in the radio button group are selected).

Export Values

Buttons can specify export values as well as base values. A button's retained export value is available via getExportValue(); all of a button's potential export values are available as a java.util.List of Strings via getExportValues(). PDFTextStream automatically determines a button's export value, so there is no need for applications to attempt to derive a button's export value using its retained value.

When export values are used, a button's potential retained values are just codes. Continuing with the payment options example from above, a radio button group might specify a set of possible export values like [ "Mastercard", "Visa", "AMEX" ]. It might therefore retain a base value of '/1' or '/Visa' as a code indicating that the "Visa" widget was selected; the export value reported by getExportValue() would return the String "Visa" in this example.

Note that checkbox fields can also have export values, although they are restricted to having only two potential export values (one for the selected state, one for the unselected state).

Version:
©2004-2012 Snowtide Informatics Systems, Inc.

Field Summary
static int BUTTON_TYPE_CHECKBOX
          Code returned by getButtonType() when a AcroButtonField represents a checkbox.
static int BUTTON_TYPE_PUSHBUTTON
          Code returned by getButtonType() when a AcroButtonField represents a pushbutton.
static int BUTTON_TYPE_RADIO_GROUP
          Code returned by getButtonType() when a AcroButtonField represents a group of radio buttons.
protected  com.snowtide.pdf.PDFTextStreamCallback callback
           
static java.lang.String DEFAULT_UNSELECTED_VALUE
          This String ("/Off") is the typical value associated with the unselected appearance for both checkboxes and radio buttons.
 
Fields inherited from interface com.snowtide.pdf.forms.AcroFormField
FIELD_TYPE_BUTTON, FIELD_TYPE_CHOICE, FIELD_TYPE_OTHER, FIELD_TYPE_SIGNATURE, FIELD_TYPE_TEXT
 
Method Summary
 boolean canChangeValue()
          This function returns true only if this form field is of a subtype that supports setting its value.
 int getButtonType()
          Returns an indicator of what type of button this field object represents.
 java.lang.Object getDefaultValue()
          Returns the default value to which the field reverts when a reset-form action is executed, as specified in the /DV entry in this field's PDF dictionary.
 java.lang.String getExportValue()
           Returns the export value set on this button field.
 java.util.List getExportValues()
           Returns a java.util.List of the possible export values of this button field, as dictated by the field dictionary's /Opt entry.
 java.lang.String getFullName()
          Returns the fully-qualified name of this field, which should be unique within a PDF document form.
 java.lang.String getLocalName()
          Returns the local name of the field, as specified in the /T entry in this field's PDF dictionary.
 java.lang.String getMappingName()
          Returns the 'mapping name' of this field, as specified in the /TM entry in this field's PDF dictionary.
 java.lang.String getName()
          Returns the canonical name of this field.
 java.lang.Object getType()
          Returns the type of field, as specified in the /FT entry in this field's PDF dictionary.
 java.lang.String getUIName()
           Returns the user-friendly name of this field, as specified in the /TU entry in this field's PDF dictionary.
 java.lang.Object getValue()
          Returns this button's 'base value', which is actually a code used by a PDF viewer to determine how to draw a button's widget.
 boolean hasValueChanged()
          Returns true only if this field's value has been changed since being loaded from the PDF document.
 boolean isReadOnly()
          Returns true only if this field is designated as read-only.
 boolean setValue(java.lang.String arg0)
           Sets the value of this form field.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_UNSELECTED_VALUE

public static final java.lang.String DEFAULT_UNSELECTED_VALUE
This String ("/Off") is the typical value associated with the unselected appearance for both checkboxes and radio buttons.

See Also:
Constant Field Values

BUTTON_TYPE_PUSHBUTTON

public static final int BUTTON_TYPE_PUSHBUTTON
Code returned by getButtonType() when a AcroButtonField represents a pushbutton. Such fields rarely retain any value.

See Also:
Constant Field Values

BUTTON_TYPE_CHECKBOX

public static final int BUTTON_TYPE_CHECKBOX
Code returned by getButtonType() when a AcroButtonField represents a checkbox.

See Also:
Constant Field Values

BUTTON_TYPE_RADIO_GROUP

public static final int BUTTON_TYPE_RADIO_GROUP
Code returned by getButtonType() when a AcroButtonField represents a group of radio buttons.

See Also:
Constant Field Values

callback

protected final com.snowtide.pdf.PDFTextStreamCallback callback
Method Detail

getExportValues

public java.util.List getExportValues()

Returns a java.util.List of the possible export values of this button field, as dictated by the field dictionary's /Opt entry. Each member of the returned list is a String.

If no export values are defined by this button field, then this function will return null.

This function is irrelevant for pushbutton fields.

NOTE: In some cases, export values may be defined, but misleading and/or not useful. For example, some checkboxes define two identical export values (one for when the checkbox is checked, the other for when it is not). In such circumstances, it is therefore better to rely upon the base value provided by the button field, which is guaranteed to be distinct for each button state.


getExportValue

public java.lang.String getExportValue()

Returns the export value set on this button field. This is distinct from the field's base value, in that the export value is typically designed to either integrate smoothly with external tools, systems, etc., or to be user friendly.

This function is irrelevant for pushbutton fields.

If this button field does not specify any export values, then this function will return null.

NOTE: In some cases, export values may be defined, but misleading and/or not useful. For example, some checkboxes define two identical export values (one for when the checkbox is checked, the other for when it is not). In such circumstances, it is therefore better to rely upon the base value provided by the button field, which is guaranteed to be distinct for each button state.


getButtonType

public int getButtonType()
Returns an indicator of what type of button this field object represents. Will always be one of BUTTON_TYPE_PUSHBUTTON, BUTTON_TYPE_CHECKBOX, or BUTTON_TYPE_RADIO_GROUP.


getValue

public java.lang.Object getValue()
Returns this button's 'base value', which is actually a code used by a PDF viewer to determine how to draw a button's widget. See this class' main documentation for a detailed explanation of the implications of certain standard base values.

Specified by:
getValue in interface AcroFormField
Specified by:
getValue in interface FormField

isReadOnly

public boolean isReadOnly()
Description copied from interface: AcroFormField
Returns true only if this field is designated as read-only. Note that this is just a hint, provided for the benefit of end-user tools. PDFTextStream does not enforce the read-only state of a form field; i.e. it will allow a field's value to be set even if it is designated as read-only.

Specified by:
isReadOnly in interface AcroFormField

getDefaultValue

public java.lang.Object getDefaultValue()
Description copied from interface: AcroFormField
Returns the default value to which the field reverts when a reset-form action is executed, as specified in the /DV entry in this field's PDF dictionary. The type of the returned object will be the same as the type of object returned by the AcroFormField.getValue() function, and depends upon the type of this field.

Specified by:
getDefaultValue in interface AcroFormField

getFullName

public java.lang.String getFullName()
Description copied from interface: AcroFormField

Returns the fully-qualified name of this field, which should be unique within a PDF document form. Details of how full names are constructed are specified in Section 8.6.2 (Field Names) of the PDF Document Specification.

It suffices to say here that form fields in an interactive AcroForm are defined in a hierarchical manner, and that their local names are used to derive a period-delimited full name that guarantees each name's uniqueness within the parent AcroForm.

Specified by:
getFullName in interface AcroFormField

getLocalName

public java.lang.String getLocalName()
Description copied from interface: AcroFormField
Returns the local name of the field, as specified in the /T entry in this field's PDF dictionary. This name is also used as the value returned by the FormField.getName() implementation.

Specified by:
getLocalName in interface AcroFormField

getMappingName

public java.lang.String getMappingName()
Description copied from interface: AcroFormField
Returns the 'mapping name' of this field, as specified in the /TM entry in this field's PDF dictionary. The mapping name is used to identify the field in exported form data formats. This function can return null if no mapping name is defined.

Specified by:
getMappingName in interface AcroFormField

getName

public java.lang.String getName()
Description copied from interface: FormField
Returns the canonical name of this field. Only one FormField instance with a particular name should be available from a Form instance.

Specified by:
getName in interface FormField

getType

public java.lang.Object getType()
Description copied from interface: AcroFormField
Returns the type of field, as specified in the /FT entry in this field's PDF dictionary. This is an indication of the subtype of this AcroFormField instance:

Specified by:
getType in interface AcroFormField

setValue

public boolean setValue(java.lang.String arg0)
                 throws java.lang.UnsupportedOperationException
Description copied from interface: AcroFormField

Sets the value of this form field. Each AcroFormField implementation may specify additional varieties of setValue() to support unique functionality (such as holding multiple values). For any form field instance, this function will throw an UnsupportedOperationException if it does not support updates; such instances will return false from AcroFormField.canChangeValue(). This function will return true if the form field's value changes as a result of calling this function (i.e. the given value is different from the current value of the form field).

Either AcroForm.writeUpdatedDocument(java.io.File) or AcroForm.writeUpdatedDocument(java.io.OutputStream) must be called after setting any form field values in order to persist such changes to a PDF document.

Specified by:
setValue in interface AcroFormField
Throws:
java.lang.UnsupportedOperationException - - if an AcroFormField implementation does not support updates.

hasValueChanged

public boolean hasValueChanged()
Description copied from interface: AcroFormField
Returns true only if this field's value has been changed since being loaded from the PDF document.

Specified by:
hasValueChanged in interface AcroFormField

canChangeValue

public boolean canChangeValue()
Description copied from interface: AcroFormField
This function returns true only if this form field is of a subtype that supports setting its value. This includes checkboxes, radio button groups, text fields, and choice fields (lists and dropdown controls).

Specified by:
canChangeValue in interface AcroFormField

getUIName

public java.lang.String getUIName()
Description copied from interface: AcroFormField

Returns the user-friendly name of this field, as specified in the /TU entry in this field's PDF dictionary. This function can return null if no user-friendly field name is defined.

Specified by:
getUIName in interface AcroFormField
Specified by:
getUIName in interface FormField