Fill and save dynamic XFA form
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);
}