PDF (@sumx/ssr-pdf)
Server-side HTML → PDF using Puppeteer. Designed for Next.js Pages Router pages/api routes.
Install
pnpm add @sumx/ssr-pdfRuntime: Chromium must be available in the deployment image (see Configuration and portal Dockerfile).
Interactive demo
Calls POST /api/html-to-pdf (same handler as the portal via @sumx/ssr-pdf). Requires Chromium/Puppeteer at runtime.
Preview is only available on localhost or dev.sumx.app. Download works on any host that runs the API route.
Quick wire-up
// src/pages/api/html-to-pdf/index.ts
export { default } from '@sumx/ssr-pdf/next/html-to-pdf-handler';
export { htmlToPdfApiRouteConfig as config } from '@sumx/ssr-pdf';Next.js requires config to be defined inline in the route file (do not re-export config from the package only).
Documentation map
| Topic | Page |
|---|---|
createHtmlToPdfHandler, route config | API route handler |
| Body validation, filename, margins | Request utilities |
| Concurrency limiter | Render concurrency |
| Env vars, Docker, debugging | Configuration |
Subpath exports
import { createHtmlToPdfHandler, htmlToPdfApiRouteConfig } from '@sumx/ssr-pdf';
import { sanitizePdfFilename } from '@sumx/ssr-pdf/html-to-pdf-request';
import { acquirePdfRenderSlot } from '@sumx/ssr-pdf/pdf-render-slot';Security
- POST only; validate body size (5mb default via route config).
disposition: inlinerestricted by host allowlist (dev hosts by default).- Sanitize filenames — no path segments or reserved characters.
- Run on server only — never ship Puppeteer to the client bundle.
Related guide
PDF API guide — portal usage patterns and examples.