Free PDF tool
Compress a PDF
Most of a large PDF is usually pictures. The tool re-encodes big photos and scans at a lower resolution and quality, leaves text, fonts and vector graphics untouched and shows how much smaller the file became.
Your PDF stays on your device
- Free, no account needed
- Built on pdf-lib and your browser's image encoder
How it works
Compress a PDF in 4 steps
- 1
Add a PDF
Drop the document onto the tool or choose it from your device.
- 2
Pick a level
Strong for email and the web, Balanced for most documents, Light when pictures must stay close to the original.
- 3
Compress
Select Compress PDF. Large images are re-encoded in your browser.
- 4
Download
Compare the old and new size and save the smaller file. The original is not changed.
Questions
Frequently asked questions
Are my files uploaded to a server?
No. The tool runs entirely in your browser: the PDF is read, changed and saved on your device, and its contents are never sent to our servers.
How much smaller will my PDF get?
That depends on what it contains. Scans and photo-heavy PDFs often shrink by half or more. Documents that are mostly text are usually compact already; if no smaller version is possible, the tool says so instead of giving you the same file.
Does compression affect text quality?
No. Only embedded pictures are re-encoded. Text, fonts and vector graphics are copied unchanged, so they stay sharp at any zoom level and remain searchable.
Which images are left as they are?
Pictures under 256 pixels, CMYK and indexed-color images, masks, and every image whose new version would not be at least 10 % smaller. Images with transparency are re-encoded at their original pixel size so the transparency still lines up.
Can I use password-protected PDFs?
Not in the browser tool. Encrypted PDFs cannot be modified without the password, so the tool reports them instead of producing a broken file. Remove the protection with the software that created it, then try again.
Is there a file size or page limit?
There is no fixed limit because processing happens on your device. Very large files (several hundred megabytes) depend on your browser's available memory; if a file fails to open, try closing other tabs or use the API for server-side processing.
Automate it
Do the same in your application with Dynamic Document API
Documents you render with the API can be compressed as they are created: set a target image resolution and JPEG quality in the PDF options, and every picture is downsampled before the file is written.
POST /v1/pdf/from-htmlAvailablecurl -X POST https://api-eu.dynamicdocumentapi.com/v1/pdf/from-html \
-H "Authorization: Bearer $DYNAMIC_DOCUMENT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"html": "<h1>Spring catalogue</h1><img src=\"https://example.com/catalogue/cover.jpg\">",
"pdf": {
"paper": {
"size": "A4"
},
"compression": {
"image_dpi": 150,
"jpeg_quality": 75
}
}
}'const response = await fetch("https://api-eu.dynamicdocumentapi.com/v1/pdf/from-html", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DYNAMIC_DOCUMENT_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"html": "<h1>Spring catalogue</h1><img src=\"https://example.com/catalogue/cover.jpg\">",
"pdf": {
"paper": {
"size": "A4"
},
"compression": {
"image_dpi": 150,
"jpeg_quality": 75
}
}
}),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const result = await response.json();
console.log(result);import os
import uuid
import requests
response = requests.post(
"https://api-eu.dynamicdocumentapi.com/v1/pdf/from-html",
headers={
"Authorization": f"Bearer {os.environ['DYNAMIC_DOCUMENT_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"html": "<h1>Spring catalogue</h1><img src=\"https://example.com/catalogue/cover.jpg\">",
"pdf": {
"paper": {
"size": "A4",
},
"compression": {
"image_dpi": 150,
"jpeg_quality": 75,
},
},
},
timeout=90,
)
response.raise_for_status()
print(response.json())