HTML to PDF
Set a page of HTML on paper, with the page size, margins and breaks it asks for.
Drop files here
Or paste them, or pick them from this device. Nothing is uploaded: the work happens in this tab.
Files in this tab
Nothing is loaded yet.
Options
What the PDF will be called.
The size and margins in the file, or A4 with 20mm where it names none.
A multiple of the text size. 1.4 is what a book uses.
Even word spacing; an uneven right edge.
Helvetica.
Advanced
A TrueType or OpenType font to set the text in. Needed for anything the built-in typefaces cannot draw — Greek, Cyrillic, Arabic, Chinese. The file is read here, in this tab, and embedded in the PDF.
Drawn at the top of every page, in place of the file's own. Understood: {n}, {total}, {filename}, {date}.
Drawn at the foot of every page, in place of the file's own. Understood: {n}, {total}, {filename}, {date}.
Make the PDF
Add a file to get started.
What this does
This sets a page of HTML on paper, reading the stylesheet for the things that matter on paper: the page size and margins in @page, where the page breaks may and may not fall, and the type. A header or footer at the top level of the body becomes the running head or foot on every page, and it can carry the page number, the total, the filename and the date.
What it will not do
Every tool here says what it cannot do, in its own words, before you rely on it.
- This is not a browser. Nothing is fetched, nothing is run, and there is no viewport: an external stylesheet, an image at a URL, a web font and anything a script would have written are all absent from the file that is read, so they are absent from the PDF.
- The stylesheet is read for `@page` size and margins, for page breaks, and for `font-size`, `font-weight`, `font-style`, `font-family`, `color` and `text-align`. Selectors are matched by element, class and id only. Everything else — floats, flexbox, grid, positioning, backgrounds, borders — is ignored, so a page laid out in columns is set as one column.
- A `<header>` or `<footer>` at the top level of the body becomes the running head or foot on every page rather than content at the start of it. It understands {n}, {total}, {filename} and {date}.
- A picture is drawn only where the file carries its bytes, as a `data:` URI. One named by a path or an address has its alt text set in its place.
- Text is set in the standard fonts every reader already carries, so the file renders identically on a machine that has none of your fonts installed. Anything they cannot draw needs a font file, which is embedded and subsetted into the PDF with it.
- A font file you supply is used for everything: bold, italic and monospaced text are all drawn in that one face rather than in a bold, italic or fixed-width cut of it. Code blocks and columns of figures lose their alignment as a result, so supply one only when the built-in fonts cannot draw your text.
- Shaping and joining come from the font itself, and nothing reorders a line: text is drawn in the order it is given, so a line mixing right-to-left and left-to-right writing comes out in that order rather than in reading order.
Questions people ask
Why does my page not look like it does in the browser?
Because this is not a browser. Nothing is fetched and no script is run, and layout beyond the type is ignored — no floats, grid, flexbox or positioning — so a page laid out in columns is set as one column.
Can I get a running header on every page?
Yes. Put a <header> or <footer> directly inside <body> and it becomes the running head or foot. It understands {n}, {total}, {filename} and {date}.
Is my file uploaded anywhere?
No. The work happens in this browser tab, on your own machine. There is no server in this product to send a file to, which is why the promise is checkable rather than something you have to take on trust: open your browser's network panel and watch it do the work without making a request.
Is there a size limit, or a limit on how many files?
None that we impose. The limit is your own machine's memory, because that is where the work happens — a few hundred megabytes is comfortable on a laptop, and less on a phone. There is no daily task counter, no queue and no account.
What does it cost, and what is the catch?
Nothing, and there is no paid tier that unlocks features: the whole product is the free one. That is affordable because running it costs us nothing — your computer does the work — so there is no per-file cost to recover, no advertising and no data to sell.