HTML to PDF API · In development
Send HTML. Get back a PDF that looks right.
PagedPDF is an API for developers who are done fighting headless Chrome. Table rows stay whole, page numbers work and your fonts stay your fonts, with no browser to run.
Invoice 1042
| Item | Qty | Amount |
|---|---|---|
| Design retainer | 1 | $2,400.00 |
| Site hosting, annual | 12 | $348.00 |
| Support hours | 6 | $540.00 |
| Domain renewal | 2 | $28.00 |
| Accessibility review | 1 | $620.00 |
| Content migration | 1 | $1,150.00 |
| Analytics setup | 1 | $275.00 |
Page 1 of 2
| Item | Qty | Amount |
|---|---|---|
| Email templates | 4 | $360.00 |
| Security patching | 3 | $225.00 |
| Staff training | 2 | $300.00 |
| Total | $6,246.00 |
Page 2 of 2
What the API will fix
Each of these comes from problems developers keep reporting, and we've reproduced them in Chrome.
| Running Chrome yourself | With PagedPDF |
|---|---|
| Tall table rows get cut in half at a page break. | Rows stay whole by default, and table headers repeat on every page. |
| A footer with no font size prints at 0.7pt, and with no margin it lands on your content. | Set "footer": "Page {page} of {pages}" and it works. |
| Relative font URLs fail silently, and your PDF comes out in Times New Roman. | Pass a base_url, and get a warning if a font or image doesn't load. |
| Serverless hosts have almost no fonts, so emoji and Chinese, Japanese or Korean text can go missing. | Common fonts are already installed, including emoji and CJK. |
| You run Chromium: cold starts, memory limits and crashes. | One HTTP request, with nothing to install or keep running. |
One request
curl https://api.pagedpdf.com/v1/pdf \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"html": "<h1>Invoice 1042</h1>...", "footer": "Page {page} of {pages}"}' \
-o invoice.pdf
This is the planned API. Details may change before launch.
Running Chrome yourself?
These guides cover the fixes, and we tested every claim in real Chrome builds.
- Puppeteer PDFs on Vercel: a working setup, the limits that bite, and why your fonts change
Generate PDFs from a Next.js route on Vercel with @sparticuz/chromium: the fix for the missing bin folder error, measured cold starts, size limits and font fixes.
- Page numbers in Puppeteer PDFs: footerTemplate gotchas and the CSS @page alternative
Why your Puppeteer footer is invisible or overlaps the content, how to fix it, and how Chrome 131+ lets you put 'Page 1 of 4' in plain CSS instead.
- Puppeteer PDF tables: repeat the header on every page and stop rows splitting
Chrome already repeats <thead> on every printed page. One CSS line stops rows splitting across pages. Here are the markup mistakes that make headers vanish, all tested.
Get early access
Join the waitlist and try the API as soon as it's ready.