The quick fix
If QuickBooks is rejecting your invoice PDF, do this: generate the invoice as a clean, text-based PDF instead of a scan or a template with a giant embedded logo, and if you're stuck with an existing PDF that's already too big, run it through a PDF compressor before you attach it. PixelTools has both, free, and neither uploads your file anywhere — the invoice is built and the PDF is shrunk entirely in your browser. Use the [invoice generator](/invoice-generator) to produce a fresh, small invoice, or the [PDF compressor](/compress-pdf) to shrink one you already made. The rest of this guide explains why QuickBooks is so strict about this and what's actually bloating your file.
What QuickBooks' attachment limit actually is
QuickBooks Desktop's Document Center itself has no fixed size cap on files attached and stored locally against a transaction — it's limited only by your disk space. The "Attachment size exceeds 2 MB limit" error people hit comes from a different place: QuickBooks Desktop's built-in Outlook-free webmail, used when you email a form straight from QuickBooks. Intuit has confirmed that 2MB cap is fixed and can't be raised from within QuickBooks; the workaround is switching Send Forms to use Outlook instead, which isn't bound by it. QuickBooks Online works differently: transaction attachments there are commonly capped around 20MB per file (with no hard cap on the number of attachments, since it's cloud storage), but if you send the invoice through QBO's own built-in email rather than downloading and mailing it yourself, that send step imposes a much smaller cap, closer to Desktop's 2MB. Either way, a genuinely small PDF sidesteps the whole question.
Why a one-page invoice ends up several megabytes
An invoice is just text and a table — line items, totals, a couple of addresses. As pure text, that's a few kilobytes. What actually inflates the file is almost always an embedded raster image: a company logo saved from a phone photo or a high-res export, dropped into a Word or Canva template at full resolution and then "printed to PDF." A 3000px-wide PNG logo alone can outweigh the entire rest of the document by 50-100x. Scanned signature images and screenshot-based letterheads do the same thing. The invoice looks identical on screen whether the logo is 200px or 3000px wide, so there's no visual cue that it's the reason the file crossed QuickBooks' limit — which is exactly why this trips people up.
Option 1: build the invoice as text, not a raster
PixelTools' [invoice generator](/invoice-generator) draws the whole document — header, line items, totals, notes — as real, selectable PDF text and vector lines, with no image embedded anywhere in the output. That means the exported PDF is inherently tiny, typically well under 100KB, regardless of how many line items it has, because there's no logo file baked into it to bloat it. It's a genuine fix if you don't need a specific branded logo graphic on the invoice itself (or you're fine adding your branding as plain text, e.g. your company name in a larger font). Fill in the parties, line items, currency, and notes, generate the PDF, and attach that instead of your usual template — it'll clear either QuickBooks limit with room to spare.
Option 2: shrink the invoice PDF you already have
If you need to keep your existing branded invoice — logo and all — run it through PixelTools' [PDF compressor](/compress-pdf) first. It scans the PDF for embedded JPEG images (the actual bloat source in most invoices) and recompresses them in place, with three presets: Low, Medium, and High quality, which trade off JPEG quality and a maximum pixel dimension the image gets downscaled to. A logo or letterhead image that's needlessly saved at 3000px wide gets scaled down and re-encoded, often cutting the file by 80-90%, with no visible difference on an invoice-sized document. One honest caveat: it only recompresses JPEG images, not every embedded graphic format, and a PDF that's already pure text or vector art won't shrink much — because there's nothing bloated to remove in the first place.
The full workflow
Start with whichever PDF you already have. If it's a scanned or template-based invoice with a heavy logo, open [/compress-pdf](/compress-pdf), drop the file in, and try the Medium preset first — check the before/after size and skim the result for any visible quality loss, then bump to High only if Medium isn't small enough. If you're generating a fresh invoice and don't need a specific logo graphic, skip straight to [/invoice-generator](/invoice-generator) and build it from scratch — it'll come out small by default. Either way, check the resulting file size against the limit that's actually biting you: under roughly 2MB if you're using QuickBooks Desktop's or QuickBooks Online's built-in email-send feature, or up to about 20MB if you're just attaching it to the transaction record in QuickBooks Online.
Still getting rejected? Check which limit you're actually hitting
Before compressing further, confirm you're not fighting the wrong limit. In QuickBooks Desktop, attaching a file to the transaction record itself has no fixed size cap — only the webmail send step does. So if the error only appears when you click Email, not when you click Attach, the fix isn't a smaller file at all: switch your Send Forms preference to Outlook (Edit > Preferences > Send Forms), which isn't bound by the 2MB webmail cap, and attach the file locally as usual. In QuickBooks Online, the same split applies between attaching to the transaction and sending mail directly from QBO. If you genuinely need the file smaller, re-run compression at the Low preset — it drops resolution further and usually still looks fine for a document meant to be read on screen or printed at invoice size, not viewed at zoom.