Renduva documentation
Getting started
Renduva fills Word templates with JSON data and returns the finished document as PDF or DOCX. It runs on your own server, so your business data never leaves your network, and it comes with a PL/SQL package so Oracle APEX and PL/SQL code can call it in one line.
How it works
- Design the template in Word. Type tags where the data goes:
{{customer}}for a field,{{#items}} … {{/items}}around a table row that repeats for each line. - Send template name + data. Your code posts JSON to the Renduva server: from PL/SQL
with
renduva.generate, or from any language with one HTTP request. - Get the document back. Renduva fills the template, converts it to PDF with LibreOffice, and returns the file. Send several records and they come back merged into one PDF, in order.
A first document in five minutes
You need a Linux server with Docker or Podman and the Renduva image (during the beta you receive it as a file; see Install and run for the RPM instead).
docker load -i renduva-0.1.0.tar.gz
docker run -d --name renduva -p 8080:8080 -v renduva-data:/data localhost/renduva
docker exec renduva renduva key create first-key # prints the API key once
Create invoice.docx in Word with this text, and a table whose second row holds the loop:
Customer: {{customer}}
Invoice: {{invoice}}
| Description | Qty | Price |
| {{#items}}{{description}} | {{quantity}} | {{price}}{{/items}} |
Store it on the server and ask for a PDF:
docker cp invoice.docx renduva:/data/templates/
curl -H "Authorization: Bearer <the key>" -o invoice.pdf \
--data-binary '{"template": "invoice", "output": {"type": "pdf"},
"data": {"customer": "City of Example", "invoice": "INV-0042",
"items": [{"description": "Water service", "quantity": 1, "price": "42.50"}]}}' \
http://localhost:8080/generate
invoice.pdf now holds the filled invoice. The same call from PL/SQL:
declare
l_pdf blob;
begin
renduva.set_server('http://renduva-host:8080', '<the key>');
l_pdf := renduva.generate(
p_template => 'invoice',
p_data => '{"customer": "City of Example", "invoice": "INV-0042", "items": []}');
end;
/
Next
- Install and run: Docker, Podman, the RPM, API keys, HTTPS.
- Templates and tags: fields, loops, line breaks, and what happens when data is missing.
- HTTP API: the one endpoint, for any language.
- PL/SQL package: install it, call it from APEX, build the JSON in SQL.