Generate a PDF document

Solution (via MS Word automation)

  1. Collect all necessary data in GuiXT variables
  2. Generate an HTML or RTF file, using the CopyText fromTemplate= command
  3. Use a JavaScript function to have the file converted into PDF format via MS Word

We add a button "Order confirmation PDF" in the initial screen of VA03:

In VA03 the document looks as follows::

When the user presses our new button the following PDF is generated and displayed:

We start the implementation by creating a template file for the order confirmation document in MS Word.

  •  For each variable part of the document, we use an expression &[varname] where varname is the name of a GuiXT variable.

  • For tables we create only one row and use the notation &[varname###] in the table cells. GuiXT will replace ### by 1,2,3,... and generate the correct number of table rows.

  • We save the template document in MS Word as RTF file.

Important hint: The expressions &V[varname] can be in any format you like (font, size, color,...) but no format changes are allowed within the expression.
To assure this, we suggest you first copy the expression &[varname] into a simple editor such as notepad.exe and then copy it from there into the template document

For the example above we use the following template file:

Here is a list of the GuiXT variables used in the template:

Order number

Customer address

Order header

Order items

Total price

The InputScript reads the order data via BAPIs, then reads the RTF template into a GuiXT text variable, having all template variables replaced by GuiXT, and saves the result as a temporary RTF file. Finally a JavaScript funtion is called up, and it converts the RTF file into a PDF, using MS Word automation.


// current order number in VA03 screen
Set V[ordernumber] "&F[Order]" 

// order number specified?
not V[ordernumber]
  Message "E: Please enter an order number" -statusline

// Part 1: Read data into GuiXT variables

// strutures/tables for BAPI calls and RTF generation
CreateStructure V[oh] doc_date purch_no sold_to sales_org currency
CreateTable V[oi] no material text qty unit value currency
CreateStructure V[addr] name city street postl_code
CreateStructure V[item] itm_number material short_text _
                            cum_cf_qty sales_unit net_value

CreateTable V[items] include=V[item]

// Try to read order
export.SALESDOCUMENT="ordernumber" _

// order number valid?
if not V[oh.sold_to]
  Message "E: Please enter a valid order number" -statusline

Set V[k] 1
Set V[total_value] 0
label next_item
ReadRow V[item] table=V[items] index=&V[k]
if Q[ok]
Set V[oi.no.&V[k]] "&V[item.itm_number]" + 0   // to remove leading zeros
  Set V[oi.material.&V[k]] "&V[item.material]"
  Set V[oi.text.&V[k]] "&V[item.short_text]"

  // read number of decimal places for given unit
  Call RSW_UNIT_DECIMALS_GET  cache="session" _
export.I_UNIT="item.sales_unit" _

// format quantity accordung to unit
  Set V[oi.qty.&V[k]] "&V[item.cum_cf_qty]" + 0 decimals="&V[mydecimals]" _
"," groupseparator="."
  Set V[oi.unit.&V[k]] "&V[item.sales_unit]"

// net value
  Set V[oi.value.&V[k]] "&V[item.net_value]" + 0 _
decimals=2 decimalseparator="," groupseparator="."

  // add to total value
  Set V[total_value]  "&V[total_value]" +  "&V[oi.value.&V[k]]"  _
decimals=2 decimalseparator="," groupseparator="."

   // increase item number
  Set V[k] &V[k] + 1
goto next_item

// Read customer address
  export.CUSTOMERNO="oh.sold_to" _
export.PI_SALESORG="oh.sales_org" _ 

// Part 2: Generate PDF

// temporary file names
Set V[rtffile] "&%[TEMP]\guixt.orderconfirmation.&V[today_y-m-d hms].rtf"
Set V[pdffile] "&%[TEMP]\guixt.orderconfirmation.&V[today_y-m-d hms].pdf"

// copy template RTF into a text variable, replace all variables
CopyText fromTemplate="E:\wordjs\orderconfirmation.template.rtf" toText="temp"

// copy to RTF file
CopyText fromText="temp" toFile="&V[rtffile]"

// convert RTF to PDF
CallJS  convertfile "&V[rtffile]" "&V[pdffile]"

// open PDF
Start "&V[pdffile]"


JavaScript "convertfile"

function convertfile(inputfile, outputfile) {

     var msword = guixt.CreateObject("Word.Application");
     msword.Visible = false;
     msword.DisplayAlerts = false;

     var doc = msword.Documents.Add();

     var extension = outputfile.split('.').pop();
     extension = extension.toLowerCase();

     var wordformat = 0;

    switch (extension)
case "pdf": wordformat = 17; break;
        case "doc": wordformat = 0; break;
        case "htm": case "html": wordformat = 8; break;
        case "rtf": wordformat = 6; break;
        case "odt": wordformat = 23; break;
        case "docx": default: wordformat = 16; break;

    // save
    doc.SaveAs(outputfile, wordformat);



Project files "orderconfirmation.zip"

InputAssistant + Controls