Was beim Komprimieren einer PDF wirklich passiert
PDF123 Komprimieren führt qpdf-Stream-Rekompression und Objekt-Stream-Packing aus, nicht Bild-Downsampling, verlustbehaftete JPEG-Neukodierung oder Font-Subsetting. Die Linearisierung ändert die Dateigröße kaum.

Zwei PDF-Dateien können auf dem Bildschirm identisch aussehen und trotzdem um drei Größenordnungen auseinanderliegen: 50 KB gegen 50 MB. Der Unterschied steckt fast nie in den Textoperatoren. In einem zwanzigseitigen Vertrag machen sie selten mehr als ein paar Dutzend Kilobyte aus; alles andere sind Bildproben, ein vollständig eingebettetes Schriftprogramm und die Frage, wie dicht Streams und Objekte gepackt sind.
Das hat eine Konsequenz, die man früh aussprechen sollte: „Eine PDF komprimieren“ ist keine einzelne Aktion, sondern vier. Sie verkleinern unterschiedliche Dinge und verlangen unterschiedliche Preise. Wer sie als eines behandelt, sammelt widersprüchliche Erfahrungen: Die Datei wurde komprimiert und ist nicht kleiner geworden, oder sie ist kleiner geworden und die Seiten haben an Schärfe verloren.
Woher die Größe kommt
Die meisten Fälle von „Warum ist diese PDF so groß?“ beginnen mit einem hochauflösenden Scan oder Foto, das noch in Aufnahmeauflösung eingebettet ist. Die Rechnung lohnt sich einmal: Eine Letter-Seite mit 8,5 × 11 Zoll bei 300 DPI ergibt etwa 2550 × 3300 Pixel, und bei drei Byte pro Pixel sind das unkomprimiert rund 25 MB. Zwanzig solcher Seiten landen oft bei 60 bis 80 MB, bevor überhaupt jemand eine Kompression anfasst.
Die zweite Quelle sind Schriftarten. Eine PDF kann ein vollständiges Schriftprogramm einbetten, damit jede Maschine den Text identisch rendert, und dieser Aufwand wird über die Größe der Glyphentabellen bezahlt, nicht danach, wie viel Text tatsächlich gelesen wird. Deshalb ist Font-Subsetting ein eigener Größenhebel.
Die dritte Quelle ist das Packen selbst. Derselbe Inhalt kann mit verschwenderischen Kompressionseinstellungen gespeichert sein, oder seine Objekte liegen verstreut in der Datei, jedes mit eigenem Verwaltungsaufwand. Nichts davon ändert einen Pixel oder eine Glyphe, und genau dieser Teil ist es, den Stream-Rekompression erreichen kann.
Hinter „Komprimieren“ stehen vier verschiedene Hebel
Auf die Größe wirken vier Hebel. Sie greifen an unterschiedlichen Schichten an, und ihre Kosten überschneiden sich kaum. Den falschen zu wählen ist der häufigste Grund, warum ein Kompressionslauf scheinbar nichts bewirkt.
| Hebel | Was er anfasst | Größenersparnis | Preis |
|---|---|---|---|
| Stream-Rekompression und Objekt-Streams | Wie Inhaltsstreams komprimiert, wie Objekte gespeichert und gepackt werden | Hängt davon ab, wie lose die Ausgangsdatei war | Erscheinungsbild der Seiten unverändert |
| Bild-Downsampling | Die Pixelzahl, also die Auflösung | Groß | Auflösung dauerhaft reduziert |
| Verlustbehaftete Bild-Neukodierung | Die Byte-Darstellung der Bitmap | Groß | Bildqualität reduziert |
| Font-Subsetting | Die eingebetteten Glyphentabellen | Mittel | Nicht verwendete Glyphen sind nicht mehr editierbar |
| Linearisierung | Die Reihenfolge der Objekte | Nahe null | Erkauft stattdessen die Ladezeit der ersten Seite |
Die ersten vier Zeilen werden landläufig alle „Kompression“ genannt, doch nur die erste lässt den Inhalt unangetastet. Ihr Nutzen ist zugleich am leichtesten falsch einzuschätzen: Ein Scan, dessen Größe überwiegend aus rohen Bildproben besteht, hat kaum Redundanz, die sie entfernen könnte. Die Hebel, die ihn deutlich schrumpfen würden, sind Downsampling und verlustbehaftete Neukodierung, und der Preis dafür ist, diese Auflösung und Qualität dauerhaft zu verlieren.
Welchen der vier Hebel PDF123 Komprimieren zieht
PDF komprimieren (POST /api/v1/misc/compress-pdf) zieht nur die erste Zeile. Es ruft qpdf auf, komprimiert unkomprimierte Streams (--compress-streams=y), legt einen zweiten Durchgang über bereits mit Flate komprimierte Streams (--recompress-flate) und packt Objekte in Objekt-Streams (--object-streams=generate).
Es betreibt kein Downsampling von Bildern, kodiert Bitmaps nicht in eine niedrigere JPEG-Qualität um und subsettet keine Schriften. Die Seiten sollten gleich aussehen, und die Einsparung stammt aus der Flate-Rekompression und dem Packen der Objekt-Streams.
Die Fehlerbedingung verdient dieselbe Klarheit. Besteht die Größe einer Datei überwiegend aus Bilddaten, die bereits als JPEG komprimiert sind, hat Flate nichts mehr zusammenzupressen, weil diese Bildbytes außerhalb dessen liegen, was die drei Schalter oben anfassen. Deshalb kann ein Scan-Paket nur wenige Prozent kleiner zurückkommen, während eine textlastige PDF ähnlicher Größe spürbar mehr gewinnt.
Der umgekehrte Weg ist PDF dekomprimieren, das Streams zur Inspektion entpackt (--qdf, Objekt-Streams deaktiviert) und das Aussehen der Seiten ebenfalls nicht verändert.
Wann ein anderer Weg der richtige ist
| Was Sie brauchen | Der richtige Weg |
|---|---|
| Identisches Erscheinungsbild, nur den Packungsaufwand entfernen | Komprimieren |
| Ein Scan-Paket, das wirklich zu groß ist und Qualitätsverlust akzeptabel ist | Downsampling oder verlustbehaftete Neukodierung, nicht dieses Komprimieren |
| Weiterhin editierbar, aber das nächste Zeichen tippt nicht | Andere Exporteinstellungen oder Quelldatei, siehe Font-Subsetting |
| Der Browser soll Seite eins früher sehen | Linearisierung löst das erste Bild, nicht die Größe |
| Die Datei lässt sich gar nicht öffnen | Reparieren, ein strukturelles Problem, kein Größenproblem |
Eine Falle steckt in der letzten Zeile: PDF linearisieren ist hier keine eigene Implementierung, sondern ein Alias von Komprimieren. Beide zeigen auf dieselbe Operation, die kanonische ID lautet misc/compress-pdf mit linearize-pdf als Alias, das Portal sendet für dieses Werkzeug immer linearize=true und optimizeLevel=1, der Server liest keines der beiden Felder, und qpdf bekommt nie --linearize übergeben. Die Operation, die eine Datei tatsächlich linearisiert, ist Schützen, wenn sie verschlüsselt.
Wenn Sie also dasselbe Erscheinungsbild in einer kleineren Datei wollen, ist Komprimieren die ganze Antwort. Wollen Sie verlustbehaftete Bildverkleinerung oder Font-Subsetting, ist dieser Weg der falsche Hebel. Die Datei kommt direkt zurück, ohne Konto. Wo Objekte, Streams und die Querverweistabelle tatsächlich liegen, zeigt die Fortsetzung Was in einer PDF steckt.