Comparison
A server-side alternative to jsPDF
jsPDF is a browser-side library that constructs PDFs programmatically from text, shapes, and image calls. It does not render HTML. If you have an HTML template and want a pixel-accurate PDF that respects your CSS (Tailwind, Bootstrap, flexbox, grid), fonts, and layout, jsPDF is the wrong tool. PDFPipe renders HTML exactly as a browser would, from a server-side API call.
jsPDF versus a dedicated PDF API
| PDFPipe | jsPDF | |
|---|---|---|
| Renders HTML | Yes, full browser engine | No (programmatic construction only) |
| CSS support | Complete (Flexbox, Grid, variables) | None (not an HTML renderer) |
| Web fonts | Loaded and rendered | Must embed manually as base64 |
| Text selectability | Fully selectable, copy-pasteable | Depends on how text was added |
| Runs on | Your server (one HTTP call) | The user's browser |
| Output consistency | Same across every environment | Varies by browser and screen DPI |
| AI agents | First-class MCP server | Not applicable |
| Sensitive data | Never leaves your server | Rendered in the client browser |
The HTML rendering problem
jsPDF works well when you are generating a PDF entirely in JavaScript: drawing rectangles, placing text at coordinates, adding images. If your source of truth is an HTML template (an invoice, a report, a contract) you have to manually translate every CSS rule into jsPDF API calls. That means pixel-hunting positions, re-implementing your font stack, and breaking every time the template changes. PDFPipe accepts your HTML directly and renders it as the browser would.
Security: PDF generation belongs on the server
Generating invoices, contracts, or reports in the browser means the document data is fully visible in client-side JavaScript, which exposes it to browser extensions, devtools, and XSS. A server-side API call keeps sensitive data out of the client entirely: your server renders the HTML with real data, posts it to PDFPipe, and returns the PDF binary to the browser. The data never appears in the frontend bundle.
One request, real HTML
// Your HTML template, rendered server-side
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 jsPDF
jsPDF is the right tool when you genuinely need to generate a simple PDF entirely in the browser without a server roundtrip: export a user-drawn sketch, save a form the user just filled out locally, or generate a certificate in an offline PWA. For anything that starts from an HTML template on the server, a dedicated render API produces far better output with far less code.
Try it on the live playground with no signup.
See pricing →