Fill and save dynamic XFA form

The following code opens a XFA form and programmatically fills text fields, selects an item from a drop-down list and ‘clicks’ a button. It also subscribes to the Changed event of the field collection of the document. A feature of dynamic XFA forms is that it can add new content such as new table rows including new fields.

using (FileStream inFile = new FileStream("Purchase Order.pdf", FileMode.Open, FileAccess.Read))
{
  // open 
  Document document = new Document(inFile);
  document.Fields.Changed += Fields_Changed;

  // fill
  TextField textField = document.Fields["form1[0].purchaseOrder[0].header[0].txtOrderedByCompanyName[0]"] 
    as TextField;
  textField.Value = "My Company";

  DropDownListField countryField = document.Fields["form1[0].purchaseOrder[0].header[0].drpOrderedByCountry[0]"] 
    as DropDownListField;
  countryField.DropDownListValue = countryField.Options[1]; // second option ('Canada')

  DropDownListField stateField = document.Fields["form1[0].purchaseOrder[0].header[0].drpOrderedByStateProv[0]"] 
    as DropDownListField;
  stateField.DropDownListValue = stateField.Options[2]; // third option ('Manitoba')

  PushButtonField addButtonField = document.Fields["form1[0].purchaseOrder[0].details[0].detailHeader1[0].Button1[0]"] 
    as PushButtonField;
  addButtonField.XfaInfo.ClickActions.Execute(); // invoke the buttons click action

  // note that after clicking the 'Add Item' button, 6 new fields were added to the collection
  DropDownListField partNoDropDown = document.Fields["form1[0].purchaseOrder[0].details[0].detail[3].txtPartNum[0]"] 
    as DropDownListField;
  partNoDropDown.DropDownListValue = partNoDropDown.Options[1]; // second option 
                                                                // Decription fields value changes to 'Electric Fuel Pump'

  // write the target document to disk
  using (FileStream outFile = new FileStream("Purchase Order Filled.pdf", FileMode.Create, FileAccess.Write))
  {
    document.Write(outFile);
  }
}

private static void Fields_Changed(FieldCollection sender, FieldsChangedEventArgs e)
{
  // note that after invoking the 'Add Item' buttons Click action, 6 new fields were added to the collection
  System.Diagnostics.Debug.Assert(e.Added.Length == 6);
}
Download PDFKit.NET 5.0
We will send you a download link
  • This field is for validation purposes and should be left unchanged.
Why do we ask your email address?
We send tips that speed up your evaluation
We let you know about bug fixes
You can always unsubscribe with one click
We never share your address with a 3rd party
Thank you for your download

We have sent an email with a download link.