PDF to Markdown

Headings, lists, tables and images turned into clean Markdown, with an optional bundle of chunks for a knowledge base. All of it in your browser.

Open in PDF ARENA

Reading order first

Two columns, sidebars and running headers get sorted out before a single character is written.

Tables with a verdict

Each table carries a confidence figure. A shaky one is flagged, never quietly invented.

A package, not a dump

Chunks with their heading path, pages and hash. Drop it straight into a knowledge base.

Markdown that keeps the shape of the document

A PDF holds no paragraphs. It holds fragments of text, each carrying a matrix that says where to paint it. Dump those in file order and you get gibberish the moment a page has two columns, a sidebar, or a banner repeating at the top of every sheet. So the work happens before any Markdown exists. Fragments become reading lines, lines sort into columns, running banners get spotted and dropped, and only then does prose turn into headings, bullets and grids. Heading levels come from the sizes your document actually uses, ranked: biggest is first, whatever it measures. A fixed threshold misreads an 18-point title in an 11-point report every single time. All of it inside your browser. Nothing travels.

How to convert a PDF to Markdown

1

Open your PDF

Drop it in. Conversion starts straight away and the file stays on your machine.

2

Read what came out

The result lands in a box you can edit. Fix a heading, join a split sentence, delete a stray line.

3

Pick your flavour

GitHub, CommonMark, MDX, Obsidian or Notion. Images in a folder or inline. Grids as Markdown, HTML or CSV.

4

Download, or build the package

One .md, or a ZIP holding chunks, pictures, grids and provenance for a knowledge base.

What gets reconstructed, and what gets flagged

Columns are found by hunting gutters: vertical strips no line crosses, spanning most of the text band. Width alone proves nothing. A single-column report with one two-cell grid has narrow gaps scattered everywhere, and a threshold on width would call each of them a column boundary, so what settles it is that a real gutter is one every body line respects and the share of height covered on both flanks decides. Running banners are matched with digits normalised away, since "Page 3 of 40" and "Page 4 of 40" are one footer. Six pages out of ten. Below that, the line stays. Grids are the honest part. Three or more consecutive lines whose fragments begin at roughly matching x positions form a table; prose does not. Boundaries cluster with a tolerance proportional to type size, and every table emerges carrying a confidence figure: the share of its lines that genuinely respect them. Below 0.6 it still gets written, flagged and raised as a warning. Inventing cells would be worse. Pictures come cropped from the rendered page at 216 dpi rather than pulled out of the original stream. That costs native resolution, and buys survival across every encoding a PDF can carry. The bundle holds one chunk per line in JSONL, each with its heading path, pages, token estimate and SHA-256, plus a map naming which page produced each block. Chunks break on block edges. Always. Splitting a paragraph mid-sentence to hit a token count yields fragments nobody reads alone, which defeats retrieval entirely.

Why this one

Reading order solved first: columns, sidebars, repeating banners.

Tables carry a confidence figure, and a doubtful one says so.

Chunks, provenance and hashes in one bundle, assembled on your machine.

Questions about PDF to Markdown

Short answers, limits included

Does it handle two-column documents?
Yes. Gutters are found per page and each column is read top to bottom before the next begins. Papers and magazines emerge in the order a person reads them, not the order the file stores.
Are the tables reliable?
They arrive with a number telling you. A PDF has no such thing as a cell, only positions, so a table is always a reconstruction. Above 0.6 it is usually exact; below that it comes with a warning so you look. Nothing gets invented.
What happens to the images?
They are located through the content stream, then cropped from the rendered page at 216 dpi, either into an images folder or inlined as base64. You can also skip them.
What is in the RAG package?
document.md, chunks.jsonl with one chunk per line carrying its heading path and pages, metadata.json with counts and warnings, source-map.json with every block's position, plus the pictures and the grids as CSV.
Does it convert formulas to LaTeX?
Not yet, and it admits that instead of mangling them. Mathematical runs emerge as the characters they hold: readable, but not valid LaTeX.

Updated on