How to Fill XFA Form Fields in C#, VB.NET

XFA forms are XML-based forms created by Adobe's LiveCycle Designer tool, which offer enhanced features over the old AcroForms, like changeable text fields and support for running JavaScript. Spire.PDF supports to access the XFA forms in an existing PDF file and fill the fields with data.

Step 1: Initialize an instance of PdfDocument class and load a sample PDF file containing dynamic XFA forms.

PdfDocument doc = new PdfDocument();
doc.LoadFromFile("DynamicXFA.pdf");

Step 2: Get all form widgets from the document.

PdfFormWidget formWidget = doc.Form as PdfFormWidget;

Step 3: Get a list of XFA Fields.

List<XfaField> xfafields = formWidget.XFAForm.XfaFields;

Step 4: Traverse each XfaField in the list and judge if it is an XfaTextField, if yes, convert the type of XfaField as an XfaTextField and then assign value to the field based on the field name.

foreach (XfaField xfaField in xfaFields)
{
    if (xfaField is XfaTextField)
    {
        XfaTextField xf = xfaField as XfaTextField;
        switch (xfaField.Name)
        {
            case "EmployeeName":
                xf.Value = "Gary";
                break;
            case "Address":
                xf.Value = "Chengdu, China";
                break;
            case "StateProv":
                xf.Value = "Sichuan Province";
                break;
            case "ZipCode":
                xf.Value = "610093";
                break;
            case "SSNumber":
                xf.Value = "000-00-0000";
                break;
            case "HomePhone":
                xf.Value = "86-028-81705109";
                break;
            case "CellPhone":
                xf.Value = "123456789";
                break;
            case "Comments":
                xf.Value = "This demo shows how to fill XFA forms using Spire.PDF";
                break;
            default:
                break;
        }
    }
}

Step 5: Save the file.

doc.SaveToFile("FillXfaField.pdf",FileFormat.PDF);

Output:

How to Fill XFA Form Fields in C#, VB.NET

Full Code:

[C#]
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("DynamicXFA.pdf");

PdfFormWidget formWidget = doc.Form as PdfFormWidget;   
List<XfaField> xfafields = formWidget.XFAForm.XfaFields;
foreach (XfaField xfaField in xfaFields)
{
    if (xfaField is XfaTextField)
    {
        XfaTextField xf = xfaField as XfaTextField;
        switch (xfaField.Name)
        {
            case "EmployeeName":
                xf.Value = "Gary";
                break;
            case "Address":
                xf.Value = "Chengdu, China";
                break;
            case "StateProv":
                xf.Value = "Sichuan Province";
                break;
            case "ZipCode":
                xf.Value = "610093";
                break;
            case "SSNumber":
                xf.Value = "000-00-0000";
                break;
            case "HomePhone":
                xf.Value = "86-028-81705109";
                break;
            case "CellPhone":
                xf.Value = "123456789";
                break;
            case "Comments":
                xf.Value = "This demo shows how to fill XFA forms using Spire.PDF";
                break;
            default:
                break;
        }
    }
}
doc.SaveToFile("FillXfaField.pdf",FileFormat.PDF);
[VB.NET]
Dim doc As New PdfDocument()
doc.LoadFromFile("DynamicXFA.pdf")

Dim formWidget As PdfFormWidget = TryCast(doc.Form, PdfFormWidget)
Dim xfaFields As List(Of XfaField) = formWidget.XFAForm.XfaFields
For Each xfaField As XfaField In xfaFields

    If TypeOf xfaField Is XfaTextField Then

        Dim xf As XfaTextField = TryCast(xfaField, XfaTextField)

        Select Case xfaField.Name
            Case "EmployeeName"
				xf.Value = "Gary"
				Exit Select

            Case "Address"
				xf.Value = "Chengdu, China"
				Exit Select

            Case "StateProv"
				xf.Value = "Sichuan Province"
				Exit Select

            Case "ZipCode"
				xf.Value = "610093"
				Exit Select

            Case "SSNumber"
				xf.Value = "000-00-0000"
				Exit Select

            Case "HomePhone"
				xf.Value = "86-028-81705109"
				Exit Select

            Case "CellPhone"
				xf.Value = "123456789"
				Exit Select

            Case "Comments"
				xf.Value = "This demo shows how to fill XFA forms using Spire.PDF"
				Exit Select

            Case Else

                Exit Select

        End Select

    End If
Next
doc.SaveToFile("FillXfaField.pdf", FileFormat.PDF)