XML Elements

Basics

XML elements define the layout of PDF reports.

You use XML elements when creating XML templates to build PDF reports.

This article explains how to use XML elements.

Guidelines

Remember the following conversions when building PDF reports:

  • 72pt = 1 inch on an XML template

  • 300px = 1 inch on a printed report

Core Elements

<template>

Base element for an XML template.

Guidelines

  • You only need to add one <template> element per XML template.

  • Once you add a <template> element, you can add other elements inside of it to build the structure of report pages.

    Example of the sections of a page for a report
    Figure 1. A report page with header, footer, and body sections that repeat on every page.
  • Spaces are not allowed in the name attribute of any element.

    To aid readability, use camelCase.

    For example, name="Company Logo" is invalid.
    Use name="companyLogo" or name="company-logo" instead.

  • Use the pageMargins attribute to define the margins for report pages.

    • When you set the top margin for a page, you must make it big enough to contain the <header> element.

    • When you set the bottom margin for a page, you must make it big enough to contain the <footer> element.

    • When you set left and right margins for a page, they don’t apply to <header> and <footer> elements.

Set the preprocess attribute to "true" to write handlebars report helpers as XML and have them dynamically converted to the handlebars syntax.

<template pageSize="LETTER" pageOrientation="portrait" pageMargins="36 36 36 36" preprocess="true">
  <header> header text</header>
  <body>body text</body>
  <footer>footer text</footer>
</template>
Example 1. Use the following code to add a <template> element with standard settings.
<template pageSize="LETTER" pageOrientation="portrait" pageMargins="36 36 36 36">
  <header>header text</header>
  <body>body text</body>
  <footer>footer text</footer>
</template>
  • The pageSize attribute sets the size of the report page to "Letter".

  • The pageOrientation attribute sets the report page to have portrait orientation.

  • The pageMargins attribute sets the left, right, and bottom margins to 36pt and the top margin to 170pt.

<info>

  • PDF Templates can specify the resulting PDF’s Title and other metadata

  • Use the <info> tag to add metadata about the PDF file

  • Use Handlebars expressions in the <info> helper to dynamically update metadata

Guidelines

  • The <info /> tag must be a child of the <template> tag.

    <template>
      <info title="Job Safety" />
    </template>

Attributes

<info /> must have at least one attribute.

The <info> tag supports the following metadata attributes:

  • title

    This attribute is used as both as the PDF’s Title metadata and also the resulting PDF’s file name

  • author

  • subject

  • keywords

Each attribute expects a text string that can contain a Handlebars expression.

Examples

Example 2. Use "Job Safety Report" as the report title each time the report generates

Add the following line inside the PDF template’s <template> tag:

<template>
 <info title="Job Safety Report" />
</template>
Example 3. Dynamically use the Customer and a Timestamp for the report’s Title

Add the following Handlebars expression to the title attribute of the info report helper inside the <template> tag:

<template>
  <info title="{{FX5__Customer_Account__r.Name}}-{{formatDate (formula "NOW()") format="MM/DD/YYYY HH:mm:ss"}}"/>
</template>

Generating reports for such a report results in the following:

Reports Tab in FieldFX Mobile

Example of a Reports tab for a Job

Note List in FieldFX Back Office

Example of a Notes & Attachments file list with a PDF Report

File Properties Details Tab

On Windows, right clicking the PDF file and selecting the Properties option, then the Details tab, shows:

Example of a report’s Details tab in Windows File Properties

<header>

Inserts a repeating header at the top of every report page.

Header element on a sample page
Figure 2. A header repeats at the top of each page of the report

Guidelines

  • You can only add one <header> element per XML template.

  • To prevent content from being cutoff, make sure that the height of a <header> element is sufficient to show its contents.

Placeholders

Use the following placeholders to insert page data into a <header> element:

Placeholder Description

$currentPage

Inserts the current page number

$pageCount

Inserts the page count for the report

Example 4. Use the following code to insert a repeating header into a report page.
<header>
  <text>Page $currentPage of $pageCount</text>
</header>
  • This example uses the $currentPage placeholder to insert the current page number.

  • The $pageCount placeholder inserts the page count for the report.

  • A result of this would be the text Page 2 of 4 in the Header on the second page of a four-page report.

Inserts a repeating footer at the bottom of every report page.

Example of a page with the footer section highlighted
Figure 3. A footer appears at the bottom of every page of a report

Guidelines

  • You can only add one <footer> element per XML template.

  • To prevent content from being cutoff, make sure that the height of a <footer> element is sufficient to show all contents.

Placeholders

Use the following placeholders to insert data into a <footer> element:

Placeholder Description

$currentPage

Inserts the current page number

$pageCount

Inserts the page count for the report

Example 5. Use the following code to insert a repeating footer into a report page
<footer>
  <text>Page $currentPage of $pageCount</text>
</footer>
  • This example uses the $currentPage placeholder to insert the current page number.

  • The $pageCount placeholder inserts the page count for the report.

<background>

  • Inserts a repeating background image into the <template> element.

    Example of a background section on a report
    Figure 4. A background sits behind the content of the report and can be used for adding watermarks
  • The <background> element is behind the main section of a report.

  • Use the <background> element to create a watermark in the report.

Guidelines

You can only add one <background> element per <template> element.
Example 6. Use the following code to insert a <background> element into a <template> element
<template xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" pageSize="LETTER" pageOrientation="portrait" pageMargins="36 225 36 36" xsi:noNamespaceSchemaLocation="fx-report-schema.xsd">
  <background>
    <image name="pagewm" marginTop="144" width="450"/>
  </background>
  <body>
    <text>Hello {{FX5__Tracking_Number__c}}</text>
  </body>
  <images>
    <image name="pagewm" src="data:image/png;base64,BASE64STRING"/>
  </images>
</template>
Replace BASE64STRING with the base64 string for your image.

<body>

  • Inserts a non-repeating section into a <template> element.

  • The <body> element is the main section of a report where you insert its core content.

    Example of the body section of a report page
    Figure 5. The <body> section is the main content of the report and sits in front of the <background>

Guidelines

You can only add one <body> element per <template> element.
Example 7. Use the following code to insert a <body> element into a <template> element.
<template>
  <body>body text</body>
</template>

<columns>

Splits either a report page or a table into columns.

Guidelines

<columns> elements divide a page/table evenly into columns.

Example of columns on a page
Figure 6. Add <columns> to split a page or table evenly into sections across the page
Use the <stack> element (discussed below) to stack the contents of <columns> top to bottom.
Example 8. Use the following code to insert two columns of text onto a report page.
<body>
  <columns>
    <text>text 1</text>
    <text>text 2</text>
  </columns>
</body>
Example 9. Use the following code to insert two columns into a table.
<table>
  <columns>
    <col width="50"/>
    <col width="50"/>
  </columns>
</table>

<stack>

Stacks the contents of an element vertically.

Example of stacks on a page
Figure 7. Stacks divide contents from top to bottom
Example 10. Use the following code to stack two <text> elements vertically in a <columns> element.
<columns>
  <stack>
    <text>text 1</text>
    <text>text 2</text>
  </stack>
</columns>

<styles>

Stores the style definitions for XML elements.

The <styles> element contains one or more <style> elements.

Guidelines

  • The <styles> element doesn’t display on report pages and is only used for style purposes.

  • You must add <style> elements inside the <styles> element to define the individual attributes for each style.

Example 11. Use the following code to define basic styles.
<styles>
  <style name="center" fontSize="7" alignment="center"/>
  <style name="header" bold="true" fontSize="15"/>
  <style name="number" alignment="right"/>
  <style name="tableFooter" fontSize="7" bold="true" color="#ffffff" fillColor="#308DE5"/>
  <style name="tableHeader" fontSize="7" bold="true" color="#ffffff" fillColor="#003399"/>
  <style name="tableSubhead" fontSize="7" bold="true" fillColor="#bfbfbf"/>
  <style name="text" fontSize="7" alignment="left" />
</styles>

<style>

Stores the attributes for a style used to change the appearance of XML elements.

Guidelines

You must add <style> elements inside a <styles> element.

Attributes

Use XML attributes to control the appearance of <style> elements.

Example 12. Use the following code to define a basic text style.
<styles>
  <style name="text" alignment="left" fontSize="7"/>
</styles>

Table Elements

<table>

Base element for a table.

Guidelines

Once you add a <table> element, you can add other elements inside of it to build the table.

Example of a tableHeader and tableBody elements on a page
Figure 8. A table with a header and body section
Example 13. Use the following code to insert a basic table
<table columnWidths="* *">
  <tableHeader>
    <row>
      <cell>cell 1</cell>
      <cell>cell 2</cell>
    </row>
  </tableHeader>
  <tableBody>
    <row>
      <cell>cell 1</cell>
      <cell>cell 2</cell>
    </row>
  </tableBody>
</table>
  • The columnWidths attribute sets the width for every column in the table.

  • The <tableHeader> element inserts a repeating header.

  • The <tableBody> element inserts a non-repeating table body.

  • The <row> elements insert rows.

  • The <cell> elements insert cells into the rows.

Example 14. Use the following code to insert a basic table and define columns individually
<table>
  <columns>
    <col width="*"/>
    <col width="*"/>
  </columns>
  <tableHeader>
    <row>
      <cell>cell 1</cell>
      <cell>cell 2</cell>
    </row>
  </tableHeader>
  <tableBody>
    <row>
      <cell>cell 1</cell>
      <cell>cell 2</cell>
    </row>
  </tableBody>
</table>
  • The <columns> element and the col width attributes inside it, set the width for every column in the table.

  • The <tableHeader> element inserts a repeating header.

  • The <tableBody> element inserts a non-repeating table body.

  • The <row> elements insert rows.

  • The <cell> elements insert cells into the rows.

<tableHeader>

Inserts a repeating header into a <table> element.

<tableHeader> elements display at the top of a table on every page where the table displays.
Example of the Table Header element highlighted
Figure 9. The <tableHeader> creates the initial row usually used for column heading and repeats the row(s) after a page break

Guidelines

You can only add one <tableHeader> element per <table> element.
Example 15. Use the following code to insert a <tableHeader> element into a <table>
<table>
  <tableHeader>
    <row>
      <cell>cell 1</cell>
      <cell>cell 2</cell>
    </row>
  </tableHeader>
</table>

<tableBody>

Inserts a non-repeating body section into a <table> element.

Example highlighting the tableBody section
Figure 10. <tableBody> contains the main contents of the table

Guidelines

You can only add one <tableBody> element per <table> element.
Example 16. Use the following code to insert a <tableBody> element into a <table> showing ticket items.
<table>
  <tableBody>
    <row>
      <cell>cell 1</cell>
      <cell>cell 2</cell>
    </row>
  </tableBody>
</table>

<row>

Inserts a row into a <table>.

Example of a row element on a page
Figure 11. A <row> inserts one line of data into a <table>

Guidelines

<table> elements must contain <row> elements.

You can embed <cell> elements inside <row> elements.

Each <row> must have the same number of <cell> elements.

Example 17. Use the following code to insert two rows into a <table>
<table>
  <tableBody>
    <row>row 1</row>
    <row>row 2</row>
  </tableBody>
</table>

<cell>

Inserts a cell into the <row> of a <table>.

example of a cell on a page
Figure 12. A <cell> is one piece of data within a row

Guidelines

You must add <cell> elements inside of <row> elements.

Each <row> must have the same number of <cell> elements.

Attributes

You can add the following special attributes to a <cell> element:

  • colSpan to use an element across more than one column

  • rowSpan to use an element across more than one row

Example 18. Use the following code to insert <cell> elements into the <row> of a <table>
<row>
  <cell>cell 1</cell>
  <cell>cell 2</cell>
</row>

<emptyCell>

Inserts an empty cell into the <row> of a <table> that contains no data

Example of a page with emptyCell highlighted
Figure 13. Use an emptyCell to leave a cell of a row blank, with no data

Guidelines

When you use the colSpan attribute to make a <cell> display across multiple columns, you must add <emptyCell> placeholders for each <cell> where you don’t want to display data.
Example 19. Use the following code to insert <emptyCell> elements into the <row> of a <table>.
<row>
  <cell style="text" alignment="right" colSpan="6">{{RecordType_DeveloperName}} Total</cell>
  <emptyCell />
  <emptyCell />
  <emptyCell />
  <emptyCell />
  <emptyCell />
  <cell style="number" bold="true">${{sum items "Extended_Amount__c"}}</cell>
</row>

This example uses the colSpan attribute to merge the first six cells of the <row> together.

When you use colSpan, you must add <emptyCell> placeholders for each empty cell you want to merge.

Image Elements

<images>

Stores the source code for images included on a report.

(Optional) Store the source code required to insert the contents of a long text area field.

Guidelines

You must add <image> elements inside the <images> element to define the source for each image.
Example 20. Use the following code to include an image encoded in a base64 string
<images>
  <image name="companyLogo" src="data:image/png;base64,BASE64STRING"/>
</images>
Replace BASE64STRING with the base64 string for your image.
Example 21. Use the following code to include an image from an online source
<images>
  <image name="customerLogo" source="https://www.pexels.com/photo/gray-industrial-machine-during-golden-hour-162568/"/>
</images>
Replace "https://www.pexels.com/photo/gray-industrial-machine-during-golden-hour-162568/" with the URL for your online source.
Example 22. Use the following code to insert the contents of a long text area field
<images>
  <image width='108' height='50.4'>{{FX5__Job__r.FX5__Office__r.Office_Logo__c}}</image>
</images>

<image>

Inserts an image or the contents of a long text area field

Guidelines

You can only insert .jpeg or .png images.

Image Sizing

Use the width and height attributes to define the size of <image> elements.

Images resize to fit the dimensions specified for the <image> element.

Remember the following when working with images:

  • 72pt = 1 inch

  • 300px = 1 inch

Example 23. Use the following code to insert an image encoded in a base64 string
  1. Add an <image> element in the exact place where you want the image to go

    <image name="companyLogo" width="144"/>
    This element also stores the attributes for the image.
  2. Add a second <image> element inside the <images> collection at the end of the template

    <images>
      <image name="companyLogo" src="data:image/png;base64,BASE64STRING"/>
    </images>

    This element stores the source code for the image.

The name attribute links this element to the first <image> element.
Replace BASE64STRING with the base64 string for your image.
Example 24. Use the following code to insert an image from an online source
  1. Add an <image> element in the exact place where you want the image to go

    <image name="customerLogo" width="144" marginLeft="40"/>
    This element also stores the attributes for the image.
  2. Next, add a second <image> element inside an <images> element at the end of the template

    <images>
      <image name="customerLogo" src="https://i.imgur.com/B3NJGly.jpg"/>
    </images>

    This element stores the source code for the image.

The name attribute links this element to the first <image> element.
Replace "https://i.imgur.com/B3NJGly.jpg" with the URL for your image.
Example 25. Use the following code to insert an image encoded in a base64 string
<image width="144">data:image/png;base64,BASE64STRING</image>
This example places the base64 string directly into the template, without the need to reference the image source separately.
Replace BASE64STRING with the base64 string for your image.
Example 26. Use the following code to insert the contents of a long text area field
<image width='108' height='50.4'>{{FX5__Job__r.FX5__Office__r.Office_Logo__c}}</image>

<imageCapture>

Inserts an interactive image placeholder.

screenshot of an image capture placeholder
Figure 14. <imageCapture> allows users to take and/or attach a picture of a signature

Use this placeholder to attach an image to a report, such as a photo or stamp.

You can also use the placeholder to attach an image already attached to the parent record.

Guidelines

You can only insert .jpeg or .png images in the placeholder.
  • If you insert an image that has larger dimensions than the placeholder, the image resizes to fit the space.

  • When you attach an image to a report, the image also gets added as an attachment to the parent record.

Example 27. Use the following code to insert a 216pt x 72pt image placeholder
<imageCapture id="Operator Stamp" caption="Operator Stamp" width="216" height="72"/>
The id attribute serves as a unique identifier for the image placeholder.
The caption attribute makes the image placeholder display available for completion when attaching the report to a record.
Example 28. Use the following code to insert an image placeholder that has a watermark of the ticket’s tracking number
<imageCapture id="Operator Stamp" caption="Operator Stamp" width="216" height="72">
  <watermark rasterize="true">
    <text color="gray" fontSize="20">{{FX5__Tracking_Number__c}}</text>
  </watermark>
</imageCapture>
The id attribute serves as a unique identifier for the image placeholder.
The caption attribute makes the image placeholder display available for completion when attaching the report to a record.
The rasterize attribute converts the tracking number into a watermark image.

<qr>

Generates a QR code for the specified content.

Example 29. Use the following code to insert a QR code for a URL
<qr fit="100">https://www.servicemax.com</qr>
The fit attribute sets the size of the QR code to 100pt.
Replace https://www.servicemax.com with the URL the user should go to with the QR code.

Signature Elements

<captureHeaderTemplate> Block

Use the <captureHeaderTemplate> tag to insert lines of text on the signature capture page above the signature block.

This custom text displays in both FieldFX Mobile and FieldFX Back Office.

Use this with the <signatureBlock> element.
Example of a custom text block on FieldFX Mobile above a signature capture

Guidelines

  • Place the <captureHeaderTemplate> just before the <signatureBlock> element in the template.

  • Include one or more <captureHeaderRow></captureHeaderRow> content rows within the opening and closing <captureHeaderTemplate> tags

  • Contents of the <captureHeaderRow> tag can use

    • Handlebars

    • Standard XML formatting tags such as <data>, <formatDate>, or <formatDateTime>

Attributes

  • <captureHeaderTemplate>

    • (Optional) position

      Valid values are

      • top: Places the text block at the top of the screen.

        This is the default value if position is not defined.
      • right: Floats the text block to the right of the screen

        For example:

        <captureHeaderTemplate position="right">
          <captureHeaderRow>row contents</captureHeaderRow>
        </captureHeaderTemplate>
  • <captureHeaderRow>

    • label: content to place in the left column of the block for the row

    • value: content to place in the right column of the block for the row

      The value attribute is optional. You can instead place the XML elements or other contents for the right column between the opening and closing <captureHeaderRow> tags.
      Example 30. Adding row contents in the value attribute

      For example:

      <captureHeaderTemplate position="right">
        <captureHeaderRow label="LOCATION" value="{{FX5__Office__r.Name}}">
        </captureHeaderRow>
      </captureHeaderTemplate>
      Example 31. Placing the right column content between opening and closing tags

      For example:

      <captureHeaderTemplate>
        <captureHeaderRow label="LOCATION" >
          <data field="FX5__Office__r.Name"/>
        </captureHeaderRow>
      </captureHeaderTemplate>

Examples

Example 32. <signatureCaptureTemplate> block without using value attribute
<captureHeaderTemplate>
  <captureHeaderRow label="JOB">
    <data field="Name"/>
  </captureHeaderRow>
  <captureHeaderRow label="CUSTOMER" >
    <data field="FX5__CustomerAccount__r.Name"/>
  </captureHeaderRow>
  <captureHeaderRow label="LOCATION" >
    <data field="FX5__Office__r.Name"/>
  </captureHeaderRow>
  <captureHeaderRow label="PRICE BOOK" >
    <data field="FX5__Price_Book__r.Name"/>
  </captureHeaderRow>
  <captureHeaderRow label="WORK START" >
    <formatDateTime field="FX5__Actual_Start_Date__c" format="MM/DD/YY h:mm A"/>
  </captureHeaderRow>
  <captureHeaderRow label="WORK END" >
    <formatDateTime field="FX5__Actual_End_Date__c" format="MM/DD/YY h:mm A"/>
  </captureHeaderRow>
</captureHeaderTemplate>
Example 33. <signatureCaptureTemplate> block with content in the value attribute
<captureHeaderTemplate position="right">
  <captureHeaderRow label="JOB" value="{{Name}}" />
  <captureHeaderRow label="CUSTOMER" value="{{FX5__CustomerAccount__r.Name}}" />
  <captureHeaderRow label="LOCATION" value="{{FX5__Office__r.Name}}" />
  <captureHeaderRow label="PRICE BOOK" value="{{FX5__Price_Book__r.Name}}" />
  <captureHeaderRow label="WORK START" value="{{formatDateTime FX5__Actual_Start_Date__c format="MM/DD/YY h:mm A"/}}" />
  <captureHeaderRow label="WORK END" value="{{formatDateTime FX5__Actual_End_Date__c format="MM/DD/YY h:mm A"/}}" />
</captureHeaderTemplate>

<signatureBlock>

Inserts an interactive signature line.

Example of a signature line
Figure 15. <signatureBlock> adds a visual space for a signature
Use this signature line to capture digital signatures on reports.

Guidelines

If you insert an image that has larger dimensions than the placeholder, the image resizes to fit the space.
Example 34. Use the following code to insert a basic signature line
<signatureBlock id="Company Man Signature" caption="Company Man Signature" width="220" height="50">
  <watermark>data:image/png;base64,BASE64STRING"</watermark>
</signatureBlock>
The id attribute serves as a unique identifier for the signature line.
The caption attribute makes the signature line display available for completion when attaching the report to a record.
If you are inserting multiple signature lines, use a field as the unique identifier for each signature line.
For example, signatureBlock id="{{FX5__SyncID__c}}"
The <watermark> element inserts a visual indicator so users know where to add signatures, such as the blue shading in the following example:
Example of an unsigned signature line
The <watermark> element is discussed in this article.

<watermark>

Inserts an image into a <signatureBlock> element.

Use to add a visual indicator so users know where to add signatures.

Guidelines

To use an image, you must encode the image to a base64 string and enter the string in the <watermark> element.

You can only insert .jpeg or .png images.

Image Sizing

Remember the following when working with images:

  • 72pt = 1 inch

  • 300px = 1 inch

Images resize to fit the dimensions specified for the <signatureBlock> element.

If you insert a 900px wide image and set the width for the <signatureBlock> element to 144pt, the image resizes to 600px wide.

Attributes

You can add the following special attributes to a <watermark> element:

Example 35. Insert the standard signature line image.
Example of an unsigned signature line
Figure 16. The blue shading around a signature box is added with the use of a <watermark> element
  1. Add a <watermark> element inside the <signatureBlock> element

    <signatureBlock id="customerSignature" width="216" height="72">
      <watermark name="watermark"></watermark>
    </signatureBlock>
  2. Add a second <watermark> element inside the <images> collection at the end of the template.

    <images>
      <image name="watermark" src="data:image/png;base64,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"/>
    </images>
User your own image’s base64 encoding instead of the encoding in this example.
This element stores the source code for the signature line image.
The name attribute links this element to the first <watermark> element.
Remember, spaces are not allowed in the `name `attribute.
Example 36. Insert the standard signature line image without a separate <images> section
<signatureBlock id="customerSignature" width="216" height="72">
  <watermark>data:image/png;base64,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</watermark>
</signatureBlock>

Text Elements

<text>

Inserts text.

Guidelines

  • You can use spaces and line breaks inside of <text> elements.

  • You can also add <text> elements inside other <text> elements.

  • When using <text> elements inside <cell> elements, all text must be enclosed in a <text> element.

Example 37. Use the following code to insert terms and conditions text
<text>As the representative for the company listed above, I acknowledge that the work performed has been done in a professional and acceptable manner. I also understand that the amounts for which I am signing are not the final invoiced amounts. Final invoice amounts will include, if applicable, any required Federal, State, County, and Local taxes along with any outstanding third party charges.</text>
Replace the language with your company’s approved message.

<textTransform>

Inserts specially formatted text.

Example 38. Use the following code to display text rotated vertically inside of cells in a table
<cell rowSpan="2"><textTransform rotate="270" fontSize="7">CLIENT INFO</textTransform></cell>
This example uses the rowSpan attribute to merge two rows and display the rotated text across both rows.
The rotate attribute rotates the text 270 degrees.

<rtf>

Inserts the contents of a long text area or rich text area field.

Limitations

When you embed an image in a rich text area field, the image only displays on a report if:

  • You are online

  • You are offline and embedded the image yourself in the current session

The following tags are supported in an <rtf> field:

Tag Description

<p>

paragraph

<br>

line break

<img>

image

<li>

list item

<ol>

ordered (numbered) list

<ul>

unordered (bulleted) list

<b>

bold

<i>

italic

<u>

underline

<strike>

strikethrough

The conversion to PDF may result in unexpected results. Always test your reports.
Example 39. Use the following code to insert the contents of a rich text area field named Job Photos
<rtf maxImageSize="300"><![CDATA[{{{FX5__Job__r.Job_Photos__c}}}]]></rtf>
You must use triple curly brackets {{{ }}} for expressions inside the <rtf> element.
The maxImageSize attribute downsizes images proportionately to have a height or width no greater than 300pt.