Compress PDF
Shrink a PDF by re-encoding its pages at a quality you choose — free, no upload, in your browser.
Drop a PDF here or click to browse
🔒 In your browser — never uploaded. Pages are re-encoded as images, so text becomes non-selectable — best for scanned or image-heavy PDFs.
Make a PDF smaller
Drop in a PDF, set a quality level with the slider (30–95%, default 70%), and click Compress PDF. The tool re-encodes every page as a JPEG image and rebuilds the file, then downloads it as compressed.pdf and shows the before-and-after size — for example 8.4 MB → 1.9 MB (−77%). It works on one PDF at a time and runs entirely in your browser, so nothing is uploaded.
Under the hood each page is rendered with pdf.js at 1.5× scale onto a canvas, flattened onto a white background, and saved as a JPEG at the quality you picked; pdf-lib then assembles those images into a new document. Because pages become flat pictures, text and vector graphics are no longer selectable or searchable — so this method shines on scanned or photo-heavy PDFs and does little for files that are already just text. If re-encoding happens to enlarge the file, the result line warns you.
Frequently asked questions
What quality level should I choose?
The slider runs from 30 to 95%, defaulting to 70%. Lower values shrink the file more but introduce visible JPEG artifacts; 60–70% is a good balance for scanned documents, while 80–90% keeps photos crisp at a smaller saving. Compress once, check the result, and adjust.
Why is my compressed PDF larger than the original?
Some PDFs — especially text-only or already-optimized files — are smaller than a JPEG rendering of the same pages. When the re-encoded output ends up bigger, the result line flags it with a plus sign and a percentage so you know to keep the original or lower the quality.
What does "2 of 5 pages could not be converted" mean?
A page occasionally fails to render or encode — usually a very large or unusual page that runs out of memory. The tool skips just those pages, keeps the rest, and tells you how many were left out rather than handing back a silently incomplete file. If every page fails, it reports an error instead.