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.