HTML to PDF Converter
Paste HTML or upload a .html file, get a PDF. Pick the privacy-first local raster mode, or the server mode for real selectable text.
Two modes—Local runs 100% in your browser. Server (selected in the widget) uploads over TLS, auto-deleted in 10 minutes.
Learn morePaste HTML markup below — only inline CSS/styles will be applied.
External CSS/JS links won't load — inline styles work best. Web fonts must use data URIs or @font-face with a fetchable URL.
Your HTML never leaves your browser. Rendering uses html2canvas + jsPDF locally. JavaScript inside the HTML won't execute — only static layout is captured. Output text is image-based; switch to Server mode for selectable text.
About this tool
Sometimes you just want a PDF of an HTML document — an invoice template you built, a blog post saved as HTML, a styled email signature you want to share, a code-generated receipt page. This tool offers two clearly labeled rendering paths so you can pick the right one for the job. The default Local (raster) mode runs entirely in your browser: html2canvas captures the rendered HTML to a canvas, jsPDF wraps each page-tall slice into a PDF, and nothing leaves your device. Output text is image-based — not selectable, not searchable, not accessible — but the whole conversion is private and fast. The opt-in Server (text-layer) mode uploads the HTML to our server, where headless Chromium renders it just like Chrome's Print > Save as PDF and returns a real text-layer PDF. Output is selectable, searchable, screen-reader accessible, and honours @page CSS and CSS page-break rules. The server auto-deletes everything within 10 minutes; nothing is logged. The how-to and FAQ below cover when to pick each mode and the common gotchas (images not loading, blurry output on retina screens, page break behaviour).
How to html to pdf converter
-
Pick a rendering mode
Local (raster) runs in your browser — privacy-first but text is not selectable. Server (text-layer) uploads to headless Chromium for a real text-layer PDF. The tradeoff is shown next to each option.
-
Paste or upload HTML
Paste raw HTML into the textarea, or drop a .html file. A sample document loads by default so you can see the flow before swapping in your own.
-
Pick a paper size and orientation
A4 or Letter, portrait or landscape. Margin in millimeters is adjustable for breathing room around the content.
-
Click Convert
Local mode finishes in about 2-3 seconds for a 1-page document. Server mode adds an upload step and runs Chromium server-side in roughly 3-8 seconds total.
-
Download the PDF
The output is a paginated PDF based on the paper size you chose. Server-mode output has a filename derived from the HTML <title> tag.
Why use this tool
You hand-built an invoice or a quote in HTML because Word and Google Docs are overkill for one page and now you need a PDF to email a client. You have an email signature with images and styled text and you want a PDF version to include in a packet. You wrote a styled HTML report for an internal stakeholder who insisted on "a PDF, not a link." You generated an HTML document from a script (a daily summary, a customer-facing receipt, a code-generated report) and need a PDF version for archiving. You are testing how a printed version of your web page will look without running an actual browser print job. You built a styled CV in HTML/CSS because you wanted control over typography that Word does not give you. You are creating a one-off branded handout. The Chrome "Save as PDF" flow inside Print is the closest equivalent, but this page lets you do it from inside any browser without opening the print dialog, and works on input you have not loaded as a web page.
Features
Two modes, honest tradeoffs
Pick Local (raster) when privacy matters most — your HTML never leaves your device, conversion runs in your browser via html2canvas + jsPDF, and the output is image-per-page. Pick Server (text-layer) when you need selectable, searchable, accessible text in the PDF — uploads to our server, renders with headless Chromium just like Chrome's Print > Save as PDF, returns a real vector PDF with embedded fonts. Both modes are equally prominent; the labels say exactly what each one does in one sentence.
Real text-layer output (server mode)
The server-side path uses headless Chromium to render your HTML the same way Chrome would, then exports a true PDF with selectable text characters, embedded fonts, and vector graphics. You can highlight, copy, search, screen-read, and OCR-skip the result. CSS @page rules and page-break-before/page-break-after work as you would expect. This is the differentiator over every browser-only HTML-to-PDF tool, which can only produce rasterized output.
Privacy-first local mode
Local mode is fully client-side: html2canvas captures the rendered HTML to a canvas, jsPDF wraps the canvas into PDF pages, nothing touches the network. Useful when the HTML contains personal data (a quote with client details, a signed agreement template, a receipt with a name and amount) you do not want to upload to a converter service. The downside is that external resources (CSS files via URL, web fonts from CDNs, images by URL) do not load — inline what you need or use server mode.
Paste or file upload
Two input modes for two workflows. Paste raw HTML when you have a snippet (an email template, a code-generated document, a chunk of styled content from another app). Upload a saved .html file when you have the full document on disk (a page you saved from a browser with Ctrl+S, an exported report from a script, a static site build output). Both feed into the same conversion pipeline so the output is identical regardless of input method.
Privacy & security
This tool offers two modes with different privacy guarantees, and the mode you pick inside the widget determines what happens to your data. In Local mode the conversion runs entirely in your browser — your input is processed by JavaScript on your device and the result is downloaded straight to your filesystem, with zero network requests to our servers. You can verify this in your browser's Network tab. In Server mode the input is uploaded over HTTPS to our server, processed with a headless renderer there, and returned to you; the uploaded input and the generated output are automatically deleted within 10 minutes and we keep no copies. We do not inspect file contents in either mode, do not log them, and do not share them with third parties. If a stronger privacy guarantee matters, stick to Local mode — the choice is yours and is shown clearly inside the widget.