Lyonite
Measured results

I compressed the same 5 PDFs with 6 tools. Three of them deleted every screen-reader tag.

Every tool made the files smaller. Some got there by quietly deleting the invisible structure a blind reader depends on, and none of them mentioned it — one of them says "Same PDF quality" in the title Google shows. So I opened all 52 output files and counted what came back.

Tested by .

Tested 21 August 2026, methodology widened 30 August 2026. Five public files, every available output checked.

The results

124,009

accessibility tags across these five files. 4 of the 6 measured products had a tested setting that deleted accessibility structure.

5 of 5

documents we handed back with every page, character, tag, form field, link and bookmark still in them.

9 of 15

measured Ghostscript outputs that came back larger, the worst by 135%.

3 of 6

measured products that never send your file anywhere. 2 are command-line programs.

6 products were measured. Adobe Acrobat Online and Sejda have recorded settings and no captured output, so they are named in the methodology rather than counted here.

Two questions, because "which one made the smallest file" is only half of one.

Kept everything ranks the tools that handed the whole document back: every page, every character, every accessibility tag, every form field and value, every link and bookmark, and pages that still render like the original.

Smallest, whatever it took ranks the same tools by size alone. Everything in it still opens and still lets you search the text. The last column says what each one gave up to get there, on one fixed scale, so two rows can be compared without a degree in PDF internals.

The first tab is the overall standing. The other five are the individual documents.

Round by round

Every column is measured from the file the tool handed back, not read off its result screen. A result screen tells you the size and nothing about the document.

The three websites were driven by hand in a real browser on the setting named in each row, on 27 August 2026. Whatever each one returned was saved and put through the same checks as everything else.

Across all 5 documents

Against the upload-based compressors with complete five-file results, Lyonite — Smallest produced the smallest usable file on 5 of 5. It averaged 63.07% reduction against 53.06% for iLovePDF — Extreme (its most aggressive), the strongest fully measured upload-based competitor.

That is iLovePDF and PDF24. Smallpdf is excluded from the comparison rather than counted: its free tier allowed two of the five files, and a claim measured against a different set of rivals on every document is not one claim.

Counting every tool here and not only the websites, it returned the smallest file on 5 of 5 — of the results that still had all their pages, all their text and no page emptied.

Among the settings that keep the accessibility structure, our default averages 38.29% against 22.45% for PDF24 — 144 dpi, quality 75 (default) — and it wins 4 of 5 of those.

Kept everything

Every page, every character, every accessibility tag, every form field, link and bookmark — and pages that still render like the original.

Every one of these returned all five files with nothing missing. Ranked by average reduction; the bar is drawn against the best result on this board.
ToolAverage reductionWhat it removedStayed on your deviceLocal
1stLyonite — Balanced (default)38.29%Nothingyes
2ndPDF24 — 144 dpi, quality 75 (default)22.45%1 came back biggerNothinguploaded
3rdqpdf — lossless structural optimisation7.07%1 came back biggerNothingyes

Smallest, whatever it took

The same tools ranked by size alone, with their aggressive settings where they have one. Everything here still opens, still has all its pages and still lets you search the text — the last column says what each one gave up to get there, and a tool that gave up nothing says so.

Ranked by size alone. A placing needs all five files back with every page, every character and the ink still on it — which is why Ghostscript has none: it emptied a page of charts on the research paper.
ToolAverage reductionWhat it removedStayed on your deviceLocal
1stLyonite — Smallest63.07%The invisible layerscreen-reader tags on 4 of 5 · sharpness on 1 of 5yes
2ndiLovePDF — Extreme (its most aggressive)53.06%Working partsform fields on 1 of 5 · screen-reader tags on 4 of 5 · annotations on 1 of 5uploaded
Smallpdf — Basic (the only free level)48.67%over 2 of 5 filesWorking partsform fields on 1 of 2 · screen-reader tags on 2 of 2 · annotations on 1 of 2uploaded
3rdPDF24 — 144 dpi, quality 75 (default)22.45%1 came back biggerNothinguploaded
qpdf — --optimize-images7.75%1 came back biggerNothingyes
Ghostscript -dPDFSETTINGS=/screen−16.47%3 came back biggerThe document itselfemptied a page on 1 of 5 · text on 3 of 5 · form fields on 2 of 5yes
  1. Nothingevery page, character, tag, field, link and bookmark came back
  2. Sharpness onlynothing missing, but a page is visibly softer than the original
  3. The invisible layerscreen-reader tags, bookmarks or attachments — invisible on screen, gone for anyone who needs them
  4. Working partsform fields you fill in, or links you click, stopped working
  5. The document itselfpages, text or the ink on a page did not come back

qpdf and Ghostscript are technical local references, not consumer websites. Open the raw benchmark JSON.

Not tested yet

Configurations recorded on the date shown, with no output captured. They are listed here rather than ranked, because a setting is not a result.

  • Adobe Acrobat OnlineMedium compression + High compression (smallest size, lower quality) — measurements pending
  • Sejdadefault configuration + aggressive configuration — measurements pending
Target size, speed and privacy
Target-size success is derived from exact output bytes. Runtime is shown only where the v2 harness captured it; upload-dependent and local timings are not treated as equivalent.
ToolUnder 10 MBUnder 5 MBUnder 2 MBMean runtimeProcessing
Lyonite — SmallestOur aggressive setting, here so the row against Ghostscript’s aggressive preset is like for like rather than a middle setting against a hard one.5 of 55 of 55 of 533.51 slocal
iLovePDF — Extreme (its most aggressive)Their most aggressive setting, chosen deliberately. Here because our aggressive setting has to be measured against theirs rather than against their default.5 of 55 of 55 of 5not captureduploaded
iLovePDF — Recommended (default)iLovePDF’s preselected Recommended level.5 of 55 of 55 of 5not captureduploaded
Smallpdf — Basic (the only free level)“Basic” is the only level a free visitor can use; the other three are behind the paywall.2 of 22 of 22 of 2not captureduploaded
Lyonite — Balanced (default)Our default. Tests lossless and mozjpeg candidates per image, safely subsets supported fonts, merges exact duplicate streams, re-deflates content and writes the file back out compactly. In your browser.5 of 55 of 53 of 57.97 slocal
PDF24 — 144 dpi, quality 75 (default)Its own defaults, which it prints on screen: 144 dpi, quality 75, deduplicate streams, rasterise heavy graphics, subset embedded fonts.5 of 55 of 52 of 5not captureduploaded
qpdf — lossless structural optimisationThe structural optimiser. Never touches how a page looks.5 of 54 of 51 of 50.61 slocal
Ghostscript -dPDFSETTINGS=/screenGhostscript’s aggressive preset — the one most tutorials paste.5 of 54 of 52 of 55.08 slocal

IRS Publication 17: Your Federal Income Tax (2025)

2.95 MB · 62,494 accessibility tags · 2,958 links · 12 bookmarks

142 pages, 62,494 accessibility tags, 2,958 links and 12 bookmarks, with barely a picture in it. Two thirds of this file is text and one third is the structure that makes the text navigable, which is exactly why the results here are so far apart. Download it from irs.gov and re-run the script.

Ranked by how much smaller, largest first. Placings go to the tools that handed the document back whole, so a bigger reduction with something missing does not take one. How it looks is graded on the worst single page, not the average — an average hides the one page that went wrong. Every page of every output was also weighed for how much ink is on it, which is how an emptied page gets caught.
ToolSize afterSizeReductionSavedHow it looksLooksWhat it cost the documentCostStayed on your deviceLocal
Lyonite — Smallest1.38 MB53.23%no visible changeworst page 0.9998 SSIM, 0.09% of pixels movedThe invisible layer
  • deleted 62,494 accessibility tags
yes
iLovePDF — Recommended (default)1.63 MB44.64%no visible changeworst page 0.9994 SSIM, 0.13% of pixels movedThe invisible layer
  • deleted 62,494 accessibility tags
uploaded
iLovePDF — Extreme (its most aggressive)1.64 MB44.42%a little softerworst page 0.9948 SSIM, 11.55% of pixels movedThe invisible layer
  • deleted 62,494 accessibility tags
uploaded
1stLyonite — Balanced (default)2.57 MB12.65%no visible changeworst page 0.9998 SSIM, 0.09% of pixels movedNothingyes
2ndqpdf — lossless structural optimisation2.95 MB−0.02%came back biggerpixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
qpdf — --optimize-images2.95 MB−0.03%came back biggerpixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
3rdPDF24 — 144 dpi, quality 75 (default)2.97 MB−0.69%came back biggerpixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothinguploaded
Ghostscript -dPDFSETTINGS=/ebook6.73 MB−128.45%came back biggera little softerworst page 0.9938 SSIM, 12.24% of pixels movedWorking parts
  • broke 3 links
  • deleted 62,494 accessibility tags
  • dropped annotations
  • removed attachments
yes
Ghostscript -dPDFSETTINGS=/screen6.73 MB−128.48%came back biggera little softerworst page 0.9938 SSIM, 12.24% of pixels movedWorking parts
  • broke 3 links
  • deleted 62,494 accessibility tags
  • dropped annotations
  • removed attachments
yes
Ghostscript -dPDFSETTINGS=/printer6.93 MB−135.30%came back biggerno visible changeworst page 0.9994 SSIM, 0.46% of pixels movedWorking parts
  • broke 3 links
  • deleted 62,494 accessibility tags
  • dropped annotations
  • removed attachments
yes
Smallpdf — Basic (the only free level)Not run on this file. Smallpdf’s free tier allows two downloads per twelve hours, and its stronger levels are behind the paywall — we measured the two files it let us take and did not buy an account to get the rest.

IRS Form 1040 (2025)

215 KB · 1,236 accessibility tags · 199 form fields

Two pages, no photographs, 199 fillable fields and a full tag tree. The smallest file here and the one where the tools disagree most violently — from 3% to 53%, and from every field intact to none. Download it from irs.gov and re-run the script.

Ranked by how much smaller, largest first. Placings go to the tools that handed the document back whole, so a bigger reduction with something missing does not take one. How it looks is graded on the worst single page, not the average — an average hides the one page that went wrong. Every page of every output was also weighed for how much ink is on it, which is how an emptied page gets caught.
ToolSize afterSizeReductionSavedHow it looksLooksWhat it cost the documentCostStayed on your deviceLocal
Lyonite — Smallest87 KB59.33%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedThe invisible layer
  • deleted 1,236 accessibility tags
yes
Smallpdf — Basic (the only free level)100 KB53.45%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedThe invisible layer
  • deleted 1,236 accessibility tags
uploaded
1stLyonite — Balanced (default)124 KB42.42%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
Ghostscript -dPDFSETTINGS=/ebook129 KB39.99%no visible changeworst page 0.9991 SSIM, 1.75% of pixels movedWorking parts
  • emptied the form
  • changed form values
  • deleted 1,236 accessibility tags
  • dropped annotations
yes
Ghostscript -dPDFSETTINGS=/screen129 KB39.98%no visible changeworst page 0.9991 SSIM, 1.75% of pixels movedWorking parts
  • emptied the form
  • changed form values
  • deleted 1,236 accessibility tags
  • dropped annotations
yes
Ghostscript -dPDFSETTINGS=/printer134 KB37.49%no visible changeworst page 0.9991 SSIM, 1.75% of pixels movedWorking parts
  • emptied the form
  • changed form values
  • deleted 1,236 accessibility tags
  • dropped annotations
yes
iLovePDF — Recommended (default)164 KB23.69%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedThe invisible layer
  • deleted 1,236 accessibility tags
uploaded
iLovePDF — Extreme (its most aggressive)164 KB23.69%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedThe invisible layer
  • deleted 1,236 accessibility tags
uploaded
2ndqpdf — lossless structural optimisation194 KB9.60%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
qpdf — --optimize-images194 KB9.60%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
3rdPDF24 — 144 dpi, quality 75 (default)209 KB2.99%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothinguploaded

Budget of the U.S. Government, Fiscal Year 2024

2.31 MB · 25,477 accessibility tags · 1 form field · 34 links · 27 bookmarks

A fully tagged government publication with a fillable field in it, 184 pages of tables, and almost no photographs. The file that separates tools which compress documents from tools which compress pictures. Download it from govinfo.gov and re-run the script.

Ranked by how much smaller, largest first. Placings go to the tools that handed the document back whole, so a bigger reduction with something missing does not take one. How it looks is graded on the worst single page, not the average — an average hides the one page that went wrong. Every page of every output was also weighed for how much ink is on it, which is how an emptied page gets caught.
ToolSize afterSizeReductionSavedHow it looksLooksWhat it cost the documentCostStayed on your deviceLocal
Lyonite — Smallest1.18 MB48.81%no visible changeworst page 0.9943 SSIM, 0.38% of pixels movedThe invisible layer
  • deleted 25,477 accessibility tags
yes
iLovePDF — Extreme (its most aggressive)1.24 MB46.20%a little softerworst page 0.9835 SSIM, 8.33% of pixels movedWorking parts
  • emptied the form
  • changed form values
  • deleted 25,477 accessibility tags
  • dropped annotations
  • one page below the 0.99 sharpness floor
uploaded
Smallpdf — Basic (the only free level)1.29 MB43.88%a little softerworst page 0.9946 SSIM, 7.99% of pixels movedWorking parts
  • emptied the form
  • changed form values
  • deleted 25,477 accessibility tags
  • dropped annotations
uploaded
iLovePDF — Recommended (default)1.31 MB43.28%no visible changeworst page 0.9947 SSIM, 0.46% of pixels movedWorking parts
  • emptied the form
  • changed form values
  • deleted 25,477 accessibility tags
  • dropped annotations
uploaded
1stLyonite — Balanced (default)1.86 MB19.47%no visible changeworst page 0.9986 SSIM, 0.29% of pixels movedNothingyes
2ndPDF24 — 144 dpi, quality 75 (default)1.96 MB15.18%no visible changeworst page 0.9998 SSIM, 0.24% of pixels movedNothinguploaded
3rdqpdf — lossless structural optimisation2.17 MB5.96%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
qpdf — --optimize-images2.17 MB5.96%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
Ghostscript -dPDFSETTINGS=/screen3.84 MB−66.72%came back biggera little softerworst page 0.9933 SSIM, 8.29% of pixels movedThe document itself
  • lost 0.01% of the text
  • emptied the form
  • changed form values
  • deleted 25,477 accessibility tags
  • dropped annotations
  • changed page geometry
yes
Ghostscript -dPDFSETTINGS=/ebook3.88 MB−68.27%came back biggera little softerworst page 0.9974 SSIM, 8.11% of pixels movedThe document itself
  • lost 0.01% of the text
  • emptied the form
  • changed form values
  • deleted 25,477 accessibility tags
  • dropped annotations
  • changed page geometry
yes
Ghostscript -dPDFSETTINGS=/printer4.27 MB−85.16%came back biggerno visible changeworst page 0.9974 SSIM, 0.04% of pixels movedThe document itself
  • lost 0.01% of the text
  • emptied the form
  • changed form values
  • deleted 25,477 accessibility tags
  • dropped annotations
  • changed page geometry
yes

Learning Transferable Visual Models From Natural Language Supervision

6.50 MB · 795 links

79 embedded JPEGs, 1.4 MB of fonts — 740 KB of which is the same font program stored three times — and several pages of charts drawn as vector art rather than pictures. No tag tree. This is the file where Ghostscript wins on size by a mile, and where it emptied a page doing it. Download it from arXiv 2103.00020 and re-run the script.

Ranked by how much smaller, largest first. Placings go to the tools that handed the document back whole, so a bigger reduction with something missing does not take one. How it looks is graded on the worst single page, not the average — an average hides the one page that went wrong. Every page of every output was also weighed for how much ink is on it, which is how an emptied page gets caught.
ToolSize afterSizeReductionSavedHow it looksLooksWhat it cost the documentCostStayed on your deviceLocal
Ghostscript -dPDFSETTINGS=/screen864 KB87.01%a page came back wrongworst page 0.8321 SSIM, 2.57% of pixels movedThe document itself
  • emptied 1 page
  • lost 4.2% of the text
  • one page below the 0.99 sharpness floor
yes
Ghostscript -dPDFSETTINGS=/ebook960 KB85.57%a page came back wrongworst page 0.8321 SSIM, 1.90% of pixels movedThe document itself
  • emptied 1 page
  • lost 4.2% of the text
  • one page below the 0.99 sharpness floor
yes
Ghostscript -dPDFSETTINGS=/printer1.33 MB79.52%a page came back wrongworst page 0.8321 SSIM, 1.57% of pixels movedThe document itself
  • emptied 1 page
  • lost 4.2% of the text
  • one page below the 0.99 sharpness floor
yes
Lyonite — Smallest1.70 MB73.77%a little softerworst page 0.9838 SSIM, 2.58% of pixels movedSharpness only
  • one page below the 0.99 sharpness floor
yes
1stiLovePDF — Extreme (its most aggressive)1.83 MB71.90%no visible changeworst page 0.9977 SSIM, 1.73% of pixels movedNothinguploaded
iLovePDF — Recommended (default)1.90 MB70.73%no visible changeworst page 0.9985 SSIM, 1.12% of pixels movedNothinguploaded
2ndLyonite — Balanced (default)2.22 MB65.79%no visible changeworst page 0.9957 SSIM, 2.11% of pixels movedNothingyes
3rdPDF24 — 144 dpi, quality 75 (default)2.94 MB54.70%no visible changeworst page 0.9992 SSIM, 1.02% of pixels movedNothinguploaded
qpdf — --optimize-images5.88 MB9.52%pixel-identicalworst page 1.0000 SSIM, 0.01% of pixels movedNothingyes
qpdf — lossless structural optimisation6.09 MB6.28%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
Smallpdf — Basic (the only free level)Not run on this file. Smallpdf’s free tier allows two downloads per twelve hours, and its stronger levels are behind the paywall — we measured the two files it let us take and did not buy an account to get the rest.

Income in the United States: 2022 (P60-280)

2.60 MB · 34,802 accessibility tags · 348 links · 2 bookmarks

A US Census Bureau report: full-bleed cover art, CMYK charts, 34,802 accessibility tags and 348 links. A federal publication, which is to say one that is required to be accessible. Download it from census.gov and re-run the script.

Ranked by how much smaller, largest first. Placings go to the tools that handed the document back whole, so a bigger reduction with something missing does not take one. How it looks is graded on the worst single page, not the average — an average hides the one page that went wrong. Every page of every output was also weighed for how much ink is on it, which is how an emptied page gets caught.
ToolSize afterSizeReductionSavedHow it looksLooksWhat it cost the documentCostStayed on your deviceLocal
Lyonite — Smallest526 KB80.23%no visible changeworst page 0.9966 SSIM, 1.64% of pixels movedThe invisible layer
  • deleted 34,802 accessibility tags
yes
iLovePDF — Extreme (its most aggressive)556 KB79.09%a little softerworst page 0.9781 SSIM, 6.17% of pixels movedThe invisible layer
  • deleted 34,802 accessibility tags
  • one page below the 0.99 sharpness floor
uploaded
iLovePDF — Recommended (default)681 KB74.42%no visible changeworst page 0.9932 SSIM, 1.63% of pixels movedThe invisible layer
  • deleted 34,802 accessibility tags
uploaded
1stLyonite — Balanced (default)1.27 MB51.13%no visible changeworst page 0.9982 SSIM, 1.01% of pixels movedNothingyes
2ndPDF24 — 144 dpi, quality 75 (default)1.56 MB40.08%no visible changeworst page 0.9973 SSIM, 2.80% of pixels movedNothinguploaded
3rdqpdf — --optimize-images2.24 MB13.69%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
qpdf — lossless structural optimisation2.25 MB13.50%pixel-identicalworst page 1.0000 SSIM, 0.00% of pixels movedNothingyes
Ghostscript -dPDFSETTINGS=/screen2.97 MB−14.16%came back biggervisibly softerworst page 0.9264 SSIM, 7.24% of pixels movedThe document itself
  • lost 1.9% of the text
  • deleted 34,802 accessibility tags
  • changed page geometry
  • one page below the 0.99 sharpness floor
yes
Ghostscript -dPDFSETTINGS=/ebook3.10 MB−19.46%came back biggera little softerworst page 0.9936 SSIM, 5.97% of pixels movedThe document itself
  • lost 1.9% of the text
  • deleted 34,802 accessibility tags
  • changed page geometry
yes
Ghostscript -dPDFSETTINGS=/printer4.23 MB−62.97%came back biggerno visible changeworst page 0.9981 SSIM, 0.15% of pixels movedThe document itself
  • lost 1.9% of the text
  • deleted 34,802 accessibility tags
  • changed page geometry
yes
Smallpdf — Basic (the only free level)Not run on this file. Smallpdf’s free tier allows two downloads per twelve hours, and its stronger levels are behind the paywall — we measured the two files it let us take and did not buy an account to get the rest.

The 34,802 tags nobody mentions

Underneath every tagged PDF sits a second document you never see: a tree saying this is a heading, this is a table row, this is the alt text for that chart, and this is the order a human reads them in. Strip it and the page still draws exactly the same marks. What goes is any way of knowing what those marks *are*.

That tree is what a screen reader follows. It is what "accessible PDF" means, and for federal agencies it is how a document meets Section 508.

iLovePDF removed it. Smallpdf removed it. Ghostscript removed it at /screen, /ebook and /printer alike. Every tag, in every tagged file I tested. iLovePDF and Smallpdf remove the catalogue entry too, so the file stops claiming it ever had one.

The two websites do this on the setting a free visitor is handed — iLovePDF's "Recommended", Smallpdf's "Basic". Ghostscript has no default in the same sense; the point there is that no preset avoids it.

Why bother? Because the tree is worth a great deal of file size. I measured it the only way that settles the question: compress each document twice with the lossless passes only, once keeping the tree and once detaching it, and subtract.

  • Publication 17: 1,160 KB, 38.5 points. 4.69% with the tree, 43.16% without.
  • The federal budget: 595 KB, 25.2 points. 9.59% with, 34.81% without.
  • The Census report: 580 KB, 21.8 points. 15.79% with, 37.60% without.
  • Form 1040: 32 KB, 14.8 points. 42.20% with, 56.95% without.

No image work, no font work, the two runs identical in every other respect. pnpm compress:tag-cost reproduces them.

Now read the board again. iLovePDF's 74.42% on the Census report is real, and around 22 points of it is the accessibility tree.

Offering that trade is reasonable. On 30 August 2026 iLovePDF's compress page carried the title "Compress PDF online. Same PDF quality less file size" above "Reduce file size while optimizing for maximal PDF quality." Smallpdf's read "Shrink PDF Size, Preserve Quality". Not one of those sentences is false about what you can see. Every one of them is silent about what you cannot.

We do it too, and here is the difference

A report that scolds other people for something it also does is worth nothing. So: our Smallest setting removes the structure tree, the operators binding it to the page, private application data, XMP metadata and any embedded attachment large enough to matter.

There are real reasons to want that — a brochure going into an email, a file that has to clear a portal limit today. The trade is not the problem. Four things make ours different:

  • It is not the default. Balanced is, and Balanced removes none of it.
  • The control says so before you press it: "Photos soften. Removes screen-reader tags, metadata and attachments."
  • The result afterwards counts what went — "34,802 accessibility tags removed" — and offers to redo it at Balanced.
  • It is ranked in the second table as a tool that removed something, next to iLovePDF Extreme, because it did.

None of the six settings I tested elsewhere disclosed the trade before compressing or reported it afterwards. Smallpdf's stronger levels sit behind its paywall, so they are untested rather than cleared.

One correction worth keeping visible. Detaching that tree is harder than deleting a dictionary entry, and the first version of this report got it wrong. Removing /StructTreeRoot from the catalogue orphans the tree on three of these four files. On the Census report it orphans nothing, because every bookmark carries an /SE entry pointing into the tree, so all 34,802 elements stay alive through the table of contents. I published "the tree costs nothing on the Census report" in the opening line. It costs 580 KB. Corrected 27 August.

So which one should you use?

One test corpus cannot tell you about batches, encryption or price, and I build one of the tools in the table. So two of these three go to somebody else:

Most documents, and anything tagged

Lyonite, on Balanced

Smaller than PDF24 on all five files with nothing removed, and the only setting here that keeps the accessibility tree while compressing hard. Runs in the tab, so nothing is uploaded. Slower than a website, because your laptop is doing the work.

Vector artwork, CAD exports, big drawings

PDF24

It flattens heavy vector pages into a photograph of the page, which is the one thing no setting here does. On a reader's 50 MB drawing it returned 0.38 MB against our 4.28 MB. The artwork blurs when you zoom and cannot be re-scaled, and the file is uploaded.

Scripted, local, must not lose a byte

qpdf

A command-line reference, not a consumer tool. It recompresses streams without touching a single page appearance — pixel-identical output on all five files — which makes it modest at compressing and perfect as a sanity check on everything else.

The thing none of the other five do, at any price, is check their own work. They compress the file, report a percentage, and stop. Ours re-opens the file it just wrote, reads it back with the same inspector the viewer tab uses, and reports from that — including anything it skipped and why. A compressor that only ever prints its wins is teaching you to trust it further than it has earned.

What each tool actually did

Lyonite. Balanced lost nothing on any of the five: every page, character, tag, form field and value, link and bookmark came back. Smallest is a separate, named setting that removes the tag tree, metadata and large attachments, and counts each of those afterwards. Weak spot: Type1 and CFF font programs, which we keep rather than subset.

iLovePDF. The strongest upload-based competitor with complete results, and on the CLIP paper its default beats our default outright while keeping everything — that paper has no tag tree, so there was nothing there to quietly delete. On the four tagged documents it removed every tag, and on the federal budget it emptied the form field as well.

Smallpdf. Two downloads per twelve hours on the free tier, so it is measured on two files rather than five and its rows say so. Both outputs lost their tags; the budget also lost its form field and value. The tax form's 199 fields came through intact.

PDF24. 144 PPI, quality 75, stream deduplication, heavy-graphics rasterisation, font subsetting. It kept every tag, field, link and bookmark on all five — the only online consumer tool here that lost nothing at all. It is also the one that made Publication 17 marginally bigger, which is the same limit our own writer had to solve.

Ghostscript. Deleted every tag on every tagged file at all three presets, lost text on four of five, emptied a page of charts on the research paper, and returned three of the five files larger than they went in. It is very good at pictures and it does not really believe in structure.

qpdf. A local command-line reference rather than a consumer product. Its lossless row recompresses streams and builds object streams without touching page appearance.

Adobe Acrobat Online and Sejda. Configurations recorded, no output captured, so no row. Neither is ranked and neither is estimated.

The page that vanished

Page 41 of the CLIP paper is a grid of 27 scatter plots, drawn as vector art, with the axis labels as real selectable text. In the original it is 31,188 drawing operations and 35.4% of the page is ink.

Ghostscript's output has 51 operations. Six text draws, one path, one stroke. 1.4% of the page is ink, and all of it is the running header, the page number and the caption:

Figure 20. Linear probe performance plotted for each of the 27 datasets, using the data from Table 10.

The charts that caption describes are gone. Not rasterised — there is no image operator on the page at all. Just gone, at /screen, /ebook and /printer alike, on Ghostscript 10.07.1.

This is the finding that changed how the report is run. The pixel comparison samples six pages out of forty-eight, and those six did not include page 41. The file scored 0.54% drift and looked fine. Every page of every output is now weighed for ink, which costs minutes and would have caught it on the first run.

Three of five files came back bigger

Ghostscript did not merely fail to compress the tagged documents. It inflated them.

Publication 17 went in at 2.95 MB and came out at 6.73 MB, 128% larger, with all 62,494 tags gone and three links broken. The federal budget went from 2.31 MB to 4.27 MB on /printer, the preset whose name sounds safest. The Census report went from 2.60 MB to 4.23 MB.

The mechanism is not mysterious. Ghostscript rewrites the document rather than repacking it, and its rewrite is generous with objects and stingy with object streams — so a file whose bulk is tens of thousands of small structural objects comes out worse than it went in.

This matters beyond the table because "just run it through Ghostscript" is the most repeated answer to "how do I compress a PDF", and on a tagged government document it is wrong in both directions at once.

Why size on its own is a worthless measure

Ask any compressor how it did and it answers in megabytes. That is the easy half of the question. A tool that deleted every page but the first would win it outright.

A PDF can be made dramatically smaller by rendering each page to a picture and throwing away everything underneath — the text, the links, the form fields, the bookmarks, the tags. It looks identical on screen and it is a different kind of object. You cannot search it, copy from it, fill it in, or hand it to a screen reader.

So every output here is compared against its original on nine measures, not one, and the two that decide the ranking are in the tables above: what the document lost, and how the worst page looks.

The nine checks, in full
  • Size. Bytes out against bytes in, to two decimal places. 97.4% and 96.6% are not the same result, and rounding both to 97% is how a comparison stops being one.
  • Pages and text. Every character the original could hand back, extracted from both with the same parser and compared. Not eyeballed on screen.
  • Structure and functionality. Accessibility tags, marked content, recursive form fields and values, links, bookmarks, annotations, attachments and page geometry, before and after.
  • How it looks. Both files rendered at the same 900-pixel width and compared two ways: the share of pixels that moved by more than 8 of 255 on a channel, and SSIM, which tracks what an eye notices. Graded on the worst single page, because an average hides the one page that went wrong.
  • Ink, on every page. A page that had ink and comes back with under a quarter of it has not been compressed. This is the check that caught the missing figure above; the sampled pixel comparison missed it.
  • Validity. Every output must parse and pass qpdf --check.
  • Speed and target size. How long it took, and whether it could get under 10 MB, 5 MB and 2 MB. A website's time includes the upload and the download and is labelled so, because that is not comparable with work done on your own machine.
  • Where the file went. Production Lyonite is driven with network capture, and the build fails if document bytes leave the origin.

Where we still lose

iLovePDF's default beats our default on the CLIP paper, 70.73% to 65.79%, without removing anything. That paper has no tag tree and no form, so the whole argument of this page is inapplicable to it — iLovePDF simply produced a smaller file, and a slightly closer one: worst-page SSIM 0.9985 against our 0.9957.

I know most of where the difference is. Their output holds 112 KB of embedded font programs where the original holds 1,385 KB. Ours keeps more, because our subsetter handles TrueType and leaves Type1 and CFF alone rather than guessing at them. That is a real gap and a fixable one, and until it is fixed this row says so.

PDF24 crushes vector artwork and we do not. A reader sent me a 50 MB file that is a single page: two 11-megapixel images and a 24 MB *uncompressed* page description. It is not a sixth round — it is not a public document, and only two of the services could be run on it — but it says more about the trade on this page than another government report would.

  • Lyonite Balanced: 6.84 MB, 86.35% smaller, all 164 drawing operations intact.
  • Lyonite Smallest: 4.28 MB, 91.45% smaller, still all 164.
  • iLovePDF, most aggressive: 5.79 MB, and 124 of the 164 operations.
  • PDF24: 0.38 MB — 99.24% smaller, and 112 operations.

PDF24 wins that by a distance, and it is worth being exact about how: its output is one 2242×2242 JPEG and a 0.02 MB page description. It converted the drawing into a photograph of the drawing. The text is still text, which is genuinely good; the artwork is now a fixed-resolution image that blurs when somebody zooms and cannot be re-scaled. That is their documented heavy-graphics rasterisation, and on a file like this it is enormously effective. No setting here does it, and that is the honest cost of our position.

We will flatten pages in exactly one situation. If you type a size into "Make it under" — only then — the panel works out what reaching it takes and tells you first: *about 6 of 48 pages will become images.* Only the heaviest pages go, as few as it takes to cross the line, and the words are laid back over each one invisibly, the way a searchable scan works, so the page stays selectable. What is genuinely lost is that page's sharpness under magnification and its place in the tag tree. The file then carries a two-kilobyte record naming which pages were flattened and at what resolution.

And we are slower. Balanced took 2.5 seconds on the tax form and 10.6 seconds on the Census report. Smallest took 6.1 seconds and 53.1 seconds on Publication 17, which is the slowest thing here. Two reasons, neither of them a defect: the work happens on your laptop rather than in a datacentre, and Smallest deliberately runs zopfli, because somebody asking for the smallest possible file has said they will wait for it. If you want a 200-page scan crushed in two seconds, upload it to somebody.

Smallest is not "lossless except for tags", and this report should not imply it is. On the CLIP paper it is the one Lyonite row that drops below our own 0.990 worst-page SSIM floor, at 0.9838 — visible detail, on one page, measured and printed. The claim is that it removes less than the alternatives and says what it removed, not that it removes nothing.

Ghostscript /screen is smaller than us on the CLIP paper, and it got there by deleting a page of charts and 4% of the text, so it sits in the table with that written next to it rather than counted as a win.

What we had to fix to get here

An earlier version of this report had us at 0% on Publication 17, and I told myself that was a draw because qpdf managed 0% too. It was not a draw. It was a bug in our own writer.

Load a PDF with our library, change nothing, save it again, and the file came out 0.8% to 9.1% larger than it went in. Everything the image pass, the font pass and the stream pass earned was being handed back at the door. Three causes, all library defaults rather than mistakes:

  • Fifty objects per object stream. A tagged PDF has roughly one object per structure element, so Publication 17's 70,588 objects became 1,400 separate compressed streams, each starting from nothing. Compression lives on repetition and structure elements are nearly identical to each other. Putting them together is worth 8 points on that file.
  • Deflating at the default level rather than the best one.
  • A cross-reference table with no predictor. It is a column of ascending byte offsets, the most predictable thing in the file. Written plainly on Publication 17 it is 147 KB. Written the way every other PDF writer writes it, 3 KB.

Then two things we simply were not doing. The CLIP paper embeds one 379 KB font program three times, byte for byte, because it was assembled from three LaTeX runs and nothing downstream ever looked; merging them is bookkeeping, not cleverness, and it is exactly lossless. And our recompression pass only looked at streams that were *already* compressed, so it skipped the least compressed bytes in the document — XMP metadata is conventionally stored as plain XML, and on the Census report that is 293 KB of 2.60 MB. I found that one by running qpdf over our own finished output to see whether it could still find anything. It kept finding 8%.

And one rule that looked like caution and was not. We built two candidates for every picture, a JPEG and a lossless one, and for anything the classifier called a chart or a screenshot we were only allowed to keep the lossless one. That is right when the file stored the image losslessly — a heatmap is Flate on purpose, and JPEG would trade its sharp edges for ringing. It is wrong when the file stored the image *as a JPEG*, because the detail was discarded before we opened it. The Census report is 45% pictures and its cover is an 8.4-megapixel photograph the classifier reads as a graphic, so we built it a lossless candidate, found it larger than the JPEG it started as, and kept the original untouched. That single rule was worth 33.84 points on that file.

A conservative-looking rule that has never been measured is not caution. It is just a rule.

Last, a thing we were doing only on the aggressive setting. PDF producers write coordinates at whatever precision their arithmetic landed on: in that reader's 50 MB file, an identity matrix is written 1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 and the page edge is 1121.280396. Six decimals of a PDF point is about four nanometres. Shortening those numbers happened to be part of detaching the tag tree, so only Smallest did it — for no reason, since it removes nothing and changes no operator. The default does it now. It is worth 9.24 points on the research paper, 4.53 on Publication 17 and 4.13 on the federal budget, and on that 50 MB drawing it takes the content stream from 24.3 MB to 15.2 MB before anything is even compressed.

Text placement stays at four decimals, for the reason under the limits below. Every page, character, tag, form field, link and bookmark still survives all five files.

The one column that cannot be tuned

Everything else on this page is a trade you could argue about. This one is not.

To use iLovePDF, PDF24 or Smallpdf you upload your document to a company's server. Whatever the retention policy says — iLovePDF's says two hours — the file left your machine, crossed a network, and sat on a disk you do not control. For a marketing brochure that is nothing. For a signed lease, a medical record, a contract under NDA, or the tax return in this very corpus, it is the whole question.

Our compressor runs in the page. There is no upload because there is no server to upload to, and that is verified rather than asserted: a script drives every tool on this site through a real browser with the network panel recording, and fails the build if any request carrying document bytes leaves the origin.

Ghostscript and qpdf are local too, and it is one of the two good reasons to use them.

Check it yourself in about a minute

Take any tagged PDF — one of the government documents linked in the tabs above, or something from your own work. Drop it into our compressor and read the line under the three settings. On the Census report it says:

  • *Text, links, forms and 34,802 accessibility tags are kept.*

Now compress that same file at iLovePDF or Smallpdf, download what they give you, and drop their file into our compressor. It reads:

  • *Text, links, forms and bookmarks are kept. This file has no accessibility tags in it.*

That is the whole claim of this page, reproduced on your own machine, without taking a single number here on trust. Do the same with PDF24's output and the 34,802 are still there.

It is also the check to run against us. Compress at Balanced, put our output back in, and the count should be unchanged. If it is not, that is a bug and I want to hear about it.

The longer version. Every file in the tables is a public document linked from its own tab, and the benchmark manifest records the size and SHA-256 of each, so you can confirm you are testing the same bytes I did. The checker is in the repo and takes a folder:

The three websites are the one part that is not scripted: they rewrite their own DOM, and a selector that works today is a broken measurement next month. Those uploads were done by hand, once, and the returned files went through the identical checks. Our own test files are at https://github.com/yorkzap/pdf-leak-corpus.

# every tool over a folder of PDFs, ours included
node scripts/compare-compressors.mjs ~/your-pdfs

# just ours, as a regression check
node scripts/compress-verify.mjs ~/your-pdfs

What this does not prove

Five documents is five documents. They were chosen to be different from one another — a vector-heavy paper, two tagged government reports, a fillable form, a long tagged guide — and not to flatter anybody. But a corpus this size finds behaviours, not frequencies. If you have a file that behaves differently, I would like it.

Our own text check has a blind spot, and something else had to find it. It compares the text from both files with the spaces taken out, so a file that lost a space still scores 100%. Two real documents did lose one, because we were rounding the numbers that position text on the page and the rounding closed a gap just enough that the extractor read two words as one. This page's checks would never have noticed. A separate run over sixty real PDFs, comparing character for character, did.

Smallpdf is measured on two files, not five. Its free tier allows two downloads per twelve hours and its stronger levels are paid. Its 77% on the Census report is a figure read off a result screen with no file behind it, which is exactly why it is not in the tables.

Defaults and strongest modes are different questions. The first table uses each tool's documented default; the second uses the strongest setting available for free and records what it cost. Paid-only settings were not purchased and are never replaced with guesses. And these are live services captured by hand on 27 August 2026, so every website result is a claim about one day and one configuration.

This is my own report about my own product, and we come out well in it. So: the checker is in the repo, all five inputs are public documents whose SHA-256 hashes are recorded in the manifest, and every figure in every table is read out of the JSON the checker writes rather than typed in by hand. Download the files and run it. If a number here does not reproduce, write to hello@lyonite.com and it gets corrected in public, usually within 48 hours.

Questions people ask about this

Does compressing a PDF lose quality?+

It depends what you count as quality. In a test of six compressors on five public documents on 27 August 2026, most outputs were indistinguishable from the original on screen and several were pixel-identical. What several of them lost was invisible: iLovePDF, Smallpdf and Ghostscript deleted the entire accessibility tag tree, which is the structure a screen reader uses to read the document. Ghostscript also lost text on four of the five files and emptied one page of its charts. So the picture usually survives compression; the document underneath it sometimes does not.

Does iLovePDF remove accessibility tags from a PDF?+

Yes. On 27 August 2026 I ran four tagged PDFs through iLovePDF's compressor on its default "Recommended" setting and every accessibility tag was gone from all four outputs — 1,236 in IRS Form 1040, 25,477 in the US federal budget, 34,802 in a Census Bureau report and 62,494 in IRS Publication 17. It also removes the catalogue entry, so the file no longer declares that it was ever tagged. On the federal budget it emptied the document's form field as well. The compress page's title reads "Same PDF quality less file size", which is true of what you can see on the page and silent about the structure underneath it.

Which PDF compressor does not lose quality?+

Of the six compressors tested on 27 August 2026, three returned all five documents with nothing missing — every page, character, accessibility tag, form field, link and bookmark: Lyonite on its Balanced default, PDF24, and qpdf. Lyonite produced the smallest file of the three on all five, beating PDF24 by 39.43 percentage points on IRS Form 1040 and 4.29 on the federal budget. qpdf compresses far less than either, because it only repacks streams and never touches images. iLovePDF, Smallpdf and Ghostscript compressed harder and removed the accessibility structure to do it.

Why did my PDF get bigger after compressing it with Ghostscript?+

Because Ghostscript rewrites a PDF rather than repacking it, and its rewrite is generous with objects and sparing with object streams. On a document whose bulk is tens of thousands of small structural objects — any tagged government report — the output can be far larger than the input. In my 27 August 2026 test it inflated three of five files: IRS Publication 17 went from 2.95 MB to 6.73 MB at /ebook, 128% larger, and to 135% larger at /printer. The same runs deleted all 62,494 accessibility tags and broke three links. Ghostscript is very effective on image-heavy PDFs and a poor choice for tagged documents.

How do I compress a PDF without uploading it anywhere?+

PDF compression is a local operation on the file's own objects and needs no server. Lyonite's compressor runs entirely in the browser tab, and the page is served with a Content-Security-Policy that only permits connections back to lyonite.com, so a request carrying the document elsewhere is refused by the browser rather than caught in review. On the desktop, qpdf and Ghostscript are local command-line tools. iLovePDF, Smallpdf and PDF24 all upload the file to their servers to process it.

How much smaller can a PDF get without losing anything?+

It depends almost entirely on what is inside the file. Across five public documents measured on 27 August 2026, a compressor that removed nothing at all managed 12.65% on a text-and-tables tax guide, 19.47% on the federal budget, 42.42% on IRS Form 1040, 51.13% on an image-heavy Census report and 65.79% on a research paper full of photographs. Files that are mostly photographs compress the most, because the pictures can be re-encoded. Files that are mostly text and structure compress the least, because there is little left to take once the streams are repacked — which is why a tool advertising a large fixed percentage on every document is usually removing something.

Corrections

Check this yourself. If I got it wrong, tell me.

Every number here came from files you can download and a checker you can run, so you do not have to take my word for any of it — clone the corpus and get your own result.

If it disagrees with mine, or if you build one of the tools named here and I measured it unfairly, out of date, or with a setting you would not have used, send it to hello@lyonite.com.

I reply within 48 hours. If you are right, the page is corrected with the date on it and your correction credited, and the old number stays visible so the change is legible. If a tool has since been fixed, that is the update I most want to publish. Nothing here is worth defending past the point it stops being true.

Keep reading

Technical references