How exact-size compression works here
Most large PDFs are large because of images: phone photos and scans stored at 300 dpi or more. Text, vector drawings and fonts are usually a small share, so the engine leaves them alone and works on the images, which keeps the words crisp while the file shrinks.
It first removes images that are stored more than once and drops objects nothing refers to. If that is not enough, it re-encodes each image as JPEG at a lower resolution and quality, in steps, and stops at the first result at or under your target. Grayscale is only used if you allow it. If even the lowest legible step is too big, it says so and offers to split the file into parts that each fit, instead of handing you a blurry page.
MB here means 1,000,000 bytes, the stricter reading, so a file that fits our 12 MB also fits a portal that means 12 MiB.
Steps
- Add the PDF (drop it anywhere on this page).
- Type a target such as 2 MB or pick a destination.
- Watch the steps: each line is a real attempt with its real size.
- Check page 1 at 100% with the compare slider, then download.
Limits, stated plainly
- Images in JPEG 2000, JBIG2 or CCITT fax format, CMYK images and masks are left unchanged (the step log counts them).
- A PDF that is mostly text and fonts may not shrink much; the result says how much was possible.
- As a last resort, and only if you leave it switched on, pages can be turned into images. Their text then stops being selectable, and the result says so.
Engine: pdf-lib and qpdf (WebAssembly) in a Web Worker; pdf.js for the preview. Your file is not uploaded; check it yourself.