Merge XDP data with dynamic XFA form

Merge XDP data with dynamic XFA form

The following code imports XDP data into a dynamic XFA form.

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

  // import
  using (FileStream inXdp = new FileStream("data.xdp", FileMode.Open, FileAccess.Read))
  {
    XdpFormData xdpData = new XdpFormData(inXdp);
    document.Import(xdpData);
  }

  // save
  using (FileStream outFile = new FileStream("Purchase Order Filled.pdf", FileMode.Create, FileAccess.Write))
  {
    document.Write(outFile);
  }
}

Form before and after import

Note how table rows are added dynamically and how content is pushed to the next page.

Xfa Import

data.xdp

<?xml version="1.0" encoding="UTF-8"?>
<?xfa generator="XFA2_4" APIVersion="3.6.14118.0"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/" timeStamp="2007-06-21T22:17:23Z" uuid="0a7f2f56-4f7e-416d-b914-5bb4414629ad">
  <xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
    <xfa:data>
      <form1>
        <header>
          <txtPONum/>
          <dtmDate/>
          <txtOrderedByCompanyName>Company Name</txtOrderedByCompanyName>
          <txtOrderedByAddress/><txtOrderedByCity/>
          <drpOrderedByCountry>Canada</drpOrderedByCountry>
          <drpOrderedByStateProv>New Brunswick</drpOrderedByStateProv>
          <txtOrderedByZipCode/>
          <txtOrderedByPhone/>
          <txtOrderedByFax/>
          <txtOrderedByContactName/>
          <txtDeliverToCompanyName/>
          <txtDeliverToAddress/>
          <txtDeliverToCity>San Francisco</txtDeliverToCity>
          <drpDeliverToCountry>United States</drpDeliverToCountry>
          <drpDeliverToStateProv>California</drpDeliverToStateProv>
          <txtDeliverToZipCode/>
          <txtDeliverTotPhone/>
          <txtDeliverToFax/>
          <txtDeliverToContactName/>
        </header>
        <details>
          <detailHeader1 xfa:dataNode="dataGroup"/>
          <detailHeader2 xfa:dataNode="dataGroup"/>
          <detail>
            <txtPartNum>580463116</txtPartNum>
            <txtDescription>Electric Fuel Pump</txtDescription>
            <numQty>1</numQty>
            <numUnitPrice>149.95000000</numUnitPrice>
            <numAmount>149.95000000</numAmount>
          </detail>
          <detail>
            <txtPartNum>25906311C</txtPartNum>
            <txtDescription>Air Flow Meter</txtDescription>
            <numQty>1</numQty>
            <numUnitPrice>145.95000000</numUnitPrice>
            <numAmount>145.95000000</numAmount>
          </detail>
          <detail>
            <txtPartNum>25129637J</txtPartNum>
            <txtDescription>Air Intake Sleeve</txtDescription>
            <numQty>1</numQty>
            <numUnitPrice>98.95000000</numUnitPrice>
            <numAmount>98.95000000</numAmount>
          </detail>
          <total>
            <conditions>
              <TermsConditions/>
              <drpCardType> </drpCardType>
              <txtCardNum/>
            </conditions>
            <totals>
              <numTotal>411.75000000</numTotal>
              <chkStateTax>0</chkStateTax>
              <numStateTaxRate/>
              <numStateTax>0.00000000</numStateTax>
              <chkFederalTax>0</chkFederalTax>
              <numFederalTaxRate/>
              <numFederalTax>0.00000000</numFederalTax>
              <chkShippingCharge>0</chkShippingCharge>
              <numShippingCharge/>
              <numGrandTotal>411.75000000</numGrandTotal>
            </totals>
          </total>
          <detail>
            <txtPartNum>771128</txtPartNum>
            <txtDescription>Fuel Filter</txtDescription>
            <numQty>1</numQty>
            <numUnitPrice>10.95000000</numUnitPrice>
            <numAmount>10.95000000</numAmount>
          </detail>
          <detail>
            <txtPartNum>11198262A</txtPartNum>
            <txtDescription>Fuel Injector Seal Set</txtDescription>
            <numQty>1</numQty>
            <numUnitPrice>5.95000000</numUnitPrice>
            <numAmount>5.95000000</numAmount>
          </detail>
        </details>
        <commentsHeader xfa:dataNode="dataGroup"/>
        <footer xfa:dataNode="dataGroup"/>
      </form1>
    </xfa:data>
  </xfa:datasets>
  <pdf href="Purchase Order.pdf" xmlns="http://ns.adobe.com/xdp/pdf/"/>
</xdp:xdp>