JetTrac XFAMerge

Introduction:

This program is meant to run as a component of Job Controller. It will read one or more rows of a 2d table from an input XML file and insert the data into a dynamic XFA PDF form. XFAMerge also works on XFA PDFs that contain a subform with no tables.

Technical Support:

If you need assistance in installing and configuring JetTrac XFAMerge™, call Pro Technology Automation, Inc. at 805-527-1248 or email us at support@protechinc.com. Please note that the JetTrac XFAMerge™ license fee does not cover configuration services and technical support so there may be an additional charge. Please ensure you read these instructions carefully before calling for technical support.

How to Run:

To run JetTrac XFAMerge you will need the following files in the same folder:

  • JTXFAMerge.exe
  • ExitHandler.dll
  • DebenuPDFLibraryDLL0916.dll

Executable files and dll files should not be edited for any reason.

Input Files:

XML data file – data is extracted from this file
PDF input file – data is inserted into a copy of this file – contains at least one row of a table to insert into. This PDF file is created with at least one dynamic XFA table.
INI file – configuration data text file, key=value format

Output Files:

PDF output file – copy of PDF input file with rows added to a specified dynamic XFA table
Log file – standard JobController log file – lines are appended for successful completion or error conditions

Job Step Configuration Window in JobConfig for JetTrac XFAMerge:

xfamerge.PNG

When setting up a job step using JTXFAMerge in JobConfig the only lines of the config you need to worry about are the first two and the last two, the Config file, the PDF Template, the Input XML and the Output PDF. If left as an asterisk * the input will be whatever file is in the data folder that triggered the job running. This works well if it’s the first step but if the input is also the output of a previous job step you would need to specify the fully qualified path of the input XML. All other fields should be filled with the fully qualified path to the intended file. Eg: C:\JetTrac\…\input.pdf
In JobConfig, file paths entered should not be in quotes.

As with all modules, there is a dropdown to select whether or not the job should stop completely if this step fails. If you select Yes, any error will terminate the job process and write to the log file what happened, if no, then the job will try to continue anyways. However if any steps further down the line rely on the output of a job set to not stop on error, they may not work properly.

For more specifics go to the JetTrac Field ServiceJobConfig page.

Command line:

“C:\JTXFAMerge.exe” “C:\JTXFAMerge_Input.xml” “C:\JTXFAMerge_PDFTemplate.pdf” “C:\JTXFAMerge_OutputPDF.pdf” “JTXFAMerge_config.ini” “JTXFAMerge.log”

The command line begins with the file path to the module’s executable file followed by the paths to the input XML and PDF files, the desired path and name for the output PDF file, along with the paths to the config and log files. Each part of the command line is the fully qualified path to the file, in quotes, separated by a space (it doesn’t matter how many)

NOTES:

Input PDF file must have (MUST) at least one row, (could have more than one row)
Existing row(s) can be kept, or deleted by setting the flag in the INI file.
The table structure is a simple two-dimensional table
It has rows, and each row has the identical set of column names,
Imagine a spread-sheet with rows and columns.
The value in each column position is a simple value, it can’t be some other kind of complex thing with sub-values. The columns are leaf nodes – is another way of saying this.
The table rows could have only one column – which would make it sort of one-dimensional in a sense, but it can’t have zero columns – what would be the point of that?
If there are multiple tables to be updated, you would run this program once for each dynamic XFA table you want to update.
You can run the program multiple times to update the same table if need be. Each time it is run data can be appended to the end of the existing table.
If you have static data to merge into the file you need to run PdfMerge tool, you can do the before or after you run XFAMerge

INI file:

There are four required keys. An example is shown below.

InputXpath – path to a row in the input XML file. Data will be extracted from all rows that meet this xpath specification.
OutputXpath – path to a row in the XFA XML of the input PDF file. Data rows extracted from the input XML will be inserted into this table.
Columns – shows the mapping of column names in the input XML file to the desired column names in the output XFA PDF file. The format is Input_column_name>Output_column_name. If they are the same, you can just use the input column name. Individual columns are separated by vertical bar separators.
DeleteExistingRows – expects a Y or N value. If Y is specified, any existing rows in the XFA are deleted. If N is specified, the existing rows are retained. All new rows are appended to the bottom of the table regardless of this flag.

# PDF Merge – Dynamic XFA
InputXpath=document/table/row
OutputXpath=xdp:xdp/xfa:datasets/xfa:data/PurchaseOrder/Main/Order/OrderTable/OrderRow
Columns=iQty>Qty|iItemNo>ItemNo|iDescription>Description|iPrice>Price|iTotal>Total
DeleteExistingRows=Y

Sample XML input file:

<?xml version=”1.0″?>
<document>
<table>
<row>
<iQty>1.0</iQty>
<iItemNo>1000</iItemNo>
<iDescription>Item one</iDescription>
<iPrice>10.00</iPrice>
<iTotal>10.00</iTotal>
</row>
<row>
<iQty>2.0</iQty>
<iItemNo>2000</iItemNo>
<iDescription>Item two</iDescription>
<iPrice>20.00</iPrice>
<iTotal>40.00</iTotal>
</row>
</table>
</document>