Creating LibreOffice templates

Advantages of using Office and LibreOffice templates:

  • Can produce odt file.
  • Less time expended in the creation of the document.

Disadvantages in comparison with Text templates:

  • Produce bigger documents.
  • More difficulties in maintaining the templates in time.

Preliminaries

Register the Metadata group definition at Administration > Metadata.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE property-groups PUBLIC "-//OpenKM//DTD Property Groups 2.6//EN"
                                 "http://www.openkm.com/dtd/property-groups-2.6.dtd">
<property-groups>
  <property-group label="Sample Template" name="okg:tpl">
    <input label="Name" name="okp:tpl.name"/>
    <input label="Birth Date" name="okp:tpl.birth_date" type="date" />
    <select label="Language" name="okp:tpl.language" type="simple">
      <option label="Java" value="java"/>
      <option label="Python" value="python"/>
      <option label="PHP" value="php" />
    </select>
  </property-group>
</property-groups>

In order to make a relation between the template form field and the property group, you need to name them with the following naming convention: replace ":" and "." with "_". Here you can see some example conversions:

Metadata field nameTemplate field nameTemplate field value

okp:tpl.name

okp_tpl_name

${okp_tpl_name!}

okp:tpl.birth_date

okp_tpl_birth_date

${okp_tpl_birth_date!}

okp:tpl.language

okp_tpl_language

${okp_tpl_language!}

Creating the template

To create a template in OpenOffice.org go to View > Toolbars > Form Controls.

The a new dialogue box  will appear and you will be able to add form elements to the document. This dialogue box contains Labels, Text Boxes, Check Boxes and other tools.

The field that will be replaced with the value of a passed variable can be specified using the standard FreeMarker expression notation by typing the variable name into the document as follows:

Hi ${name}!

However, mixing processing instructions and normal text into the document may become confusing and clutter the layout. So JODReports provides an alternative way of inserting fields. You can insert a visual field in OpenOffice.org Writer from the menu Insert / Fields / Other... (or just press Ctrl+F2), then click on the Functions tab and select Input field. Change the field Reference to JOOScript. In the Content field enter the variable name (e.g. "$name"). This field will typically be displayed by Writer as a grayed rectangle with the variable name, while moving the mouse over it will reveal the field reference.  

This is the OpenOffice.org document used in this sample: tpl.odt.

Read about OpenOffice.org templates at JODReports.

Date format

JODReports uses FreeMarker, so you can take advantage of the FreeMarker formatting flexibilities. For example you can set date format by this way:

${okp_tpl_birth_date?string("yyyy-MM-dd")}

If date may be null, then you need to use the following ( in case of odt templates should use #if between "[" and "]"):  

[#if okp_tpl_birth_date??]${okp_tpl_birth_date?string("yyyy-MM-dd")}[/#if]

Learn more about FreeMarker formatting at: Built-in Reference.  

Dynamic tables

You can even use the template feature to generate dynamic tables. Lets see an example.

 

In the screen shot you can see a document with a table. The header has a colored background and is also bold. The script shows the options to generate the table headers.

This is the OpenOffice.org document used in this sample: dynamic_table.odt 

Learn more about this feature at:

Configuring sample

  • Upload tpl.odt file at /okm:templates
  • Register metadata definition okg:tpl at Administration > Metadata 
  • Enable metadata from profiles at Administration > Profiles 
  • Add metadata group okg:tpl to tpl.odt file.