Extract Text from PDF
Choose a PDF and its embedded text is pulled out into one plain-text block you can copy or download. Nothing you upload ever leaves your browser.
How extraction works without a server
This tool uses pdfjs-dist, the open-source PDF.js
engine built by Mozilla (it's what draws PDFs inside Firefox
itself), running entirely in your browser tab. Instead of
rendering pixels to a canvas the way a PDF viewer would, it asks
each page directly for its text content: PDF.js decodes the
objects in the page's content stream that represent actual
embedded text — font, position, and the string itself — and getTextContent() returns them as a flat list of
items, each carrying its extracted string. This tool joins each
page's items with a space, separates pages with a blank line,
and places the whole result in the text box above. Because it
reads real text objects rather than a picture of the page, a
scanned page has nothing for it to read — there are no text
objects there at all, only pixels.
Worked example
Say you have a 2-page PDF. Page 1's content stream has the text objects reading Q4 Sales Report Prepared by Finance Team (7 words, 40 characters); page 2 reads Total revenue: $128,400 (3 words, 23 characters). Choosing this file produces one text block — page 1's text, a blank line, then page 2's text — for a combined 65 characters and 10 words, exactly what the Pages / Words / Characters row above the output would show.
Frequently asked questions
Is my PDF uploaded anywhere?
No. The file is read locally with the browser's File API, and pdfjs-dist — the same PDF.js engine Firefox uses to display PDFs — extracts the text entirely inside your browser tab. Nothing is sent to a server, so private or confidential documents never leave your device.
Why is some or all of the text missing from the result?
This tool extracts real, embedded text objects from the PDF's content stream — it does not perform OCR. If a page is a scanned image, a photo of a document, or otherwise has no actual text layer, there is nothing for it to read on that page: from the PDF's point of view it's just pixels, not characters. If you need text pulled out of a scanned document, you'll need an OCR tool, which this one deliberately isn't.
Does the extracted text keep the original layout, like columns or tables?
No — the text comes out in the order PDF.js encounters it in the page's content stream, with each page's items joined by spaces and a blank line separating pages. Multi-column layouts can interleave, and tables lose their grid structure, since this is a flat text extraction rather than a layout-aware one.
Is there a limit on file size or number of pages?
The only real limit is your browser's available memory, since everything happens on your device instead of a server. Typical documents — even a few hundred pages of normal text — extract in well under a second; very large scanned PDFs (hundreds of megabytes) will take longer simply to read and decode.