Was ist ein linearisiertes PDF? Der technische Hintergrund schneller Webanzeige
7 Min. Lesezeit
Von zwei gleich großen PDFs öffnet sich das eine im Browser sofort, während das andere eine leere Seite zeigt, bis es vollständig geladen ist. Der Unterschied liegt nicht im Inhalt der Datei, sondern in der Anordnung der Objekte innerhalb der Datei. In diesem Beitrag erklären wir den Lesemechanismus von PDF, wie die Linearisierung diesen Mechanismus umkehrt und wozu Hinweistabellen dienen.
Warum PDF vom Ende her gelesen wird
Am Ende einer PDF-Datei stehen diese drei Dinge:
startxref
1247893
%%EOF
Die Zeile startxref gibt an, an welchem Byte der Datei die Querverweistabelle beginnt. Das Erste, was ein Betrachtungsprogramm beim Öffnen eines PDFs tut, ist, die letzten paar Hundert Bytes zu lesen und diese Zahl zu finden.
Danach springt es zu diesem Byte und liest die xref-Tabelle. Diese Tabelle listet die Nummer jedes Objekts der Datei und das Byte, an dem es beginnt. Auf die Tabelle folgt außerdem ein Trailer-Wörterbuch; dort steht die Nummer des Katalogobjekts.
Nun kann das Programm den Katalog finden. Vom Katalog gelangt es zum Seitenbaum, von dort zum Objekt der ersten Seite und weiter zum Inhaltsstrom und den verwendeten Ressourcen. Diese Ressourcen können irgendwo in der Datei liegen – die Schrift der ersten Seite in der Mitte, ihr Bild gegen Ende.
Dieser Entwurf hat einen Grund: die inkrementelle Aktualisierung. Wird ein PDF geändert, muss nicht die gesamte Datei neu geschrieben werden; die Änderungen werden hinten angehängt und eine neue xref-Tabelle geschrieben. Die neue Tabelle verweist auf die alte und sagt: "Für das Unveränderte schau dort nach." Die Datei wächst, doch der Vorgang ist schnell, und die alte Fassung bleibt in der Datei erhalten. Auch die Funktionsweise digitaler Signaturen beruht darauf.
Der Preis lautet: Sie müssen das Ende sehen, bevor Sie irgendeinen Teil der Datei lesen können.
Warum das über das Netz ein Problem ist
Auf der lokalen Festplatte gilt der Sprung ans Dateiende als kostenlos. Über das Netz sieht es anders aus.
Fordert ein Browser ein PDF vom Server an, beginnt der Server, die Datei von vorne zu senden. Die Information, die das Betrachtungsprogramm braucht, steht jedoch ganz am Ende. Um die erste Seite zeichnen zu können, muss also in der Praxis die gesamte Datei geladen werden.
Ein Katalog mit 50 MB lädt über eine Verbindung mit 10 Mbps rund 40 Sekunden. Der Nutzer sieht diese 40 Sekunden lang auf eine leere Seite. Die meisten Nutzer warten nicht.
Die Linearisierung kehrt die Anordnung um
Ein linearisiertes PDF ist so aufgebaut:
| Position | Inhalt |
|---|---|
| Dateianfang | Wörterbuch der Linearisierungsparameter (/Linearized) |
| Unmittelbar danach | xref-Tabelle und Trailer der ersten Seite |
| Danach | Alle Objekte der ersten Seite (Inhalt, Schrift, Bild) |
| Danach | Hinweistabellen (Hint Tables) |
| Danach | Die Objekte der übrigen Seiten in Seitenreihenfolge |
| Dateiende | Die Haupt-xref-Tabelle (aus Kompatibilitätsgründen) |
Das Parameterwörterbuch ganz am Dateianfang sagt: Diese Datei ist linearisiert, ihre Gesamtlänge beträgt so viel, die Objekte der ersten Seite reichen bis zu diesem Byte, und die Hinweistabellen beginnen dort.
Dadurch verfügt das Betrachtungsprogramm in dem Moment, in dem es die ersten paar Hundert Kilobyte der Datei erhalten hat, über alles, was zum Zeichnen der ersten Seite nötig ist. Der Nutzer beginnt zu lesen, während der Download weiterläuft.
Hinweistabellen: die Struktur, die das Springen ermöglicht
Der zweite und vielleicht wertvollere Nutzen der Linearisierung besteht darin, direkt zur gewünschten Seite springen zu können.
Möglich machen das die Hinweistabellen. Es gibt zwei davon:
Seiten-Offset-Hinweistabelle (Page Offset Hint Table): Sie listet für jede Seite auf, ab welchem Byte deren Objekte in der Datei beginnen und wie viele Bytes sie umfassen. Springt der Nutzer auf Seite 147, sieht das Programm in dieser Tabelle nach, erhält die Information "Seite 147 liegt zwischen den Bytes 8.234.100 und 8.291.000" und fordert vom Server nur diesen Bereich an.
Hinweistabelle für gemeinsam genutzte Objekte (Shared Object Hint Table): Sie listet die von mehreren Seiten gemeinsam verwendeten Ressourcen auf – etwa im gesamten Dokument genutzte eingebettete Schriften oder ein auf jeder Seite wiederkehrendes Logo. Benötigt Seite 147 einige davon, erfährt das Programm auch deren Bytebereich hier.
Das Ergebnis: In einer Datei mit 500 Seiten und 80 MB genügt es, wenige Hundert Kilobyte zu laden, um Seite 147 zu sehen.
Byte-Range: die Voraussetzung auf der Serverseite
Der beschriebene Mechanismus setzt voraus, dass der Browser dem Server sagen kann: "Gib mir die Bytes 8.234.100 bis 8.291.000 dieser Datei." In HTTP geschieht das über den Range-Header, und der Server muss mit 206 Partial Content antworten.
Nahezu alle modernen Webserver unterstützen das bei statischen Dateien, und meist ist es standardmäßig aktiviert. In folgenden Fällen funktioniert es jedoch nicht:
- Wird die Datei dynamisch erzeugt (erstellt ein Anwendungsserver das PDF im Moment der Anfrage), wird Byte-Range meist nicht unterstützt.
- Wird die Antwort mit gzip komprimiert, werden Bytebereiche sinnlos. Weil PDFs intern bereits komprimiert sind, ist zusätzliches gzip auf dem Server nicht nur überflüssig, sondern verursacht genau dieses Problem.
- Manche CDN- oder Proxy-Konfigurationen leiten Bereichsanfragen womöglich nicht weiter.
Trifft eine dieser Bedingungen zu, muss der Browser die gesamte Datei laden, selbst wenn sie linearisiert wurde, und der Nutzen entfällt.
Was die Linearisierung nicht ändert
Dieser Punkt muss klargestellt werden, denn es gibt ein verbreitetes Missverständnis:
Die Dateigröße. Die Linearisierung entfernt keinen Inhalt und kodiert kein Bild neu. Weil Hinweistabellen hinzukommen, wächst die Datei typischerweise um 1–2 %. Wollen Sie sie verkleinern, ist eine Komprimierung nötig.
Die Bildqualität. Kein einziges Pixel ändert sich.
Text, Schriften, Layout. Nichts davon ist betroffen.
Die Öffnungsgeschwindigkeit lokal. Liegt die Datei bereits auf der Festplatte, spielt die Anordnung keine Rolle; eine linearisierte Datei öffnet sich lokal nicht schneller.
Wann die Linearisierung zerstört wird
Eine linearisierte Datei kann diese Eigenschaft verlieren, sobald sie bearbeitet wird:
Jeder Vorgang mit inkrementeller Aktualisierung zerstört sie. Eine Anmerkung hinzufügen, ein Formularfeld ausfüllen, digital signieren – die meisten dieser Vorgänge hängen die Änderungen ans Dateiende an. Die Datei bleibt gültig, doch das Betrachtungsprogramm muss nun wieder ans Ende schauen, um den aktuellen Stand zu erfahren; das Versprechen der Linearisierung entfällt.
Auch Vorgänge mit vollständigem Neuschreiben zerstören sie: Komprimieren, Seiten einfügen oder löschen, Zusammenführen, Aufteilen. Diese erzeugen die Datei von Grund auf neu, und die besondere linearisierte Anordnung bleibt nicht erhalten.
Die praktische Folgerung: Die Linearisierung muss der letzte Schritt des Arbeitsablaufs sein. Komprimieren, bearbeiten, signieren – tun Sie, was immer nötig ist, und linearisieren und veröffentlichen Sie erst ganz zum Schluss.
Wie man es überprüft
Der einfachste Weg herauszufinden, ob eine Datei linearisiert ist, führt über die ersten Bytes der Datei. In einem linearisierten PDF sieht das erste Objekt etwa so aus:
1 0 obj
<< /Linearized 1 /L 1247893 /O 6 /E 45231 /N 120 /T 1247100 >>
endobj
Der Schlüssel /Linearized 1 ist der unmittelbare Beweis. /N gibt die Gesamtzahl der Seiten an, /L die Dateilänge und /O die Nummer des Objekts der ersten Seite.
Um es unter realen Bedingungen zu testen, laden Sie die Datei auf einen Server und öffnen sie in den Entwicklerwerkzeugen des Browsers mit simulierter langsamer Verbindung. Bei einer linearisierten Datei erscheint die erste Seite, bevor der Download abgeschlossen ist.
Zusammengefasst
PDF legt die Querverweistabelle ans Dateiende, um inkrementelle Aktualisierungen zu ermöglichen; beim Lesen über das Netz bedeutet das, auf die gesamte Datei warten zu müssen. Die Linearisierung kehrt die Anordnung um: Alles zur ersten Seite wandert an den Anfang, gefolgt von Hinweistabellen, die angeben, wo jede Seite liegt. So erscheint die erste Seite sofort, und man kann direkt zur gewünschten Seite springen – vorausgesetzt, der Server unterstützt Byte-Range-Anfragen. Der Vorgang verkleinert die Datei nicht, ändert die Qualität nicht und beschleunigt das lokale Öffnen nicht. Er ist nur bei großen, im Web veröffentlichten Dateien sinnvoll und sollte als letzter Schritt erfolgen, weil er durch jede weitere Bearbeitung der Datei zerstört wird.
Häufig gestellte Fragen
Warum muss ein Betrachtungsprogramm bei einem normalen PDF ans Dateiende schauen?
Weil das PDF-Format die Querverweistabelle (xref), die angibt, wo im Dokument die Objekte liegen, ans Dateiende setzt. Diese Entwurfsentscheidung ermöglicht inkrementelle Aktualisierungen: Neue Änderungen werden hinten angehängt und eine neue xref geschrieben, ohne die alte zu beschädigen. Der Preis dafür ist, dass man beim Lesen am Ende beginnen muss.
Was genau enthält eine Hinweistabelle (Hint Table)?
Es gibt zwei Haupttabellen. Die Seiten-Offset-Hinweistabelle gibt an, in welchem Bytebereich der Datei die Objekte jeder Seite liegen. Die Hinweistabelle für gemeinsam genutzte Objekte gibt an, wo die von mehreren Seiten gemeinsam verwendeten Ressourcen (Schriften, wiederkehrende Bilder) liegen. Springt das Betrachtungsprogramm zu einer Seite, sieht es in beiden Tabellen nach und fordert nur die benötigten Bytebereiche an.
Lässt sich eine linearisierte Datei auch in normalen Betrachtungsprogrammen öffnen?
Ja, ohne Einschränkung. Die Linearisierung ist Teil des Standards, und eine linearisierte Datei ist zugleich ein gültiges normales PDF; am Dateiende findet sich weiterhin eine xref-Tabelle. Ein Programm, das die Linearisierung nicht kennt, liest die Datei auf klassischem Weg und hat damit keinerlei Probleme. Der Vorteil geht verloren, die Kompatibilität bleibt bestehen.
Warum zerstört eine inkrementelle Aktualisierung die Linearisierung?
Weil das Grundversprechen der Linearisierung lautet, dass alles zum Zeichnen der ersten Seite Nötige am Dateianfang liegt. Eine inkrementelle Aktualisierung hängt die Änderungen ans Dateiende an und schreibt eine neue xref; nun muss das Betrachtungsprogramm wieder ans Ende schauen, um den aktuellen Stand zu kennen. Die Datei bleibt gültig, doch die Garantie der schnellen Webanzeige entfällt.
Probieren Sie es gleich mit Web İçin Optimize Et aus.
Web İçin Optimize Et ausprobieren