Stop hand-coding coordinates
You no longer need to write report layouts as hard-coded coordinates. Design on a canvas, and get the result back as code.
Report designer · Open source
Design invoice and delivery-note layouts in your browser, then export them as templates or code for the PDF library you already use. Layouts are an open JSON intermediate representation you can manage in Git — no lock-in to any single library.
Export
Export directly from the designer to the library you already use.
* Currently pdfme and ReportLab only
import os import sys from reportlab.lib.units import mm from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfgen.canvas import Canvas FONT_NAME = "NotoSansJP" FONT_FILE = "NotoSansJP.ttf" FONT_ASCENT_EM = 1.16 PAGE_WIDTH = 210 * mm PAGE_HEIGHT = 297 * mm PAGE_COUNT = 1 …
Principles
You no longer need to write report layouts as hard-coded coordinates. Design on a canvas, and get the result back as code.
Layouts are version-controlled JSON, with a parser and validator included. You're never locked into denReport itself — track every change in Git.
No server, no account. The designer, the intermediate representation, and the exporters all run in your browser — your report data never leaves your environment.
Everything you need
Everything listed here is already implemented and free to use.
Place text, shapes, images, barcodes/QR codes, and tables that split across multiple pages on an absolute-coordinate canvas. Row and column flex containers let you build repeating layouts too.
The font used for export is embedded in the editor too, so character-width calculations match between design and output. Supports line-breaking rules (kinsoku) and justified spacing.
Mark a document as a qualified invoice (Japan's invoice system for consumption tax) and a validation panel confirms the legally required fields are all present.
Layouts are version-controlled JSON, with a parser and schema validator included, so other programs outside denReport can work with them too.
Generate both a pdfme template with input data and standalone, font-bundled ReportLab Python code from the same IR.
See a list of everything that will be approximated or unsupported on your chosen target before you export — know it at design time, not after opening the PDF.
Embed · self-host
Keep everything inside your own app or internal environment — no hosted service required.
@denreport/designer embeds into your app through a small Designer class.
import { Designer } from "@denreport/designer"; import "@denreport/designer/styles/tokens.css"; import "@denreport/designer/styles/app.css"; const designer = new Designer( document.getElementById("app")! );
License: MIT. Every feature is free to use.
Clone the repository and start a local dev server. Requires Node.js 24 or later and pnpm.
git clone https://github.com/denreport/denreport.git cd denreport corepack enable pnpm install pnpm --filter @denreport/web dev
This starts the Vite dev server. Open the URL it prints.
Clone it and you're up and running. Feedback and issues are welcome.
github.com/denreport/denreport