PDF to Markdown

Convert a text-based PDF to Markdown in your browser. Free, no account, no upload. Headings, lists, and paragraphs from the text layer — not from a scan.

Loading the PDF converter…

How to convert a PDF to Markdown

Three steps on this page. The file never goes to a server. If you need a public web page instead of a PDF, use URL to Markdown.

1

Drop or choose a PDF

Use the file field or drag a PDF onto the box. Parsing starts in your browser. Files over 50 MB are refused. A password-protected file stops with an error instead of a partial note.

2

Read the Markdown

Lines are grouped by position. Headings come from font size. Wrapped lines join, including a hyphen that exists only because the line broke. Repeated headers, footers, and bare page numbers are removed. Turn on Show page numbers if you want a Page N line. Tables and columns are best-effort.

3

Copy, download, or send

Copy the Markdown, download a .md file named after the PDF, switch to Preview, or send it to ChatGPT, Claude, Gemini, or Perplexity. The stats line shows pages, words, and the approximate Markdown size. Pages with no text items are called out. There is no OCR.

Why convert a PDF to Markdown for notes and LLMs

A PDF is a page description. Characters sit at coordinates, often with a font size and little else that says “this is a heading.” Markdown is the opposite: a heading is a line of hashes, a list is a dash, and a paragraph is a block of text. That is the shape ChatGPT, Claude, Gemini, and Perplexity already read well, and it is the shape Obsidian and a Git repo store without dragging a layout engine along.

People search for “pdf to markdown”, “convert pdf to markdown”, “pdf to md”, and “pdf to markdown for chatgpt” when a paper, a report, or an export is stuck in a viewer and the next step is a prompt or a note. Pasting the raw text keeps every line break the typesetter inserted. The model then spends attention on “exam-” at the end of a line instead of the word “example”. A converter that joins those wraps, marks real headings, and strips the footer that repeats on every page gives the model the article instead of the page furniture.

Markdown is also smaller than a PDF’s drawing commands, and usually smaller than HTML dumped from a conversion service. After you convert, paste the note into the Token Counter if the budget matters. The research workflow and the send-to-ChatGPT guide cover the same idea for web pages. This page is the path when the source is a PDF file you already have.

What the converter actually does

On file select, the page loads pdf.js in this tab and reads the bytes you dropped. Nothing uploads the file. Range requests, streaming, wasm, and fetches of character maps or standard fonts are turned off, and the parser is not given a URL to go get them. A status line says “Parsing page x of y” while that happens. The worker script is bundled with the site, not loaded from a third-party host.

Each text fragment arrives with a string, a font size, and a position. Fragments on the same baseline become a line. The body size is the median of those lines. Sizes clearly above that median map to at most three heading levels. A line that starts with •, ◦, -, *, or a number like “1.” or “1)” becomes a list item. A line that ends with a hyphen and continues in lowercase on the next line is joined into one word, so “exam-” plus “ple” becomes “example”. A real hyphen in the middle of a line is left alone.

Short lines in the top or bottom margin are compared across pages. If the same header or footer shows up more than once, it is dropped. A bare page number, or a line like “Page 3”, is dropped when that pattern repeats. The default Markdown separates pages with a rule and does not print “Page N”. The switch labeled Show page numbers adds that label when you want it. A one-page file keeps its footer, because nothing has repeated yet.

A worked example

The blocks below are the text layer of a three-page sample, not a screenshot. Page 1 has a large title, a sentence broken as “exam-” / “ple”, two bullets, a running header, and a footer with a page number. Pages 2 and 3 repeat that header and footer and add a mid-size heading plus one sentence. The Markdown under the source is what this page’s converter emits with Show page numbers turned off.

Text layer

Page 1
Internal draft
Quarterly update
The team shipped the
exam-
ple feature on Monday.
• Faster export
• Fewer broken lines
Acme Internal    1

Page 2
Internal draft
Risks
Vendors still send scans.
Acme Internal    2

Page 3
Internal draft
Next step
Ask for the source file.
Acme Internal    3

Markdown

# Quarterly update

The team shipped the example feature on Monday.

- Faster export
- Fewer broken lines

---

## Risks

Vendors still send scans.

---

## Next step

Ask for the source file.

“Internal draft”, “Acme Internal”, and the bare numbers are gone, because they repeat. The broken word is one word. The title is an h1 and the two shorter headings are h2s. The bullets are a Markdown list. Nothing in that output says “Page 1” unless you turn the switch on.

What converts well, and what converts poorly

Digital PDFs convert well: papers and reports exported from a word processor, documentation printed to PDF, and slide notes that still have a text layer. English and other languages whose text layer is already Unicode come through, including Chinese, Japanese, Korean, and accented Latin. This page does not download character-map files, so glyphs that the file never stored as Unicode can come out empty or wrong. You should still read the preview. A heading that was only bold body text will not grow a hash mark, and a footer that appears on a single page is kept on purpose.

Scanned pages convert poorly, because there is nothing to read. The tool counts pages whose text item list is empty and says so. It will not guess words from pixels. Mixed files are common: a cover is a scan and the rest is real text. You get Markdown for the text pages and a warning for the empty ones.

Tables and multi-column layouts are best-effort. A simple grid whose cells share x positions becomes a pipe table, with the first row as the header even when the PDF had no header styling. Merged cells, nested tables, and ruled lines with no text do not survive. Two columns that are clearly separated are read one column at a time. Two columns that sit on the same baseline can look like table cells instead. Math is another miss: a formula may arrive as scattered symbols or not at all. Images, captions that are drawn as curves, and handwriting are out of scope.

If you still have the Word, Google Docs, or Markdown source, start there. Exporting or copying from the editor keeps real headings and tables that a PDF has already flattened. A .docx file can go through Word to Markdown, which reads the document in the browser. This page does not open Word files. Use PDF to Markdown when the PDF is the only copy.

Tips before you trust the note

Prefer a text-based export. In Word or Google Docs, export PDF with the actual text, not “print to a scanner” and not a PDF/A that has outlined the fonts into shapes. If copying in a viewer already yields nonsense, this tool will see the same text layer and will not do better.

Password-protected files fail fast with an English error. There is no password field, so this page never asks you to type one. Decrypt the file locally, then drop the unlocked PDF. Files over 50 MB are refused. A file larger than 20 MB, up to that limit, shows a warning that parsing stays in the browser. The progress line announces “Parsing page x of y”.

Skim the preview for three things: a heading that should have been body text, a hyphen that joined two real words such as a line-broken “well-known”, and a table whose first row was data. Fix those by hand. Then copy, download the .md file (the name follows the PDF), or send it on. If the next question is size, the Token Counter counts the Markdown you paste. It does not open the PDF for you.

Compared with copy-paste and with server tools

Copying from a PDF viewer is fine for a sentence. For a whole report it keeps the line breaks, the page number, and the chapter title that repeats in the margin. You then clean that by hand. This page does that cleaning for text-layer PDFs and stops when the text layer is missing. It does not claim to beat a careful human edit on a complex table.

Server-side “pdf to md” tools upload the document. That can be the right trade when you want their OCR or a queue. It is the wrong trade for a contract, a medical note, or an unpublished draft. WebInk’s converter does not offer that upload path. If the source is HTML you already copied, use HTML to Markdown, which also stays in the browser. If the source is a public URL, URL to Markdown fetches it on the server — say so to yourself, because that path is not local.

The WebInk Chrome extension is for the web page open in your tab, including pages you are logged into. It does not read a PDF file from disk. Use this tool for the PDF, and the extension when the article only exists as a tab. The tools hub lists each online tool and which input it accepts.

JobThis pagePDF viewer pasteServer converter
File stays on your machineYesYesNo
Heading levels from font sizeYesNoVaries
Drops repeated headers and page numbersYesNoVaries
Joins wrapped lines and line-break hyphensYesNoVaries
OCR for scansNoNoSometimes
Tables and multi-column pagesBest effortFlattenedVaries

“Varies” and “Sometimes” describe other products, not a promise from this page. The “This page” column is what the tool does.

Add the WebInk extension

The extension clips web pages. It is a separate product and is not a PDF converter.

Frequently asked questions

It reads the text layer of a PDF in your browser and writes Markdown. Font sizes clearly above the body median become headings, wrapped lines become paragraphs, and bullet or numbered lines become lists. You can copy the result, download a .md file named after the PDF, preview it, or send it to ChatGPT, Claude, Gemini, or Perplexity.

Related