Turn LibreOffice Writer templates into PDF, RTF, or ODT via a single HTTP call — self-hosted, open source, Docker-ready.
# Generate a PDF from an ODT template $ curl -X POST \ http://localhost:8080/api/render/template \ -H "Accept: application/pdf" \ -F "template=@invoice.odt" \ -F "data=@invoice.json" \ -o invoice.pdf ✓ invoice.pdf (52 KB) 200 OK
Blocpress is a free, self-hosted document generation service that turns LibreOffice Writer templates (ODT) into production-ready PDF, RTF, or ODT documents — fully automated via a simple HTTP API.
Designed for enterprise document workflows, Blocpress is ideal for generating contracts, invoices, letters, and reports from structured JSON data. Templates are authored in LibreOffice Writer using standard User Fields, conditional sections, and repeat groups — no proprietary markup language required.
The server runs as a Docker container and exposes a clean OpenAPI/REST interface. A built-in template workbench lets template designers upload, validate, and approve templates through a browser-based UI with a full review workflow — including Elasticsearch-powered full-text search across all templates and building blocks.
From v2.3, Blocpress includes a compliance lifecycle for templates: configurable validity periods, automatic expiry blocking in the render service, a daily review scheduler, and a dedicated Retired status that removes templates from production cleanly.
Render LibreOffice ODT templates into production-ready PDF or RTF documents using headless LibreOffice — no proprietary rendering engine.
Generate documents via POST /api/render/template. No authentication required for stateless rendering — just send your template and JSON data.
Browser-based UI for template designers: upload ODT templates, run validation, manage test datasets, run regression tests, and publish approved templates to production via a four-eyes review workflow.
Use standard LibreOffice Writer to author templates. Fields, conditional sections, and repeat groups map directly to JSON data — no custom syntax to learn.
Elasticsearch-powered search across all templates and building blocks — searches names, field names, conditions, and extracted ODT text. Fuzzy matching and highlighted results included.
Configurable validity periods with automatic expiry enforcement in the render service. Daily review scheduler alerts on expiring templates. Clean Retire workflow removes templates from production.
All-in-one Quickstart image bundles Studio, Workbench, Render, PostgreSQL, and Elasticsearch in a single container. Start the full stack with one docker run command — no cloud dependency.
Free to use, self-hosted, and fully open source under MIT license. No vendor lock-in, no usage fees, no data leaves your infrastructure.
Start the server, download a sample template with matching JSON data, and generate your first PDF in three steps — no configuration required.
1. Run the container
docker run -d -p 8080:8080 -p 8081:8081 --name blocpress flaechsig/blocpress-studio-quickstart:latest
The Quickstart image bundles Studio (workbench UI on port 8080),
Render (REST API on port 8081), PostgreSQL, and Elasticsearch in a single container.
A built-in dev JWT keypair is included — override via
-e MP_JWT_VERIFY_PUBLICKEY="..." and
-e MP_JWT_VERIFY_ISSUER="..." for production use.
Open http://localhost:8080 for the workbench UI.
2. Download a sample
3. Generate a PDF
curl -X POST http://localhost:8081/api/render/template \ ① -H "Accept: application/pdf" \ ② -F "template=@welcome.odt" \ ③ -F "data=@welcome.json" \ ④ -o welcome.pdf ⑤
application/pdf, application/rtf, or application/vnd.oasis.opendocument.text)Step-by-step guides for your first 10 minutes with Blocpress — pick your role:
Learn how to create an ODT template in LibreOffice, upload it to the Workbench, add test data, run regression tests, and submit it for approval — in about 10 minutes.
Open Tutorial →Deploy Blocpress with Docker Compose, configure PostgreSQL and JWT authentication, set up a reverse proxy, and approve your first template into production — in about 10 minutes.
Open Tutorial →Blocpress processes ODT templates through a four-stage merge pipeline:
text:section-source are inlined, enabling reusable content blocks (e.g. terms & conditions).customer.name) are replaced with values from your JSON payload.The merged document is then passed to headless LibreOffice for export to PDF or RTF. The entire process is stateless — no data is stored between requests.
/q/swagger-ui