Quickstart
This is the fastest path to exporting your first report to both pdfme and ReportLab. It should take about 5 minutes.
denReport runs entirely in your browser. There’s no server-side component or account — the designer, the intermediate representation, and the exporters all run client-side. Let’s start the repository locally and build a first report from a blank canvas.
@denreport/web, used here, is the reference app you get by running the repository.
What you need
You only need these two things. Versions are pinned; nothing else is required.
- Node.js 24 or later
- pnpm (enabled via Corepack)
Install
Clone the repository and install dependencies.
git clone https://github.com/denreport/denreport.git
cd denreport
corepack enable
pnpm install
Open the designer
Start the dev server. Press Ctrl + C to stop it.
pnpm --filter @denreport/web dev
Open the URL Vite prints (http://localhost:5173 by default) and the designer will start. Drag elements from the palette on the left onto the canvas to place them.
Your first report
denReport layouts are saved as a version-controlled JSON intermediate representation (IR). Coordinates are in millimeters from the top-left origin. Here’s a minimal invoice layout example:
{
"version": "1.1",
"page": { "width": 210, "height": 297 },
"font": { "name": "Noto Sans JP" },
"elements": [
{ "type": "text", "id": "title", "x": 15, "y": 18,
"w": 80, "h": 10, "text": "Invoice",
"fontSize": 18, "align": "left", "lineHeight": 1.25 },
{ "type": "table", "id": "items", "x": 15, "y": 70,
"bind": "items",
"columns": [
{ "key": "name", "label": "Item", "width": 90 },
{ "key": "qty", "label": "Qty", "width": 20 },
{ "key": "amount", "label": "Amount", "width": 30 }
],
"rowHeight": 7, "headerHeight": 8, "minRows": 10 }
]
}
bind). The actual line-item data is supplied from outside at export time.
Export
Choose a target from the toolbar’s “Export” menu. Both are generated from the same IR, and any compatibility warnings are shown before you export.
| Capability | pdfme | ReportLab |
|---|---|---|
| Text, lines, and rectangles | Supported | Supported |
| Tables that split across pages | Supported | Supported |
| Justified spacing (justify) | Supported | Supported |
| Ellipse shapes | Supported | Supported |
The export output is a template plus input data (JSON) for pdfme, and a standalone, font-bundled Python file for ReportLab. Neither output carries any display or disclosure obligations.
What to read next
- Key concepts — how the intermediate representation, targets, and the compatibility matrix relate to each other (coming soon)
- Tables and page breaks — designing reports whose line items span multiple pages (coming soon)
- The intermediate representation (IR) spec — the full reference for element types and attributes (coming soon)