How to generate modern sans-serif pdf from markdown spec
- Step 1Paste or drop the spec — Paste your spec Markdown into the input area, or drop a
.md,.mdx, or.markdownfile. This tool takes one file at a time. - Step 2Run the conversion — Click Run.
markedparses the Markdown and the result is wrapped in the fixed Modern business stylesheet — no options to set. - Step 3Check the preview — The rendered spec appears in an embedded preview frame. Scroll it to confirm tables, code blocks, and headings look right before exporting.
- Step 4Open the print dialog — Click Print to PDF. This calls the preview frame's own
print(), so your browser's native print dialog opens. - Step 5Save as PDF — In the print dialog, choose Save as PDF (or Microsoft Print to PDF) as the destination, set paper size if needed, and save.
- Step 6Attach to the review — The output file is named after your input with the extension swapped to
.pdf. Attach it to the stakeholder review email or upload it to your doc share.
Modern theme rendering rules (md-to-pdf-modern)
The exact CSS the tool applies to your parsed Markdown. These values are fixed in the tool — there is no settings panel to change them.
| Element | Rendering | Notes |
|---|---|---|
| Body font | Segoe UI, Helvetica Neue, Arial, sans-serif at 10.5pt | The Academic theme uses Georgia serif at 12pt instead |
| Line height / color | line-height: 1.7, text color #111 | Generous leading for on-screen review and print |
| Page margins | @page { margin: 25mm 20mm; } | Top/bottom 25mm, left/right 20mm — applied when you print |
| H1 / H2 | 2em with 2px grey bottom rule / 1.5em with 1px rule | GitHub-like section dividers; H3–H6 sized down with no rule |
Code blocks (pre) | #f6f8fa panel, 4px radius, 0.85em monospace | Plain monospace — no syntax-color highlighting is applied |
| Tables | Collapsed borders, 1px #ddd cells, #f0f0f0 header fill | GFM pipe tables only; rendered from marked's table support |
| Blockquotes | 4px left rule #ccc, text #555 | Good for callouts and assumptions in a spec |
| Links / images | Links #0066cc; images max-width: 100% | Links are clickable in the saved PDF; images scale to page width |
Free vs paid input limits (markdown family)
Limits apply to the single Markdown file you convert. The character limit (charLimit) is checked separately from raw file size.
| Tier | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 10 |
| Pro-media | 50 MB | 20,000,000 | 50 |
| Developer | 500 MB | Unlimited | Unlimited |
Parser feature support (via marked, GFM defaults)
What the underlying CommonMark/GFM parser does and does not render in the PDF.
| Feature | Supported? | Behaviour |
|---|---|---|
| GFM tables | Yes | Pipe tables render as bordered HTML tables |
| Strikethrough / task lists | Yes | ~~text~~ strikes through; - [ ] / - [x] render as checkboxes |
| Autolinks | Yes | Bare URLs become clickable #0066cc links |
| Syntax highlighting | No | Code is monospaced on a grey panel, no token colors |
| Math / KaTeX / MathJax | No | $...$ and \(...\) are passed through as literal text — normalize math elsewhere |
Footnotes ([^1]) | No | Not part of the default GFM set; renders as literal text |
Cookbook
Real spec snippets and how the Modern theme renders them. Each shows the Markdown source and the rendered behaviour you can expect in the PDF.
A requirements matrix renders as a bordered table
Spec requirement tables are the most common structure reviewers care about. GFM pipe tables are on by default, so this renders with collapsed borders and a #f0f0f0 header row — no setup.
Source Markdown: | Req | Priority | Status | |-----|----------|--------| | Auth via SSO | P0 | ~~Deferred~~ | | Rate limiting | P1 | Planned | Rendered in PDF: - Bordered table, grey header fill (#f0f0f0) - "Deferred" shows struck through (GFM strikethrough)
Code and schema snippets stay verbatim
API request samples and JSON schemas in fenced blocks render on the grey code panel in monospace. The language tag is preserved in the source but no color highlighting is applied to the PDF.
Source Markdown:
```json
{ "id": "u_123", "role": "admin" }
```
Rendered in PDF:
- #f6f8fa panel, 4px radius, 0.85em Courier-style font
- Characters exactly as written; no syntax coloringFilename of the saved PDF
When you drop a file, the output name is derived by swapping the Markdown extension for .pdf. Pasted-in text uses the tool's default name.
Input file: feature-spec-v3.md Output name: feature-spec-v3.pdf (.md, .mdx, and .markdown extensions are all swapped to .pdf)
A logo at the top of the spec
There is no logo uploader. To brand the cover, put a Markdown image at the very top of your document — it scales to the page width (images are capped at max-width: 100%).
Source Markdown (first line of the doc):  # Feature Spec: Single Sign-On Rendered: the logo image appears above the H1, scaled to fit the page; it does NOT repeat on every page (no running header).
Math notation is not rendered
If your spec includes inline math for, say, a rate-limit formula, the dollar-delimited LaTeX passes through as plain text. Normalize or remove math before converting.
Source Markdown: Throttle at $r = n / t$ requests per second. Rendered in PDF: Throttle at $r = n / t$ requests per second. (the $...$ is shown literally — no formula typesetting)
Edge cases and what actually happens
File over 1 MB on Free
RejectedThe markdown family Free tier caps input at 1 MB. A large spec with embedded base64 images can exceed this. Upgrade to Pro (10 MB) or strip inline images and reference them by URL instead.
Document over 500,000 characters on Free
RejectedcharLimit is checked independently of byte size. A very long spec under 1 MB can still exceed 500,000 characters. Pro raises this to 5,000,000.
Multiple files dropped
By designmd-to-pdf-modern converts one file per run. To combine several spec files into one PDF, merge them first with md-merger, then convert the merged file.
Looking for a custom-CSS or @page override
Not availableThe Modern theme is fixed — there is no custom-CSS field, theme picker, or page-header control in this tool. Your only style choice is Modern (this tool) versus the Academic serif theme.
Syntax highlighting expected in code blocks
By designCode renders on a grey monospace panel with no token coloring. The parser does not run a highlighter. The code text itself is fully preserved.
Math formulas in the spec
Preserved$...$ / \(...\) are emitted as literal characters — no KaTeX/MathJax. Run md-math-normalizer to standardize delimiters, but rendering still won't typeset them in this PDF.
Print dialog never opens
ExpectedThe PDF is produced by your browser's print engine via the preview frame. If a pop-up or print blocker intercepts it, allow the print action for the page, or use the browser menu's Print on the preview.
Page breaks split a table mid-row
ExpectedPage breaks are decided by the browser print engine using the 25mm 20mm margins; there are no manual page-break controls. Long tables may break across pages — reflow your source if a clean break matters.
Want a serif, academic look instead
SupportedUse md-to-pdf-academic for Georgia serif at 12pt with the same margins. Same engine, different fixed stylesheet.
Need an editable Word file, not a PDF
SupportedUse md-to-docx to get a .docx with real Word heading and list styles that stakeholders can edit and comment on.
Frequently asked questions
Modern vs Academic — which should I pick?
Modern (this tool) uses Segoe UI/Helvetica Neue/Arial sans-serif at 10.5pt for a contemporary business look. Academic uses Georgia serif at 12pt for a scholarly feel. Both share the same 25mm 20mm margins and engine — pick by audience expectation.
Can I change the font, colors, or add a custom stylesheet?
No. The Modern theme is fixed in the tool with no settings panel and no custom-CSS field. Your styling choice is Modern vs the Academic serif theme — nothing finer-grained than that.
Will Loom, Figma, or Jira links be clickable in the PDF?
Yes. Explicit Markdown links and bare URLs both render as clickable #0066cc links, and that interactivity is retained when you save as PDF.
Do spec tables render correctly?
Yes — GFM pipe tables are on by default and render with collapsed 1px #ddd borders and a #f0f0f0 header row. Only pipe-table syntax is supported; HTML tables in your source pass through as written.
Is my unreleased spec uploaded anywhere?
No. Parsing runs in your browser with marked, and the PDF is produced by your browser's own print engine. The document never reaches a server.
How big a spec can I convert for free?
The Free markdown tier allows a 1 MB file with up to 500,000 characters, one file per run. Pro raises this to 10 MB / 5,000,000 characters and up to 10 files.
Why is the output a print dialog instead of an instant download?
A pdf result is rendered into a preview frame, and Print to PDF invokes your browser's print engine on that frame. You choose Save as PDF as the destination — this is how the browser produces the file.
Can I add a company logo or page header?
Put a Markdown image at the top of the document for a one-time logo (it scales to page width). There is no repeating running-header feature in this tool.
Are code samples syntax-highlighted?
No. Fenced code renders on a #f6f8fa monospace panel with the text preserved exactly, but without token coloring. Language tags in fences are kept in the source but don't add color.
Does it render LaTeX or math?
No. $...$ and \(...\) are emitted as literal text. There is no KaTeX or MathJax. md-math-normalizer can standardize the delimiters, but they still won't be typeset in the PDF.
Can I batch-convert several specs at once?
This tool is single-file. Merge the specs into one document with md-merger (Pro for many files) and convert the merged file, or convert each file individually.
I need an HTML version for the wiki too — what should I use?
Use md-to-html for a clean semantic HTML fragment or full document. It runs the same marked parser, so tables and code blocks behave identically.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.