/ Use cases

Documents that need
to render right.

A non-exhaustive list of workloads 21pdf is actually good at — plus the primitives each one relies on, so you can evaluate fit before touching curl.

/ Finance

Invoices & statements

Render a per-customer HTML invoice to a print-fidelity PDF for email delivery and tax archiving.

  • POST /v1/convert
  • options.page_size: "A4"
  • wait_for_network_idle
/ Commerce

Receipts

Order-confirmation receipts rendered from the same HTML template your email client shows.

  • simple_html input
  • portrait + narrow margins
  • async polling
/ Logistics

Shipping labels

Compact A6/Letter labels with barcodes — CSS controls dimensions, Chromium renders the barcode font.

  • custom margins
  • A5 / Letter / Legal
  • @page size override
/ Compliance

Audit reports

Periodic reports from an internal dashboard URL. SSRF-checked fetch keeps the renderer off your metadata endpoints.

  • url input
  • SSRF double-defence
  • audit_log
/ HR

Offer letters & policy docs

Templated HTML → PDF with headers/footers rendered in the same CSS you use on screen.

  • html input
  • CSS @page
  • long-job polling
/ Internal

System exports

Dashboards to PDF for offline review — the URL path integrates cleanly with your existing auth proxy.

  • url input
  • integration keys
  • quota=-1 on internal
/ Healthcare

Patient summaries

Rendered from a trusted internal URL. PDFs stored in MinIO with SSE-S3 + retention limits.

  • SSE-S3 at rest
  • PDF_RETENTION_DAYS
  • audit_log
/ Education

Certificates & transcripts

Per-student HTML → PDF. Variants via CSS class swaps, rendered by the same Chromium instance as screen.

  • batch via queue
  • portrait/landscape
  • page_size A4
/ Marketing

Download-gated reports

Publish HTML → render to PDF for the gated download. Fresh content on every fetch, cached per request.

  • url input
  • wait_for_network_idle
  • fast cold-start

Pattern A · raw HTML

Best when the source is in your service (an invoice templated from DB rows). Avoids a cross-service URL fetch — lowest latency.

{
  "html": "<!doctype html><body><h1>Invoice 2041</h1>...",
  "options": {
    "page_size": "A4",
    "margin_top": 18, "margin_bottom": 18,
    "margin_left": 15, "margin_right": 15,
    "wait_for_network_idle": true
  }
}

Pattern B · URL fetch

Best when the document is already a page on an internal dashboard. SSRF is checked twice: at the HTTP boundary and inside Chromium.

{
  "url": "https://reports.internal/quarterly/2026-q1",
  "options": {
    "page_size": "Letter",
    "orientation": "landscape",
    "wait_for_network_idle": true
  }
}

Doesn't fit?

Tell us what you need. We'd rather say "not yet" than fabricate a roadmap.

Contact us → Read the docs