Extractor · No upload
Convert a PDF to Markdown
Drop a PDF to get a Markdown (.md) file and a page-by-page report on what the file contained. Headings are read from its tags or bookmarks, lists from its tags, links from its link areas, and bold and italic from its fonts.
Refused by name: protected files (this page does not open protected files), cross-reference or object streams under other filters (only Flate is read), and a file where every page is mostly image with no text (no OCR); one such page is marked on its row. Structure comes only from what the file declares; tables come out as plain lines; images, and headers and footers the file marks as such, are left out. Takes .pdf.
Reading order, page 1
Each box is a line, numbered in the order it comes out in the Markdown. If the numbers jump back and forth between columns, the file draws its text in that order.
Pages
Blocks on page 1
Each block says what produced it and which lines it came from. Promote or Demote a block to change its heading level; the download follows the list.
How this converter works
Your browser reads the PDF with its File API, and the same first-party reader the PDF merger on this site uses walks it in memory: header, cross-reference chain, object streams and page tree. It hands back the document only after checking every object for an encryption dictionary. Each page is then decoded on its own and released before the next one, because a page's content can inflate to several times the size of the whole file. Text comes out in the order the page draws it: on all six documents this engine was measured against, that order read better than sorting the text by position. Each glyph is decoded through the font's /ToUnicode map first and its encoding second, and a glyph the file gives no mapping for is dropped and counted. A word broken at a line end is joined where the file spells it whole elsewhere, keeps its hyphen where the file hyphenates it elsewhere, and is otherwise left hyphenated and counted. Values typed into a form are read from each field's appearance and counted, and a rights notice in the file's metadata is kept at the top of the output.
To watch the network yourself, open the Network panel in a desktop browser's developer tools and convert a file. On a first visit, you may see the site's pages and code being cached for offline use; those requests do not carry your PDF. The conversion itself runs in this tab and needs no extra library. This route is first-party throughout and works offline from the first page load. Other ways to check, and what each one covers, are on the methodology page.
Nothing here draws the page, so text hidden under a drawn box is still text and comes out, a layer the file turns off by default is skipped and counted, and a two-column page comes out in the order the file draws it, which the wireframe shows. A font with no /ToUnicode map and made-up glyph names comes out as the codes it carries, which can look right and be wrong, and a font the file does not measure gets an estimated width, so word spacing there is approximate. Mixed-width CJK encodings (RKSJ, EUC, Big5 and similar) are refused by name, as are files over 128 MB or 20,000 pages. Attachments inside the PDF are not opened.