Upload limits

Make your PDF fit the upload limit

Choose one smaller image-based PDF or measured PDF parts, then check readability and the receiving form’s file-count and size rules.

4 min read Updated Sep 5, 2026
A thick image-based document being compressed into a thinner copy for email.
Quick answer

What you need to know

Use Compress PDF for one smaller copy: it turns each page into a JPEG image and loses selectable and searchable text, links, forms and signatures. When several PDFs are accepted, Split PDF by Size measures each part while copying existing page text and graphics. Check per-file and file-count limits and every saved result.

Best for
Anyone preparing a PDF for email, an application form, a customer portal or a supporting-document upload.
Start with
Compress PDF
Do this first

Choose a route, then check the saved files

Keep the original. The best change depends on what the upload field accepts and what the document must retain.

  1. 1

    Read the exact upload rule

    Note the allowed format, maximum per file, combined limit if any, and permitted number of files.

  2. 2

    Choose one PDF or separate parts

    Compress a copy only when rasterized pages are suitable. Choose Split PDF by Size when the recipient accepts separate PDFs and existing page text matters.

  3. 3

    Use the actual ceiling

    Enter the receiving field’s limit. The size splitter uses 1 KB = 1,000 bytes and 1 MB = 1,000,000 bytes, and checks each saved PDF separately.

  4. 4

    Open every output

    Check all pages, small text, page order, byte counts and over-limit warnings. Upload the individual files unless the destination explicitly accepts a ZIP.

01

Know what compression changes

Compress PDF rebuilds every source page as a JPEG image on a new PDF page. It can reduce a large scan, but it changes the document rather than simply removing unused bytes.

  • Selectable text, links, forms, digital signatures, bookmarks, attachments and document accessibility are not carried into the image-based copy. Keep the original.
  • Do not use this compressor after OCR when you need the existing text layer to remain searchable.
  • Split PDF by Size copies page text, vectors and images without rasterizing. It rejects encrypted PDFs, detected interactive forms, signature permissions and optional-content layers.
  • Splitting creates new documents. Bookmarks, attachments, page labels and internal navigation are not guaranteed to survive, and it does not preserve a digital signature’s validity.
  • A scan stays a scan after splitting. Copying pages does not recognize text or improve a poor scan.
Use the tool

Open Compress PDF

Make one image-based PDF when the destination permits flattening and the result stays readable.

Page count and document features

Every page remains, but each page becomes an image

JPEGConvert’s PDF compressor renders every input page and rebuilds the document from those page images. A smaller file does not mean fewer pages.

Three numbered source pages become the same three numbered pages rendered as images.
The three page numbers stay in order. The drawing illustrates page preservation; it does not show measured byte savings or promise identical image quality.
Original PDF
Keep this copy when features matter
The original may contain selectable text, links, form fields, bookmarks, digital signatures, or document structure used by assistive technology.
  • Keep the original file.
  • Check whether the destination needs text or interactive fields.
Compressed copy
Same pages, flattened content
Review small text and detailed images. This copy does not retain searchable text, interactive fields, valid digital signatures, links, bookmarks, or the original accessibility structure.
  • Compare the first, middle, and last pages.
  • Check the downloaded bytes against the upload limit.
Illustrated tool behavior. For a long PDF, splitting can be a better fit than flattening every page; check the destination’s file-count and size rules first.
02

Match the upload channel

A size limit may apply to each attachment, the whole submission, or an archive. Read the rule in the actual field before splitting: separate files cannot solve a one-file requirement.

  • Keep consecutive page ranges in order and use distinct filenames that identify their contents or page numbers.
  • Count the final parts. A result under the per-file ceiling can still exceed the receiving form’s file-count or combined-size limit.
  • A ZIP is a convenience for downloading. Its combined size and file type are separate from the PDF checks.
  • When the error names a password, unsupported format or filename, fix that cause before repeatedly compressing.
Official examples checked 5 September 2026

SARS channels publish different upload rules

These South African examples show why the receiving channel matters. They describe file preparation, not which tax documents you must submit.

eFiling and MobiApp
Same per-document ceiling, different counts
Use the requirements for the channel you are actually using.
  • SARS lists a maximum of 5 MB per document: up to 20 files on eFiling and 10 on MobiApp.
  • Complete the requested file set before submitting; the guidance says the supporting-document link closes after submission.
  • SARS supporting-document guidance, updated 4 November 2025.
SOQS
Check the separate FAQ
A file can be rejected for reasons other than bytes.
  • The SOQS FAQ uses “5MB per upload” and a maximum of 10 documents in a single submission. Confirm how the current form applies that wording.
  • It excludes empty, encrypted and password-protected files, and filenames containing a single quote or ampersand.
  • SARS SOQS upload FAQ, updated 23 February 2024.
Comparison of published instructions, not a successful SARS submission test. Current portal requirements take precedence; a local size check does not guarantee acceptance.
03

Check every output part

File-size arithmetic alone cannot predict a split. Each standalone PDF needs its own structure and resources, so the splitter measures the bytes after saving each candidate range.

  • Inspect the saved result at normal reading size. Check the smallest numbers, stamps, signatures, labels and photographs.
  • A single page can exceed the maximum by itself. The tool keeps that page intact and marks it over the limit; that result still needs attention.
  • The parts can total more bytes than the original because they may repeat shared fonts or images. The bounded search does not promise the fewest possible parts.
  • If compression makes essential detail unreadable and splitting is not permitted, obtain a clearer or more compact source, or follow the recipient’s alternative submission instructions.
Downloadable measurements

A small text page fits; a detailed page can remain too large

Our four-page synthetic PDF includes selectable text, a rotated page and a color chart. These saved results demonstrate actual byte checks, including an impossible limit.

2,000-byte maximum
Page 1 fits; page 4 does not
The same limit produces different results for different page content.
Measured 5 September 2026 in Chrome 152.0.7977.83 with pdf-lib 1.17.1. Independently decoded outputs were checked for page order, rotation and selectable text. These synthetic files do not establish compatibility or readability for every document.
Quick questions

PDF size and upload questions

Can every PDF be compressed below 5 MB?

No. A long or detailed document may need more bytes to remain readable. The destination may permit splitting or a different submission method. An over-limit attempt is not a completed repair.

Does splitting a PDF preserve everything?

It copies existing page content without turning it into pictures, but creates new documents. Unsupported interactive structures are rejected, document-level navigation is not guaranteed, and a digital signature does not remain valid.

Why is one page still too large after splitting?

The page’s own images, fonts and PDF structure can exceed the limit. Splitting cannot divide the contents of one page. Review a permitted compression or source-export option instead.

Will the compressor keep a searchable PDF searchable?

No. This compressor rebuilds every page as a JPEG image and discards the text layer. Use a different route when searchable text, forms or other original document features are required.

Can I upload the ZIP instead of separate PDFs?

Only if the receiving field explicitly accepts archives. The splitter checks each PDF against its selected limit; the combined ZIP has a different size and format.

Remember this

The short version

  • Choose based on the receiving field’s format, per-file ceiling and file count.
  • Compress PDF makes image-based pages; size splitting copies existing page content with document-level limits.
  • Read every saved file and resolve every over-limit warning before uploading.
Ready to work

Open the tool you need

Choose the tool for the change your file needs.

(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 === 'prepare-for-ai' || 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'}; } if (key === 'prepare-for-ai') { return {primary: 'Prepare', secondary: 'AI', 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 === 'prepare-for-ai') return 'bi-ui-checks-grid'; 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); })();