Skip to main content

Convert Markdown to a Styled PDF

Markdown is how notes, READMEs, meeting minutes and AI output all arrive now, and none of it is in a form you can hand to somebody who wanted a document. This page typesets it: headings in a clear hierarchy, lists that indent, tables with a rule under the header, code in a monospace block with a tinted background, and page numbers if you want them. The text in the result is real text — selectable, searchable, and a few kilobytes.

Markdown

Times body copy and wide margins. The right default for anything that will be printed or read end to end.

413 characters

Document outline

  • Quarterly update
  • What shipped

When the document needs to look like something

A typeset PDF is a good default. Moda is where the same content becomes a designed document, a deck, or a diagram.

Try Moda free →

Real text, not a picture of text

Almost every browser-based markdown-to-PDF converter works by rendering your markdown to HTML, taking a screenshot of it, and putting the picture in a PDF. It is by far the easiest way to build one and it fails in four ways at once: you cannot select or search the words, the file is ten to fifty times larger than it should be, the text goes soft when zoomed or printed, and anything that indexes documents sees a blank page. This page draws every word as a PDF text run in an embedded font instead. A two-page document comes out around 10 KB, you can copy a paragraph straight out of it, and Ctrl+F works.

What is supported, and what each construct becomes

Headings collapse to three levels — a printed page has room for three distinguishable sizes above body copy, and a fourth is indistinguishable from bold text. Bullet and numbered lists nest by indenting, with the numbering continuing from an explicit start if your markdown sets one. Bold, italic, and inline code work anywhere, including inside each other. Links are drawn in blue with their text intact. Blockquotes get a grey rule down the left. Code fences keep their spacing in Courier on a tinted band and are deliberately never wrapped — a wrapped line of code reads as a different line of code, so a long one is clipped instead. GitHub-style tables render with equal columns and a header rule, truncating cells that do not fit rather than reflowing the grid. Images are not fetched: this page never touches the network, so an image reference leaves its alt text in place.

The three styles, and when each is right

Classic sets the body copy in Times with generous margins, which is what you want for anything that will be printed or read end to end — serif faces are measurably easier on long passages in print. Modern is Helvetica throughout at a slightly smaller size, which matches how product documentation looks on a screen and is the better choice for something that will be read in a PDF viewer. Compact tightens the type and the leading and pulls the margins in, fitting substantially more on a page; use it for reference material somebody will scan rather than read. All three use a sans-serif for headings regardless of the body face, because that contrast is the single cheapest thing that makes a document look typeset rather than defaulted.

The font limitation, stated up front

The PDF specification includes fourteen fonts every reader is required to have, and this page uses them rather than embedding a typeface of its own — which is what keeps the output tiny and guarantees it renders identically everywhere. The cost is coverage: those fonts encode Latin letters and Western European accents plus common typographic punctuation, and nothing else. Greek, Cyrillic, Hebrew, Arabic, and any CJK script have no glyphs available and come out as question marks. The page detects that before you download and says so, rather than handing you a file to discover it in. Curly quotes, dashes, and the unusual spaces that come with pasted text are folded to their plain equivalents rather than replaced.

Frequently asked questions

Does my text get uploaded?

No. Parsing and typesetting both happen in this browser tab, and the PDF is assembled in memory before your browser saves it. Nothing is sent anywhere — which matters given how much of what people convert is a draft, a set of notes, or something an AI wrote that has not been reviewed yet.

Can I use my own CSS or a custom template?

No. Custom CSS only makes sense with an HTML rendering path, and an HTML rendering path is what produces the screenshot-in-a-PDF result this page exists to avoid. Three considered styles cover the realistic range for a converted markdown document; anything beyond that is a design job rather than a conversion.

Why is my table cut off?

Columns are equal width and cells that do not fit are truncated rather than wrapped, because a wrapping cell changes the height of a row and pushes the rest of the layout around. Markdown tables with long prose in a cell are the case this handles worst — a bulleted list usually reads better in a PDF anyway.

How long can the document be?

Up to 400,000 characters, which is several hundred pages of prose and far past what anyone converts in one go. The output has no page limit of its own; pages are added as the content needs them.

Is there a watermark?

No, and no account, no export limit, and no paid tier. The only thing the file records about its origin is a standard PDF creator field.

Related tools

← All tools