Compress PDF
Make a scanned or image-heavy PDF small enough to email — in your browser, with a line-by-line account of what changed and by how much.
🔒 Your data never leaves your browser — no upload, no size cap, no watermark.
Drop a PDF here
What actually gets smaller
In a scanned or photo-heavy PDF, nearly all the weight is in its embedded images. This tool handles the two common forms — JPEG pages and uncompressed (Flate) bitmaps, the kind screenshots and image-editor exports leave behind — by decoding each one, resampling it to the level’s pixel width and re-encoding it with mozjpeg, the same encoder behind this site’s image compressor. Raw bitmaps are where the biggest wins hide: they are often ten times larger than the same page as a JPEG. A file that is mostly text has almost nothing to gain here, and the tool says so rather than re-saving it and calling that a result.
It shows its work — including when it does nothing
Every image reports its before and after size, its resolution change, and its PSNR — a decibel measure of how close the recompressed pixels stayed to the original (above roughly 30 dB, differences are hard to see on a document scan). If re-encoding an image would make it larger, the original bytes are kept untouched. If the rebuilt file would not be smaller overall, you get your original file back. Images this tool deliberately leaves alone — bitonal fax scans (CCITT, JBIG2), stencil masks, anything carrying transparency, unusual colour spaces — are named one by one with the reason. A file full of such images is never reported as “no images”; a wrongly re-encoded image would corrupt the page, so skipping is the deliberate choice.
Honest limits
This is image recompression, not a full rebuild: text, vector graphics and fonts are passed through untouched, so text-only files stay roughly the same size. Structural optimisation (rewriting object streams) is a separate, planned step. Encrypted PDFs are refused up front by the same structure diagnosis the rest of this workbench uses.
Every check this tool runs (26 rules)
PDFI-001 No PDF header
The first kilobyte has no %PDF marker — the file is not a PDF, or its beginning is gone. Renamed Office files and HTML error pages saved as ".pdf" land here.
Fix: Re-export or re-download; check the true format.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFI-002 Truncated file
No %%EOF marker near the end. PDFs end with %%EOF; a missing one means an interrupted download or copy. This copy usually cannot be repaired.
Fix: Re-download or re-export from the source.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFI-003 Encrypted PDF
The file carries an /Encrypt dictionary. This tool does not remove passwords or process protected files — that is a deliberate boundary, not a bug.
Fix: Open it with the password in any viewer and re-export an unprotected copy.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFI-004 Damaged cross-reference
No startxref pointer near the end. Some readers rebuild the table and open the file anyway; processing may still fail.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFR-001 Unreadable page selection
Selections are pages and ranges: 3, 1-5, 7- (to the end), -4 (from the start), last.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFR-002 Backwards range
A range like 9-3 runs backwards. Ranges are low-to-high; the fix suggests the swap.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFR-003 Page out of bounds
The selection points past the last page. The message names the document's real page count.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFR-004 Empty selection
The selection matches no pages at all.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFO-001 Bad file skipped, merge continued
A file that fails its diagnosis is skipped with its diagnosis attached — never silently dropped — and the merge continues with the rest.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFO-002 Engine could not read a structurally-plausible file
The byte-level checks passed but the parser failed deeper in. The engine error is quoted; the file is skipped.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFC-001 Nothing to recompress
This tool shrinks image-heavy PDFs by recompressing their JPEGs. A text-only file has no images to work on — that is reported, not papered over.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFC-002 Original kept — it was already efficient
If re-encoding would not make the file smaller, the original bytes are returned unchanged. No fake savings, no needless re-save.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFC-003 Every change is listed
Each recompressed image reports its before/after size, resolution and PSNR (a decibel measure of how close the pixels stayed). Nothing is changed silently.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFC-004 Unprocessable image kept untouched
Images in colour spaces or encodings the codec cannot handle (some CMYK press files, masked images) are kept byte-for-byte — a wrong re-encode would corrupt the page.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFC-005 Images present, but none recompressable
The file has images, but every one of them is in a form this tool deliberately leaves alone (bitonal fax scans, stencil masks, transparency, unusual colour spaces). Each image says which — the tool never claims "no images" when there are images it simply does not handle.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFU-001 Not encrypted — nothing to unlock
The file carries no /Encrypt dictionary, so there is no password on it. Nothing is changed.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFU-002 Password required
Encrypted PDFs are decrypted with the password YOU supply. This tool never cracks, guesses or bypasses protection — including the permissions ("owner") password, which some sites strip without asking.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFU-003 Wrong password
The supplied password did not open the document. A PDF can carry two passwords; the one that opens the file is the one needed here.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFU-004 Decrypted locally
The document was decrypted in your browser with your password and saved without encryption. Nothing was uploaded.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFU-005 Could not rebuild the document
The engine failed after the password step; the underlying error is quoted rather than hidden.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFG-001 Not a quarter turn
PDF stores page rotation as /Rotate, which the format restricts to multiples of 90. An arbitrary angle would require re-drawing the page content, which this tool does not do — so it is refused rather than silently rounded.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFG-002 Every page removed
A PDF with zero pages is not a valid document, so the plan is refused instead of writing an unopenable file.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFG-003 Page does not exist
A page outside the document was requested. The whole plan is refused: unlike a merge, a page silently dropped from a reorder is invisible in the result.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFG-004 Plan changes nothing
The page plan is identical to the original document, so the output would only be a rebuild. Said plainly rather than presenting it as work done.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFG-005 What survives a page rebuild
Page content, images, annotations and form fields are copied. Document outlines (bookmarks) are carried through a merge — destinations are remapped onto the new page positions — but a page rebuild that reorders or drops pages does not remap them, because an outline entry pointing at a page that is no longer there has no correct answer. Stated up front rather than discovered afterwards.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
PDFO-003 Nothing to output
Every input failed — there is no result file.
Source: This is a rule of this tool's engine, stated so you can see exactly what it does. Structural facts (header, %%EOF, /Encrypt, startxref) follow the PDF file format (ISO 32000); the diagnosis heuristics are this project's own.
Structural facts follow the PDF file format (ISO 32000); compression disclosure rules (PDFC-*) are this tool's own engine rules, labelled as such.