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 `<img src="./name.png">`. 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

