PDF Compressor🔒 100% local
Rebuild and compress PDFs in your browser with object-stream optimization. No uploads — privacy-first.
Compress a PDF
Rebuilds the PDF with cross-reference + object-stream compression, fully in your browser. Already-optimized PDFs may not shrink further — image-heavy PDFs compress best when embedded images are re-exported.
Related Tools
The page loads your PDF with pdf-lib, copies every page into a fresh document, and saves it with object streams - a structural rebuild that packs the cross-reference table and small objects more tightly. You get the before and after sizes with the percentage change, a note when the rebuild came out larger, and a download link for the new file. The original never leaves the tab.
How to use it
- Choose a PDF; a file whose name and type are not recognised is rejected with 'Select a PDF file.'
- Press Compress and wait - the rebuild is synchronous work in the page, so the button shows 'Compressing...' while it runs.
- Read the size line, then download compressed-<original name>.
Worked example
<a PDF you supply: a 3-page text-only document built with pdf-lib, 3,993 bytes>becomesResult: 3.9 KB -> 3.9 KB (+1%) (3,993 bytes -> 4,035 bytes)The tool needs an uploaded file, so this is the size line it prints rather than a text input. Reproduced with pdf-lib 1.17.1 using the tool's own sequence (load with ignoreEncryption, copyPages into a new document, save({useObjectStreams: true})); a 20-page text PDF behaved the same way, 25,383 -> 26,009 bytes.
When to use it
- A PDF is slightly over an upload limit and you want to try a structural rebuild before reaching for a lossy re-encode.
- You have a document with lots of small objects and suspect the cross-reference table is the overhead.
- You want an honest size verdict - the tool says so when the rebuild did not help.
What it does not do
- It rebuilds structure and does not touch image or font data, so a scanned PDF will barely move and a small text PDF can grow: the verified 3-page case came out 42 bytes larger.
- Failure handling is coarse - the panel shows one generic message for anything the library cannot load, so a corrupted file and an unsupported feature read the same.
- Pages are copied, not re-rendered, so page size, text, images and metadata layout are unchanged; this is not a quality-lowering compressor.
- Size is bounded by your tab's memory rather than a server quota, so very large documents are limited by the machine you are on.