tabloid is a standalone RESTful microservice for transforming structured JSON data into multiple file formats — including XLSX, ODS, CSV, HTML, and PDF/UA.
Built with Java and Quarkus, tabloid is designed for simplicity, making it ideal for generating human- and machine-readable reports from structured data.
- 🔁 Single POST API: One endpoint to rule them all.
- 📦 Multi-format Output: Convert JSON data into:
- XLSX (
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) - ODS (
application/vnd.oasis.opendocument.spreadsheet) - CSV (
text/csv) - HTML (
text/html) - PDF/UA (
application/pdf)
- XLSX (
- 🧠 In-memory processing: Lightweight and fast.
- 🧱 Built on Quarkus, with support from industry-standard libraries.
Request for a document containing potentially more than one table; e.g. XLSX, ODS, HTML, PDF/UA:
POST /tables
Content-Type: application/json
Accept: [desired MIME type]
Request for a document containing exactly one table; e.g. CSV, XLSX, ODS, HTML, PDF/UA:
POST /table
Content-Type: application/json
Accept: [desired MIME type]
{
"tables": [
{
"name": "Sheet1",
"columns": [
{ "name": "Name", "type": "string" },
{ "name": "Age", "type": "number" },
{ "name": "Birthday", "type": "date", "format": "yyyy-MM-dd" }
],
"rows": [
["Alice", 30, "1993-01-01"],
["Bob", 25, "1998-05-23"],
["Cara", 40, "1983-09-12"]
]
}
]
}The response will be an octet stream in the format specified by the Accept request header and a Content-Disposition header defining the filename.
| Purpose | Tool/Library |
|---|---|
| Framework | Quarkus |
| XLSX Generation | Apache POI (Quarkus extension) |
| ODS Generation | ODF Toolkit |
| CSV Generation | Jackson CSV |
| HTML Rendering | Quarkus Qute |
| PDF Generation | openhtmltopdf |
MVP Scope:
- ✅ In-memory processing (no streaming).
- ✅ Blocking I/O.
- ✅ JSON input with schema.
- ✅ Separate handlers for each MIME type.
- ⏳ Test data to be provided.
Out of Scope (for MVP):
- ❌ Streaming I/O for large datasets.
- ❌ Native compilation with GraalVM.
- ❌ CSV/HTML/PDF as input formats.
- ❌ CLI support.
- Add support for streaming I/O
- Implement CLI mode
- Add metadata (e.g., filename) in top-level JSON
- Enable native builds
- Expand input format support
- Support Markdown and AsciiDoc as output formats
Pull requests and discussions are welcome. Please open an issue for significant changes or new features.
Project maintained by the ITBH team and friends.
