PDF to text
Nothing you choose here leaves your browser. There is no server to send it to — the file is opened and drawn on your own device, and nothing is uploaded, stored or seen by anyone.
A PDF does not store sentences. It stores glyphs at coordinates, and the text you get back is those glyphs in the order the file happens to draw them — which for a single column is the order you read them, and for tables, columns and footnotes frequently is not. A scanned page contains no characters at all, only a picture of them, and this page does no OCR: it will correctly return nothing.
This page downloads one thing, and here it is before you
choose a file. It loads Mozilla’s
pdf.js — two
files, pdf.min.mjs (448 KB) and
pdf.worker.min.mjs (1,236 KB), which is 1.64 MB
uncompressed and about 495 KB over the wire once your browser has
decompressed them. They are served from this site rather than from a
CDN, so no third party is told that you are reading a PDF, and they
are fetched only when you choose a file — reading this page
downloads nothing.
pdf.js is under the Apache License 2.0, and the copy of that licence is in the repository beside the files. Everything else on this site ships no library at all, and the privacy page says which pages are the exception.
What this conversion costs you
Every conversion loses something, and the honest version of that sentence names it. Here is what taking the text out of a PDF keeps and what it does not.
What survives
- The text the file actually contains, in the order the page stores it.
What does not
- The layout, and sometimes the reading order. A PDF stores glyphs at positions, not sentences: columns, tables and footnotes come out in whatever order they were drawn, which is frequently not the order they are read.
- Anything that was never text. A scanned page contains no characters at all, only a picture of them, and nothing here does OCR — so a scan yields nothing and that is the correct answer rather than a failure.
How it works, and the one library on this site
Writing a PDF is a page of code. Reading one is not, and this page does not pretend otherwise: it uses pdf.js, Mozilla's PDF engine — the same one Firefox itself uses to display a PDF.
That is a library, and this site says so rather than hiding it. Every other converter here ships no codec at all. This one loads about 500 KB of JavaScript, served from this site rather than from anybody else's, so that your browser never announces to a third party that you are reading a PDF. It arrives once and your browser caches it.
Why not write it. A PDF that opens is not one file format, it is thirty years of them: object streams, cross-reference streams, eight compression filters, encryption, embedded fonts, substituted fonts, CID character collections, and an enormous quantity of files that do not quite follow the specification and are expected to work anyway. A partial implementation would not fail cleanly — it would open some of your files and quietly show the wrong thing for others, which is the worst outcome available. So this page uses the implementation that has spent fifteen years meeting those files.
Nothing is uploaded either way. The library runs on your device, on your file, and no part of the document is sent anywhere.
Where to go next
The same job in the other direction, and the rest of the PDF pages:
- JPG to PDF — put JPEGs into a PDF in your browser — nothing uploaded, nothing downloaded, and the JPEG goes in untouched
- PNG to PDF — put PNGs into a PDF in your browser — nothing uploaded, nothing downloaded, and no pixel is thrown away
- WebP to PDF — put WebP pictures into a PDF in your browser — nothing uploaded, nothing downloaded
- PDF to PNG — turn every page of a PDF into a PNG in your browser — nothing is uploaded
- PDF to JPG — turn every page of a PDF into a JPEG in your browser — nothing is uploaded
- Every file converter — the rest of them, by what goes in.
What this does not do
It reads what the file contains. It does not do OCR, so a scanned document — which is a picture of a page, not a page — has no text in it to find, and this page will say so rather than invent any.
It cannot open a PDF that is encrypted with a password you have not supplied, and it does not edit, merge, split, sign or fill in anything. Two font packs that pdf.js can optionally use are deliberately not shipped here: the replacements for the fourteen fonts a PDF may reference without embedding, and the character maps for Chinese, Japanese and Korean text in files using predefined collections. If text in one of those categories comes out wrong, that is why, and it is a trade against roughly three megabytes that almost no file needs.
And it does not upload anything, so it cannot work on a file that is not on the device you are using.