Comparison
A server-side alternative to pdfmake
pdfmake generates PDFs from a JSON document definition object: you describe the layout as a JavaScript data structure with columns, tables, stacks, and style objects. It does not render HTML. Every template is a separate data model you have to keep in sync with your actual UI. PDFPipe renders your HTML and CSS directly, the same way a browser does, from a single POST request.
pdfmake versus a dedicated PDF API
| PDFPipe | pdfmake | |
|---|---|---|
| Template format | HTML + CSS you already have | JSON document definition object |
| Renders HTML | Yes, full browser engine | No (proprietary definition format) |
| CSS support | Complete | None (own style system) |
| Web fonts | Loaded automatically | Must download and register manually |
| Complex tables | CSS Grid / table layout | Limited column system |
| Runs on | Your server (one HTTP call) | Node.js or browser |
| Designer workflow | Design in HTML, ship as PDF | Translate design to JSON objects |
| AI agents | First-class MCP server | Not applicable |
The JSON definition problem
pdfmake has its own layout language expressed as JavaScript objects: columns are arrays, tables are objects with body arrays, styles are separate dictionaries. This works well for simple documents, but breaks down when the layout is complex: responsive behavior is impossible, CSS flexbox and grid are unavailable, and any designer-led change in your UI has to be manually re-expressed in the pdfmake schema. Two sources of truth diverge over time. PDFPipe has one source of truth: your HTML.
Fonts, images, and real-world layouts
pdfmake requires you to download font files and register them in a virtual filesystem object. Every web font your designers chose needs to be fetched, encoded, and embedded manually. Images need to be either embedded as base64 or loaded from a URL at render time. Complex layouts involving overlapping elements, sticky headers, or multi-column text are simply not achievable. PDFPipe renders exactly what a browser would, including web fonts loaded from CDNs, CSS variables, and modern layout primitives.
From HTML to PDF in one request
// Your existing HTML template: no JSON schema to maintain
const html = renderInvoiceTemplate(order);
const res = await fetch("https://api.pdfpipe.xyz/v1/pdf", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PDFPIPE_API_KEY}` },
body: JSON.stringify({ html, options: { format: "A4" } }),
});
const pdf = await res.arrayBuffer();When to keep pdfmake
pdfmake is a reasonable choice when you need to generate a simple structured document entirely in the browser without any server dependency, and the layout is simple enough that the JSON schema stays manageable. For server-side generation, HTML templates, or complex layouts, a dedicated render API produces better output with far less code and maintenance.
Try it on the live playground with no signup.
See pricing →Competitor pricing and features on this page were last reviewed on 21 September 2026. Vendors change their plans, so check their own pricing page before deciding. If something here is out of date, tell us and we will correct it.