ClientPDF
running locally in this tab — nothing uploaded

Open DevTools.
Compress this PDF.
Watch nothing get sent anywhere.

Re-encodes the JPEG images embedded in a PDF at a smaller size and rebuilds the file — all inside this tab. Zero network requests after the page loads, same rule as every other tool here. Check the Network tab yourself.

Need to hit a specific number — under 100KB for a form upload, under 1MB for an email attachment limit? Pick a target size below and ClientPDF will automatically step image quality down in stages and retry until your file fits, instead of leaving you to guess and re-run manually.

Drop one PDF here or click to browse

One file at a time · stays on this device

    Why trust this tool

    0 network requests since page load · verified live, not our word for it

    No accounts

    No signup, no email, no watermark. Use it and close the tab.

    Honest results

    Only JPEG images embedded in the PDF are re-encoded. If there's nothing to shrink, we'll tell you instead of faking a number. Why didn't my PDF shrink?

    Splitting, rotating, reordering, or numbering a PDF? All live too.

    Extract pages or split every page into its own file, fix pages scanned sideways, drag pages into a new order, or stamp page numbers onto every page — same rule: everything stays local. Leave your email and we'll let you know about a Pro batch mode.

    What "compress" means here, specifically

    This tool re-encodes JPEG-filtered images (the /DCTDecode streams) embedded in a PDF at a smaller size — starting at quality 0.65 with the longest edge capped at 1600px, via a canvas round-trip — then rebuilds the file around the smaller images. Images with transparency or a CMYK color space are skipped rather than guessed at, and if a re-encode wouldn't actually come out smaller, it's skipped too. The before/after size shown is always the real result of that pass, never a display trick.

    Pick a target size (100 KB, 500 KB, 1 MB, 5 MB) instead of "no target" and the tool re-runs the same re-encode with quality and the max dimension stepped down in stages — 0.65 → 0.5 → 0.35, 1600px → 1200px → 900px — checking the real output size after every pass, until the file fits your target or hits a quality floor around 0.3. If it still can't reach your target without visibly damaging the images, it tells you that plainly and gives you the smallest version it could produce, rather than pretending it hit the number.

    If your file comes back close to its original size, that almost always means one of two things: it's mostly text or vector content with nothing photographic to shrink, or its images are already PNG/lossless-encoded rather than JPEG. This walks through exactly which of those applies to your file, and what to try instead. And if the PDF was already so large it struggled to load before you even clicked Compress, here's why, since that's a browser-memory limit compress itself can't get around.