Markdown to PDF, with Bookmarks and a Contents Page

Paste or drop a Markdown file and get a PDF whose headings are real, nested bookmarks in the sidebar — plus a clickable contents page if you want one. Code blocks, tables, nested lists and internal links all survive. The preview is the actual output, and nothing leaves your browser.

Output

Preview

The PDF appears here as you type.

Markdown already has the structure — keep it

A Markdown file is an outline with prose attached: the heading levels say exactly how the document nests. Most converters throw that away at the last step and hand back a PDF that only scrolls. This one carries the heading tree into the PDF's bookmark sidebar, points each bookmark at the heading itself, and can print a contents page whose entries jump to the right place.

It's the same outline writer behind the TOC generator and the bookmark-preserving merge, so a PDF made here can be merged, split or re-edited by the other tools without losing anything.

Questions

What makes this different from other Markdown to PDF converters?
The bookmarks. Most converters print Markdown to a PDF and stop; the headings become big text and nothing else. Here every heading becomes an entry in the PDF's bookmark sidebar, nested the way the headings nest, pointing at the heading itself rather than the top of its page, with an optional clickable contents page. A 40-page spec is navigable instead of scrollable.
Which Markdown syntax is supported?
Headings (# and underlined), paragraphs, bold, italic, inline code, links, bulleted and numbered lists with nesting, task lists, fenced and indented code blocks, block quotes, horizontal rules, pipe tables, and YAML front matter (a title: line sets the PDF title). Images are replaced by their alt text — nothing is fetched. Raw HTML is printed as text.
Do internal links like [see setup](#setup) work?
Yes. A link to a #heading-slug becomes a clickable jump to that heading in the PDF, using the same slug rules GitHub uses. External http(s) and mailto links are clickable too.
Why were some characters dropped?
The PDF uses the standard built-in fonts, which cover Latin scripts (accents, €, curly quotes, dashes, bullets) but not CJK text, emoji or most symbols. Arrows and check boxes are mapped to ASCII; anything else is removed and the count is shown above the preview so nothing goes missing silently.
Is my document uploaded?
No. Parsing, layout, the bookmark tree and the preview all happen in your browser with pdf-lib and pdf.js. The Markdown never leaves your machine.
Related tools:Want to rename or re-nest the bookmarks afterwards? Open the bookmark editor.Combine several converted files into one, bookmarks intact.See all tools