What this tool actually does
ConvertUnlimited uses pdf-lib (version 1.17.1) for compression, and it performs exactly one operation: pdfDoc.save({ useObjectStreams: true }). This rewrites the PDF's cross-reference table using PDF object streams — a PDF 1.5+ feature that stores groups of small objects together in a compressed stream instead of as separate, plain-text objects — and drops redundant structural data along the way. Selected document contents are processed locally in your browser for this workflow; ConvertUnlimited does not provide a server-side upload endpoint for it.
This tool does not decode, downsample, or re-encode embedded images. Unlike Ghostscript-based compressors (the engine behind many desktop and server-side "compress PDF" tools), which decompress each embedded JPEG or scanned page image and re-save it at a lower resolution or quality, pdf-lib treats embedded image and font streams as opaque data and copies them through unchanged. The Compression Level selector currently applies the same object-stream save regardless of which option is chosen — Recommended, High Quality, and Small File all produce an identical result today, because none of the three levels is wired to a different code path yet. We are stating this plainly rather than implying a quality/size tradeoff that the current implementation does not provide.
What compress-pdf changes vs. what it leaves alone
| Element | Touched by this tool? |
| Cross-reference table / object streams | Yes — rebuilt and compressed |
| Redundant or orphaned structural objects | Yes — dropped where save() detects them |
| Embedded raster images (JPEG, PNG streams) | No — copied through unchanged, no re-encode or downsampling |
| Embedded fonts | No — copied through unchanged, no subsetting |
| Page content streams (text and vector drawing) | No — copied through unchanged |
Which PDFs actually shrink
Because only structural, object-level optimization happens, results depend heavily on how the source file was originally saved, not on image content:
- Best candidates: PDFs saved by simple or older generators that store objects in plain, uncompressed form, or documents that have been incrementally re-saved many times by a desktop editor and accumulated redundant/orphaned objects. These can shrink by a noticeable double-digit percentage.
- Little to no change: PDFs already saved with object streams by a modern generator — a current browser's "Print to PDF," LibreOffice, or Adobe Acrobat all do this by default — typically shrink by low single digits or not at all, since there is little structural "slack" left to remove.
- Image-heavy or scanned PDFs: These are usually the least likely to shrink here, precisely because their size is dominated by embedded image streams this tool does not touch. A scanned document that is mostly JPEG pages will not get materially smaller no matter which Compression Level is selected.
These are reasoned expectations based on how pdf-lib's save() works, not numbers measured against a specific benchmark file set; actual results vary by document.
Failure modes and limits
- Encrypted or password-protected PDFs.
PDFDocument.load() is called without an ignoreEncryption option, so an encrypted file fails to load rather than being compressed.
- Very large files. Documents in the neighborhood of 100 MB or more can exceed a browser tab's available memory during the load/re-save cycle; if the tab becomes unresponsive, try a smaller file or a device with more RAM.
- Malformed or already-damaged PDFs. pdf-lib can recover from some structural issues, but a badly corrupted cross-reference table can prevent the file from loading at all.
- PDF forms. Object-stream rewriting can change how a PDF viewer internally indexes AcroForm fields; field values themselves are preserved, but visually confirm a compressed form still behaves as expected before relying on it.
Frequently Asked Questions
Is it safe for sensitive documents?
Selected document contents are processed locally in your browser for this workflow, and ConvertUnlimited does not provide a server-side upload endpoint for it. You can use the tool without a network connection once the page has finished loading.
Will my PDF lose quality?
No visible quality loss should occur, because this tool does not touch embedded images, fonts, or page content — it only rewrites structural metadata (the cross-reference table and object streams). That is also why it cannot shrink image-heavy PDFs the way a Ghostscript-based compressor can.
Why doesn't the Compression Level selector change my file size?
At present, Recommended, High Quality, and Small File all run the identical structural save. The selector is not yet wired to a different processing path, so choosing a different level will not currently produce a different result.
Why is my scanned PDF still large after compression?
Scanned documents are usually a series of embedded page images. This tool does not decode or re-encode embedded images, so file size dominated by scanned-image data will not shrink here; a Ghostscript-based compressor (a different tool, not this one) would be needed to downsample those images.
What's the difference between this tool and Ghostscript-based compressors?
Ghostscript-based compressors decompress embedded raster images and re-save them at a lower resolution or JPEG quality, trading image fidelity for size. This tool never decodes embedded images; it only optimizes the PDF's own object structure, so it is lossless for content but limited in how much it can shrink an image-heavy file.
What is the maximum file size?
We don't set a hard limit, but documents in the range of 100 MB or more may exceed your browser's allocated memory during the re-save process. If the tab crashes, try using a more powerful device or a smaller file.
Can I compress an already-compressed PDF again?
Yes, but running this tool a second time on its own output typically produces little to no further reduction, since the object streams it writes are already compressed.
Browser Support
This tool works in all modern browsers supporting the File API and WebAssembly, including Chrome, Firefox, Safari, and Edge.
Trust and privacy
Files are processed locally where supported. Review the Trust Center for the processing model and the Privacy Policy for public-site privacy boundaries.