The Complete Guide to HTML-to-PDF Conversion in 2026
Everything you need to know about converting HTML to PDF — tools, libraries, APIs, CSS print styles, and best practices.
The fundamentals
HTML-to-PDF conversion takes an HTML document with CSS styling and produces a PDF file. The challenge is that HTML is designed for screens (infinite scrolling, responsive layout) while PDF is designed for print (fixed pages, exact positioning).
Approaches
1. Browser-based (Puppeteer, Playwright)
Load the HTML in a headless browser, call page.pdf(). Pros: supports JavaScript, renders exactly like Chrome. Cons: slow, memory-hungry, requires Chromium binary.
2. Native engines (pdfRelay, Prince, WeasyPrint)
Parse HTML and CSS directly without a browser. Pros: fast, lightweight, consistent output. Cons: may not support every CSS feature (though pdfRelay supports flexbox, grid, and most modern CSS).
3. Template libraries (pdf-lib, jsPDF, React-PDF)
Build the PDF programmatically with code instead of HTML. Pros: full control over every element. Cons: you're writing imperative code to position every element — no CSS, no responsive layout, no reuse of existing HTML skills.
CSS for print
The key CSS features for PDF generation:
@page {
size: A4;
margin: 20mm;
}
@page :first {
margin-top: 40mm; /* Extra top margin on first page */
}
.page-break {
break-before: always; /* Force a page break */
}
.no-break {
break-inside: avoid; /* Keep element on one page */
}
With pdfRelay, your existing CSS just works. Flexbox, Grid, custom fonts, background colors — the Rust engine handles it all. No proprietary markup languages. No coordinate-based layouts. Just HTML and CSS — the standards every web developer already knows.