You’ve received a PDF report — documentation, meeting minutes, a thesis — and you want to reuse it in a wiki, a Git repository or an Obsidian vault. Copy-pasting page by page gives you a raw text blob with no structure. PDF → Markdown conversion aims higher: restoring headings, paragraphs and tables in an editable syntax. And since everything happens in the browser, the document never leaves your machine — useful when the report is internal or confidential.
How extraction works
The tool relies on pdf.js, the same library that powers Firefox’s PDF viewer. For each page, getTextContent() returns text fragments with their position and font size — that’s the PDF’s text layer, not a visual reconstruction.
Structure is then inferred by a simple heuristic:
- Fragments are grouped into lines by vertical position (5 px tolerance).
- The page’s median font size is the reference: a line whose font exceeds 1.8× the median becomes a
#, above 1.4× a##, above 1.15× a###. - Everything else is concatenated into paragraphs, in the page’s reading order.
For tables, an additional detection pass looks for at least three lines whose cells align vertically (same horizontal position, within 5 px). When a grid is recognized, it’s transcribed into | col | syntax — the first line becomes the header.
The flow
- Drop your PDF (one file at a time, up to 50 MB and 1,000 pages).
- Click “Extract”: progress is shown page by page, with a cancel button.
- Check the preview: the first 2,000 characters of the Markdown are displayed before download.
- Download the
.md: each page is marked with a<!-- Page N -->comment and pages are separated by a---line, which helps trace back the original pagination.
What survives — and what’s approximate
Faithfully restored: headings (when the font-size hierarchy is clear), paragraphs, text order, and regular tables converted to Markdown grids.
Approximate or lost:
- Nested lists: bullets aren’t detected as such — a two-level list comes out as continuous text, to re-indent by hand.
- Links: link annotations aren’t read; only visible text survives, URLs are lost.
- Images and figures: no image extraction — the Markdown stays purely textual.
- Styles: bold, italic and colors aren’t transcribed — the heuristic only looks at font size.
- Multi-column layouts: vertical grouping can interleave columns — check brochures and press articles.
- Complex tables: merged cells or irregular grids produce shifted columns — hence the “best-effort” caveat.
In short: the produced Markdown is a working structure, not a faithful transcription. Plan a proofreading pass, especially if the PDF is dense.
When it’s enough, when to prefer something else
Markdown extraction is the right choice when you want structured, editable text: importing sections into a wiki, reusing headings in an outline, versioning the content.
Prefer plain text if structure doesn’t matter — for indexing or searching the content, plain text extraction is more direct. And if the PDF is a scan with no text layer, the tool detects it (it checks the first pages) and warns you: you first need a local OCR pass to create the text layer, then rerun the extraction.
The other direction
If your need is rather to produce a PDF from Markdown notes — to send or print it — that’s the other end of the chain, covered by Markdown to PDF: convert locally. The two tools complement each other: Markdown → PDF for distribution, PDF → Markdown for reuse.
Limits
- The result is approximate by nature: no automatic PDF → Markdown faithfully restores lists, links and styles — ours are detailed above rather than oversold.
- Heading detection depends on font sizes: a document where everything is the same size will produce no headings.
- One file at a time, 50 MB maximum, 1,000 pages maximum.
- Scanned PDFs require a prior OCR pass — extraction alone reads nothing from them.


