# Libof Doc

Library to generate LibreOffice documents from a template document for JavaScript and TypeScript

## Installation

You can install the library via npm:
```
npm install libof-doc-template
```

## Create a new Template Document

To create a template document you need to program in your LibreOffice document.

To use the LibofDocTemplate syntax we will use the following pattern: [!ldt action]

### Declare variables
```
[!ldt var=variableName]
```

### Iterate Arrays

We can iterate arrays with LibofDocTemplate! To do this we use a for loop and access the values ​​of each element using a "."
```
[!ldt for=element in array]

[!ldt var=element.name] : [!ldt var=element.value]

[!ldt end=array]
```

### Template Example
![image](https://github.com/user-attachments/assets/09021cfd-1544-4dea-b50b-d29174534bc3)


## Usage

### Create new document
```
import { LibofDocTemplate } from 'libof-doc-template';

const template = new LibofDocTemplate()
```

### Add Variables

To add variables we use the addVariable function with the parameters variable name and value.

The variables can be of three types: 
- Strings
- LibofDocTemplateVariableList -> list of variables with key and value
- Blob -> Image blob to add it to the document
```
import {LibofDocTemplateVariableList} from 'libof-doc-template'

//String
template.addVariable('title1', 'This is the title')

//Lists and more lists
template.addVariable('list1', [
    new LibofDocTemplateVariableList([
            ['key', 'key one'],
            ['value', 'value of list 1 first element'],
            ['name', 'name of list 1 first element'],
            ['list2', 
                [
                new LibofDocTemplateVariableList([
                    ['text', 'list 1 first element -> list 2 first element value']
                ])]
            ]
    ]),
    new LibofDocTemplateVariableList([
            ['key', 'key two'],
            ['value', 'value of list 1 second element'],
            ['name', 'name of list 1 second element'],
            ['list2', 
                [
                new LibofDocTemplateVariableList([
                    ['text', 'list 1 second element -> list 2 first element value']
                ]),
                new LibofDocTemplateVariableList([
                    ['text', 'list 1 second element -> list 2 second element value']
                ])]
          ]
    ])
])

//Images
const imageBlob = await obtenerBlobImagen()
template.addVariable('image1', imageBlob)
```

## Processed document
![image](https://github.com/user-attachments/assets/7faac1ec-b394-4b12-a573-711c2e22d592)







  
