Your files stay on your device
HTML to PDF: Sanitized Authoring, pdf.js-Verified
Author a PDF from HTML in your browser: sanitized input, real paged rendering, bundled fonts, every output reopened with pdf.js before download.
HTML sourceOutput modePaperMargin (px, all sides)LandscapeHeader textFooter textOutline from headingsTagging
PDF/UA modes validate the document. They require a title, so turn metadata on and set one.
PDF/ALanguageWrite metadataLocal fontsAdd fontsWOFF2/WOFF/TTF/OTF as bytes, set the family name your CSS references.Image bundleAdd imagesReference them in the HTML as
. Resolved from the bundle, never fetched.AttachmentsEmbed filesUp to 20 files show in the viewer's attachment panel .Render PDF
- Scripts never run; style elements and remote stylesheets are stripped and counted.
- CSS is a document-oriented subset, not Chromium; @page, blur, drop-shadow, and backdrop-filter are out.
- Remote assets are never fetched, images survive as data URLs or user-bundled refs; GIF images are refused.
- Fonts ship as bundled Latin/Latin-ext bytes ( takumi-pdf@0.13.1 ); a glyph no registered font covers fails the render with the char and codepoint.
- Every output is reopened with pdf.js. Page count and page size must match or no file is offered.
- Complex webpage capture is not supported: this is document authoring, not a site printer.
Nothing in yet
Paste, drop, or type to begin. Everything stays on this device.
paste HTML, pick options, render
Next door in Files
- Markdown to PDF (/files/markdown-pdf)
- SVG sanitizer (/files/svg)
- Markdown ⇄ HTML (/text/markdown)
All files tools (/files)
Canonical HTML: https://nutter.tools/files/html-pdf
Markdown version: https://nutter.tools/files/html-pdf/index.md
Plain-text version: https://nutter.tools/files/html-pdf/index.txt
Agent index: https://nutter.tools/llms.txt