Private by design. Processed in your browser on your device. No account required. How it works

Compress PDF Files

Reduce PDF size with quality presets or a best-effort target. Every page is rendered as a JPEG image and rebuilt into a new PDF, so searchable text, links, forms, bookmarks, tags, and other interactive features are not kept.
Compress PDF
Choose a file to start
Upload a PDF, pick a preset or target size, then download a smaller file once compression finishes.
  • Target size works best as a best-effort goal, not a guaranteed cap.
  • Image-heavy PDFs usually shrink more than text-heavy PDFs.
  • The result panel keeps the final download action next to the compression summary.
Works with PDF files.

{{ pdfFile.name }}

Pages: {{ pageCount }}
Size: {{ sizeLabel }}
We aim for your target, but text-heavy or already optimized PDFs may not shrink much. Use Smallest size for the lowest output, or remove pages if you need to go lower.
Compression works best on scanned PDFs and image-heavy documents.
{{ warningMessage }}
Working
Compressing PDF
Trying the selected compression pass on your document.
Progress {{ compressionProgress.toFixed(0) }}%
Check compression
Review before download
{{ warningMessage }}
Target status
Size check updated
{{ targetStatus }}
Compression summary
Review the size reduction before download
{{ result ? 'The compressed file is ready. Check the size change and target-size note before downloading.' : 'Choose a preset or target size, then run compression from this workspace.' }}
  • Compressed size: {{ result ? resultSizeLabel : "Pending" }}
  • Saved: {{ result && compressionRatio ? (compressionRatio + "%") : "Pending" }}
  • Target result: {{ targetMet === false ? ("Above " + targetLabel) : (targetStatus || "Not checked yet") }}
{{ targetMet === false ? 'This is the smallest result from this pass. Download it here, or reduce pages if you need a smaller file.' : 'Download the compressed PDF from this panel.' }}
Keep going with the smaller PDF
Follow-up actions that commonly come after compression.

How to compress a PDF

Choose a PDF

Select a PDF, choose a preset, or fit to a target size like 500KB or 1MB.

Download the compressed file

Export a smaller PDF with a clear quality tradeoff note.

Preset and target-size workflows

Choose low, medium, or high quality, or fit the PDF under a target size.

Best for scanned PDFs

Compress image-heavy PDFs for email and uploads.

Target-size fitting

Aim for common size limits like 500KB or 1MB with clear best-effort messaging.

See size savings

Preview how much size you saved before downloading.

Quality tradeoff guidance

Clear messaging helps you pick the right compression level.

Browser-first processing

Compression runs in your browser on your device for privacy.

No installs required

Compress PDFs from any modern browser.

Image-based output

Every page is rasterized. Searchable text, links, forms, bookmarks, tags, and digital signatures are not preserved.

Frequently Asked Questions

Yes. Use the target-size controls here, or jump straight to <a href="/compress-pdf-to-500kb">Compress PDF to 500KB</a> or <a href="/compress-pdf-to-1mb">Compress PDF to 1MB</a>.

Text-heavy, already optimized, or very large PDFs may not shrink enough without removing pages. Try Smallest size, then split the PDF or remove pages if you need a lower result.

No. Compression runs in your browser so files stay on your device.

It renders every page as a JPEG image and builds a new PDF. Page order and visible appearance are kept within the chosen quality, but searchable text, links, forms, annotations, bookmarks, tags, and digital signatures are not kept.

No. Target sizing is best effort. The tool returns the closest result it can make; removing pages or splitting the document may be necessary for a strict upload limit.

Helpful Tips

Tip

Start with the built-in presets

Medium or high compression is usually a good first pass. Use target size only when you need to hit a specific upload limit.
Tip

Treat target size as best effort

Some PDFs cannot shrink to a hard limit without removing pages or simplifying the source. If you miss the target, try Smallest size next.
Tip

Image-heavy PDFs shrink the most

Scanned documents, photo-heavy brochures, and exported slide decks usually compress more than text-only PDFs.

Learn More

Learn more

Why scanned PDFs compress better

Scanned PDFs often contain large page images, so compression can reduce their size a lot. Text-heavy PDFs already store content efficiently, so they may change less.

Learn more

What to do if the PDF stays too large

If the file stays above your target, remove unneeded pages, split the document into smaller parts, or export the most important section first. The tool already gives you the smallest result from the current pass when possible.

Learn more

Common size-limit workflows

For specific caps, start with Compress PDF to 500KB or Compress PDF to 1MB. For email and upload guidance, read our PDF size-limit guide.

JPEGConvert logo

Need a hand with your file?

JPEGConvert.com keeps the workflow simple: upload, convert, and download. For the best results, start with the highest-quality source file you have.

About the team | Contact support


(function() { const title = document.querySelector('h1'); const actionRegion = document.querySelector('.action-container, .action-body'); if (!title || !actionRegion || title.querySelector('.tool-hero-mark')) return; const path = window.location.pathname.replace(/\/$/, ''); if (!path || path === '/' || path.startsWith('/converters') || path === '/about' || path === '/contact' || path === '/support' || path === '/privacy-policy') { return; } const lowerKey = path.replace(/^\/(video|audio)\//, '').replace(/^\//, '').toLowerCase(); if (!lowerKey) return; let category = 'image'; if (path.startsWith('/video/')) category = 'video'; if (path.startsWith('/audio/')) category = 'audio'; const isUtility = lowerKey.includes('ascii') || lowerKey === 'check-my-file' || lowerKey.includes('resizer') || lowerKey.includes('metadata') || lowerKey.includes('compress') || lowerKey.includes('base64') || lowerKey.includes('background') || lowerKey.includes('crop') || lowerKey.includes('watermark') || lowerKey.includes('remove-pages') || lowerKey.includes('unlock') || lowerKey.includes('protect') || lowerKey.includes('editor') || lowerKey.includes('excel') || lowerKey.includes('upscale') || lowerKey.includes('merge') || lowerKey.includes('split') || lowerKey.includes('ocr') || lowerKey.includes('sign') || lowerKey.includes('trim') || lowerKey.includes('favicon'); if (category === 'image' && isUtility) category = 'tool'; const labelMap = { jpg: 'JPG', jpeg: 'JPEG', png: 'PNG', gif: 'GIF', svg: 'SVG', pdf: 'PDF', heic: 'HEIC', jfif: 'JFIF', webp: 'WEBP', bmp: 'BMP', ico: 'ICO', word: 'DOCX', docx: 'DOCX', excel: 'Excel', xls: 'XLS', xlsx: 'Excel', mp4: 'MP4', mov: 'MOV', avi: 'AVI', mp3: 'MP3', aac: 'AAC', flac: 'FLAC', wav: 'WAV', webm: 'WEBM', cr2: 'CR2', arw: 'ARW', nef: 'NEF', raf: 'RAF' }; const formatLabel = (value) => labelMap[value] || value.toUpperCase(); function getFormatMeta(key) { if (key === 'check-my-file') { return {primary: 'Check', secondary: 'File', connector: 'dot'}; } const directMatch = key.match(/^([a-z0-9]+)-to-([a-z0-9]+)$/); const convertMatch = key.match(/^convert-([a-z0-9]+)-to-([a-z0-9]+)$/); const convertToMatch = key.match(/^convert-to-([a-z0-9]+)$/); if (directMatch) { return {primary: formatLabel(directMatch[1]), secondary: formatLabel(directMatch[2]), connector: 'arrow'}; } if (convertMatch) { return {primary: formatLabel(convertMatch[1]), secondary: formatLabel(convertMatch[2]), connector: 'arrow'}; } if (convertToMatch) { return {primary: 'Any', secondary: formatLabel(convertToMatch[1]), connector: 'arrow'}; } if (key.startsWith('compress-')) { return {primary: 'Compress', secondary: formatLabel(key.replace('compress-', '')), connector: 'dot'}; } if (key.includes('base64') && key.includes('decode')) { return {primary: 'Base64', secondary: 'Decode', connector: 'dot'}; } if (key.startsWith('base64-to-')) { return {primary: 'Base64', secondary: formatLabel(key.replace('base64-to-', '')), connector: 'arrow'}; } if (key.includes('-to-base64')) { const from = key.replace('convert-', '').replace('-to-base64', ''); return {primary: formatLabel(from), secondary: 'Base64', connector: 'arrow'}; } if (key.includes('base64')) { return {primary: 'Base64', secondary: 'Encode', connector: 'dot'}; } if (key.includes('ascii')) { return {primary: 'ASCII', secondary: 'Art', connector: 'dot'}; } if (key.includes('resizer')) { return {primary: 'Resize', secondary: 'Pixels', connector: 'dot'}; } if (key.includes('remove-pages')) { return {primary: 'Remove', secondary: 'Pages', connector: 'dot'}; } if (key.includes('crop') && key.includes('pdf')) { return {primary: 'Crop', secondary: 'PDF', connector: 'dot'}; } if (key.includes('pdf-editor')) { return {primary: 'Edit', secondary: 'PDF', connector: 'dot'}; } if (key.includes('unlock')) { return {primary: 'Unlock', secondary: 'PDF', connector: 'dot'}; } if (key.includes('protect')) { return {primary: 'Protect', secondary: 'PDF', connector: 'dot'}; } if (key.includes('pdf') && key.includes('metadata')) { return {primary: 'Clean', secondary: 'Metadata', connector: 'dot'}; } if (key.includes('metadata')) { return {primary: 'EXIF', secondary: 'Clean', connector: 'dot'}; } if (key.includes('background')) { return {primary: 'Remove', secondary: 'Background', connector: 'dot'}; } if (key.includes('crop')) { return {primary: 'Crop', secondary: 'Image', connector: 'dot'}; } if (key.includes('watermark')) { return {primary: 'Watermark', secondary: 'Image', connector: 'dot'}; } if (key.includes('upscale')) { return {primary: 'Upscale', secondary: 'Image', connector: 'dot'}; } if (key.includes('merge')) { return {primary: 'Merge', secondary: 'PDF', connector: 'dot'}; } if (key.includes('split')) { return {primary: 'Split', secondary: 'PDF', connector: 'dot'}; } if (key.includes('ocr')) { return {primary: 'OCR', secondary: 'PDF', connector: 'dot'}; } if (key.includes('sign')) { return {primary: 'Sign', secondary: 'PDF', connector: 'dot'}; } if (key.includes('trim')) { return {primary: 'Trim', secondary: 'Video', connector: 'dot'}; } return {primary: 'Tool', secondary: '', connector: 'dot'}; } function getIconClass(key, categoryName) { const toFormat = key.split('-to-')[1]; if (key === 'check-my-file') return 'bi-file-earmark-check'; if (key.includes('ascii')) return 'bi-textarea-t'; if (key.includes('resizer')) return 'bi-aspect-ratio'; if (key.includes('metadata')) return 'bi-shield-slash'; if (key.includes('compress')) return 'bi-file-earmark-zip'; if (key.includes('base64')) return 'bi-journal-code'; if (key.includes('background')) return 'bi-scissors'; if (key.includes('crop')) return 'bi-crop'; if (key.includes('watermark')) return 'bi-type'; if (key.includes('remove-pages')) return 'bi-trash'; if (key.includes('unlock')) return 'bi-unlock'; if (key.includes('protect')) return 'bi-lock'; if (key.includes('editor')) return 'bi-pencil-square'; if (key.includes('excel')) return 'bi-file-earmark-spreadsheet'; if (key.includes('upscale')) return 'bi-arrows-angle-expand'; if (key.includes('merge')) return 'bi-files'; if (key.includes('split')) return 'bi-scissors'; if (key.includes('ocr')) return 'bi-file-earmark-text'; if (key.includes('sign')) return 'bi-pen'; if (key.includes('trim')) return 'bi-scissors'; if (toFormat) { switch (toFormat) { case 'jpg': case 'jpeg': return 'bi-filetype-jpg'; case 'png': return 'bi-filetype-png'; case 'gif': return 'bi-filetype-gif'; case 'svg': return 'bi-filetype-svg'; case 'pdf': return 'bi-filetype-pdf'; case 'word': case 'docx': return 'bi-file-earmark-word'; case 'xls': case 'xlsx': case 'excel': return 'bi-file-earmark-spreadsheet'; case 'heic': return 'bi-filetype-heic'; case 'webp': return 'bi-filetype-webp'; case 'bmp': return 'bi-filetype-bmp'; case 'ico': return 'bi-file-image'; case 'mp4': return 'bi-filetype-mp4'; case 'mov': return 'bi-filetype-mov'; case 'mp3': return 'bi-filetype-mp3'; case 'wav': return 'bi-filetype-wav'; case 'avi': return 'bi-filetype-avi'; default: return 'bi-file-earmark-image'; } } if (categoryName === 'video') return 'bi-film'; if (categoryName === 'audio') return 'bi-music-note-beamed'; if (categoryName === 'image') return 'bi-file-earmark-image'; return 'bi-gear'; } const formatMeta = getFormatMeta(lowerKey); const connectorIcon = formatMeta.connector === 'arrow' ? 'bi-arrow-right-short' : 'bi-dot'; const iconClass = getIconClass(lowerKey, category); const mark = document.createElement('span'); mark.className = `tool-hero-mark converter-mark converter-mark--${category}`; const iconWrap = document.createElement('span'); iconWrap.className = 'converter-mark__icon'; const icon = document.createElement('i'); icon.className = iconClass; iconWrap.appendChild(icon); mark.appendChild(iconWrap); const formatWrap = document.createElement('span'); formatWrap.className = 'converter-format'; const primary = document.createElement('span'); primary.className = 'format-pill'; primary.textContent = formatMeta.primary; formatWrap.appendChild(primary); if (formatMeta.secondary) { const connector = document.createElement('span'); connector.className = 'format-connector'; const connectorIconEl = document.createElement('i'); connectorIconEl.className = connectorIcon; connector.appendChild(connectorIconEl); formatWrap.appendChild(connector); const secondary = document.createElement('span'); secondary.className = 'format-pill format-pill--secondary'; secondary.textContent = formatMeta.secondary; formatWrap.appendChild(secondary); } mark.appendChild(formatWrap); title.classList.add('tool-hero-title'); title.prepend(mark); })();