windowsforms-403052-controls-and-libraries-pdf-viewer-examples-pdf-facade-api-how-to-change-form-field-properties.md
The following article describes how to use PDF Document Facade to edit AcroForm field properties.
Important
The Universal Subscription or an additional Office File API Subscription is required to use this example in production code. Refer to the DevExpress Subscription page for pricing information.
The PdfViewerExtensions.GetDocumentFacade method retrieves the PdfDocumentFacade class object that allows you to change the PDF document without access to its inner structure. Use the PdfDocumentFacade.AcroForm property to get interactive form field options. You can change form field and appearance properties.
Utilize one of the following methods to get form field properties:
| Method | Description |
|---|---|
| GetFields() | Retrieves all AcroForm fields. |
| GetFormField | Obtains properties of a field with a specific name. |
| GetButtonFormField | |
| GetCheckBoxFormField | |
| GetComboBoxFormField | |
| and so on | Returns properties of a specific form field type. |
| GetNames() | Gets a list of form field names. |
The following code snippet changes available form field parameters:
pdfViewer.LoadDocument("Documents//FormDemo.pdf");
PdfDocumentFacade documentFacade = pdfViewer.GetDocumentFacade();
PdfAcroFormFacade acroForm = documentFacade.AcroForm;
// Obtain text form field properties:
PdfTextFormFieldFacade visaField = acroForm.GetTextFormField("VisaNo");
// Divide field text into equally spaced positions:
visaField.InputType = PdfTextFieldInputType.Comb;
visaField.Multiline = false;
// Limit number of inserted characters:
visaField.MaxLength = 8;
// Enable multiline text in the text field:
PdfTextFormFieldFacade addressField = acroForm.GetTextFormField("Address");
addressField.Multiline = true;
addressField.Scrollable = true;
addressField.SpellCheck = false;
// Set radio group options:
PdfRadioGroupFormFieldFacade genderField = acroForm.GetRadioGroupFormField("Gender");
genderField.RadiosInUnison = true;
genderField.ToggleToOff = false;
PdfComboBoxFormFieldFacade nationalityField = acroForm.GetComboBoxFormField("Nationality");
// Disable user input in the combo box:
nationalityField.Editable = false;
// Sort list items alphabetically:
nationalityField.Sorted = true;
pdfViewer.SaveDocument();
pdfViewer.LoadDocument("Documents//FormDemo.pdf")
Dim documentFacade As PdfDocumentFacade = pdfViewer.GetDocumentFacade()
Dim acroForm As PdfAcroFormFacade = documentFacade.AcroForm
' Obtain text form field properties:
Dim visaField As PdfTextFormFieldFacade = acroForm.GetTextFormField("VisaNo")
' Divide field text into equally spaced positions:
visaField.InputType = PdfTextFieldInputType.Comb
visaField.Multiline = False
' Limit number of inserted characters:
visaField.MaxLength = 8
' Enable multiline text in the text field:
Dim addressField As PdfTextFormFieldFacade = acroForm.GetTextFormField("Address")
addressField.Multiline = True
addressField.Scrollable = True
addressField.SpellCheck = False
' Set radio group options:
Dim genderField As PdfRadioGroupFormFieldFacade = acroForm.GetRadioGroupFormField("Gender")
genderField.RadiosInUnison = True
genderField.ToggleToOff = False
Dim nationalityField As PdfComboBoxFormFieldFacade = acroForm.GetComboBoxFormField("Nationality")
' Disable user input in the combo box:
nationalityField.Editable = False
' Disable multiple selection:
nationalityField.MultiSelect = False
' Sort list items alphabetically:
nationalityField.Sorted = True
pdfViewer.SaveDocument()
A widget annotation contains a form field’s display properties. One field can be related to multiple widget annotations. The PdfWidgetFacade class contains widget options that apply to all form fields.
The following code snippet retrieves all fields and changes their color settings:
pdfViewer.LoadDocument("Documents//FormDemo.pdf");
PdfDocumentFacade documentFacade = pdfViewer.GetDocumentFacade();
PdfAcroFormFacade acroForm = documentFacade.AcroForm;
// Change color settings for all form fields:
var fields = acroForm.GetFields();
foreach (PdfFormFieldFacade field in fields)
{
ChangeFormFieldColor(field);
}
pdfViewer.SaveDocument();
private static void ChangeFormFieldColor(PdfFormFieldFacade field)
{
foreach (PdfWidgetFacade pdfWidget in field)
{
// Change color and border settings
// for all form fields:
pdfWidget.BorderWidth = 1;
pdfWidget.BackgroundColor = new PdfRGBColor(0.81, 0.81, 0.81);
pdfWidget.BorderColor = new PdfRGBColor(0.47, 0.44, 0.67);
pdfWidget.FontColor = new PdfRGBColor(0.34, 0.25, 0.36);
// Change border style for text form fields:
if (field.Type == PdfFormFieldType.Text)
{
pdfWidget.BorderStyle = PdfBorderStyle.Underline;
}
}
}
pdfViewer.LoadDocument("Documents//FormDemo.pdf")
Dim documentFacade As PdfDocumentFacade = pdfViewer.GetDocumentFacade()
Dim acroForm As PdfAcroFormFacade = documentFacade.AcroForm
' Change color settings for all form fields:
Dim fields = acroForm.GetFields()
For Each field As PdfFormFieldFacade In fields
ChangeFormFieldColor(field)
Next field
pdfViewer.SaveDocument()
private static void ChangeFormFieldColor(PdfFormFieldFacade field)
For Each pdfWidget As PdfWidgetFacade In field
' Change color and border settings
' for all form fields:
pdfWidget.BorderWidth = 1
pdfWidget.BackgroundColor = New PdfRGBColor(0.81, 0.81, 0.81)
pdfWidget.BorderColor = New PdfRGBColor(0.47, 0.44, 0.67)
pdfWidget.FontColor = New PdfRGBColor(0.34, 0.25, 0.36)
' Change border style for text form fields:
If field.Type = PdfFormFieldType.Text Then
pdfWidget.BorderStyle = PdfBorderStyle.Underline
End If
Next pdfWidget
Each form field type has its own widget annotation properties. Use the PdfFormFieldFacade<T, V>.Widgets property to retrieve the widget settings.
The following code snippet changes the push button’s icon and radio group’s marker settings:
pdfViewer.LoadDocument("Documents//FormDemo.pdf");
PdfDocumentFacade documentFacade = pdfViewer.GetDocumentFacade();
PdfAcroFormFacade acroForm = documentFacade.AcroForm;
// Obtain button form field parameters:
PdfButtonFormFieldFacade pushButton = acroForm.GetButtonFormField("Submit");
PdfButtonWidgetFacade buttonWidget = pushButton.Widgets[0];
// Specify a button icon and set its options:
buttonWidget.SetNormalIcon("Documents//submit_3802014.png");
buttonWidget.IconOptions.FitToAnnotationBounds = true;
buttonWidget.IconOptions.ScaleCondition = PdfIconScalingCircumstances.BiggerThanAnnotationRectangle;
buttonWidget.TextPosition = PdfWidgetAnnotationTextPosition.NoCaption;
PdfRadioGroupFormFieldFacade genderField = acroForm.GetRadioGroupFormField("Gender");
// Change marker style for all radio buttons:
foreach (PdfRadioButtonWidgetFacade widget in genderField.Widgets)
{
widget.ButtonStyle = PdfAcroFormButtonStyle.Square;
}
pdfViewer.SaveDocument();
}
pdfViewer.LoadDocument("Documents//FormDemo.pdf")
Dim documentFacade As PdfDocumentFacade = pdfViewer.GetDocumentFacade()
Dim acroForm As PdfAcroFormFacade = documentFacade.AcroForm
' Obtain button form field parameters:
Dim pushButton As PdfButtonFormFieldFacade = acroForm.GetButtonFormField("Submit")
Dim buttonWidget As PdfButtonWidgetFacade = pushButton.Widgets(0)
' Specify a button icon and set its options:
buttonWidget.SetNormalIcon("Documents//submit_3802014.png")
buttonWidget.IconOptions.FitToAnnotationBounds = True
buttonWidget.IconOptions.ScaleCondition = PdfIconScalingCircumstances.BiggerThanAnnotationRectangle
buttonWidget.TextPosition = PdfWidgetAnnotationTextPosition.NoCaption
Dim genderField As PdfRadioGroupFormFieldFacade = acroForm.GetRadioGroupFormField("Gender")
' Change marker style for all radio buttons:
For Each widget As PdfRadioButtonWidgetFacade In genderField.Widgets
widget.ButtonStyle = PdfAcroFormButtonStyle.Square
Next widget
pdfViewer.SaveDocument()
End Using