Wie funktioniert das Extrahieren von PDF-Seiten? Objektbaum und gemeinsame Ressourcen
7 Min. Lesezeit
Was geschieht im Hintergrund, wenn Sie drei Seiten aus einem PDF extrahieren? Es werden keine Seiten ausgeschnitten und eingeklebt, denn in PDF ist eine "Seite" kein einteiliges Gebilde. In diesem Beitrag sehen wir uns den inneren Aufbau des Formats an und erklären, warum der Vorgang so schnell ist, warum die extrahierte Datei manchmal unerwartet groß bleibt und warum mit Lesezeichen und Verweisen etwas geschieht.
Das Innere von PDF: Objekte und Verweise
Eine PDF-Datei ist eine Sammlung nummerierter Objekte. Jedes Objekt hat eine Nummer, und die Objekte verweisen über diese Nummern aufeinander. Grob gesagt findet man Folgendes:
- Katalog: Das Wurzelobjekt des Dokuments. Es sagt: "Der Seitenbaum liegt in jenem Objekt, die Gliederung in diesem."
- Seitenbaum: Eine Baumstruktur, die die Seiten in ihrer Reihenfolge führt.
- Seitenobjekte: Jedes steht für ein Blatt. Es enthält keinen Inhalt, sondern Verweise: "Mein Inhalt liegt in jenem Objekt, meine Ressourcen in diesem, meine Größe ist die."
- Inhaltsstrom (Content Stream): Die Befehlsfolge, die beschreibt, wie die Seite zu zeichnen ist.
- Ressourcenobjekte: Schriften, Bilder, Farbprofile, Transparenzgruppen.
Der entscheidende Punkt: Das Seitenobjekt beherbergt den Inhalt nicht, es verweist auf ihn. Und mehrere Seiten können auf dieselbe Ressource verweisen. Eine im Dokument verwendete eingebettete Schrift ist ein einziges Objekt; alle 300 Seiten verweisen darauf. Steht ein Firmenlogo auf jeder Seite, gibt es in der Datei ein einziges Bildobjekt, auf das 300 Seiten schauen.
Diese gemeinsame Nutzung ist der grundlegende Mechanismus, der PDFs in vernünftiger Größe hält – und, wie wir gleich sehen werden, zugleich der Grund für Größenüberraschungen nach dem Extrahieren.
Was das Extrahieren Schritt für Schritt tut
Wenn Sie sagen "Extrahiere die Seiten 10 bis 12", tut das Werkzeug Folgendes:
1. Es durchläuft den Seitenbaum und findet die Seitenobjekte an den gewünschten Indizes.
2. Es verfolgt die Abhängigkeiten. Von jedem ausgewählten Seitenobjekt ausgehend folgt es allem, was damit verbunden ist: dem Inhaltsstrom, den von diesem Strom genutzten Schriften, Bildern, Farbräumen, Anmerkungen und Formularfeldern. Das ist wie eine Erreichbarkeitssuche in einem Graphen – man beginnt an der Wurzel und markiert alle erreichbaren Knoten.
3. Es kopiert die erreichbaren Objekte in die neue Datei. Beim Kopieren werden die Objektnummern neu vergeben, denn in der neuen Datei beginnt die Nummerierung bei null. Die Verweise werden entsprechend aktualisiert.
4. Es legt einen neuen Katalog und Seitenbaum an. Im neuen Seitenbaum stehen nur drei Seiten, und sie sind der Reihe nach angeordnet.
5. Es schreibt die Querverweistabelle (xref) neu. Diese Tabelle gibt an, an welchem Byte der Datei jedes Objekt beginnt; sie erspart es dem Betrachter, für das Auffinden eines Objekts die gesamte Datei zu durchsuchen.
In keinem dieser Schritte findet Bildverarbeitung statt. Kein JPEG wird neu kodiert, kein Text neu gezeichnet. Der Vorgang ist im Kern ein Kopieren und Neunummerieren – deshalb ist er sehr schnell, und der Qualitätsverlust liegt garantiert bei null.
Die Erklärung der Größenüberraschung
Kommen wir nun zur häufigsten Frage: Sie haben aus einer 300-seitigen Datei mit 40 MB zwei Seiten extrahiert, und das Ergebnis hat 4 MB. Warum?
Die Antwort liegt im zweiten Schritt: der Abhängigkeitsverfolgung. Verwendet die extrahierte Seite die im Dokument eingebettete Schrift, muss dieses Schriftobjekt in die neue Datei kopiert werden. Eine vollständige Schriftfamilie mit breiter Zeichenunterstützung (normal, fett, kursiv, fett-kursiv) beansprucht mühelos 2–3 MB. Liegt auf der Seite ein ganzseitiges Foto, wandert auch dieses unverändert mit.
| Ressourcenart | Auswirkung auf die extrahierte Datei | |---|---| | Eingebettete Schrift (vollständig) | Wird vollständig übernommen, kann mehrere MB umfassen | | Eingebettete Schrift (Teilmenge) | Die Teilmenge wird übernommen, kleiner | | Bilder auf der Seite | Werden unverändert übernommen, die Qualität bleibt gleich | | ICC-Farbprofil | Wird übernommen, einige Hundert KB | | Nicht verwendete Ressourcen | Werden nicht übernommen, sondern verworfen |
Manche Werkzeuge gehen einen Schritt weiter und bilden für die eingebettete Schrift eine "neue Teilmenge" – sie behalten also nur die auf den extrahierten Seiten vorkommenden Zeichen. Das bringt eine erhebliche Verkleinerung, ist aber ein aufwendigerer Vorgang, den nicht jedes Werkzeug beherrscht.
Ist die Größe für Sie entscheidend, ist die praktische Lösung einfach: Schicken Sie die Datei nach dem Extrahieren einmal durch ein Komprimierungswerkzeug. Die Komprimierung verwirft ungenutzte Ressourcen, kodiert Bilder neu und komprimiert die Ströme erneut.
Was mit Lesezeichen und Verweisen geschieht
Der Gliederungsbaum (Outline) des Dokuments lebt auf Katalogebene, und jeder Eintrag verweist auf ein Ziel: "Kapitel 3 → Seitenobjekt 147".
Extrahieren Sie 3 Seiten, zeigen nahezu alle Einträge dieses Baums auf Seiten, die nicht mehr in der Datei sind. Ein Lesezeichen mit kaputtem Ziel tut beim Anklicken nichts oder lässt den Betrachter einen Fehler melden. Manche Werkzeuge versuchen, die überlebenden Einträge herauszufiltern und zu übernehmen; das Ergebnis ist meist ein Baum aus zwei Überschriften mit zerrissener Hierarchie, der mehr Verwirrung als Nutzen stiftet. Deshalb verwerfen viele Anwendungen die Gliederung lieber vollständig.
Dieselbe Logik gilt für interne Verweise. Ist das Ziel eines Verweises wie "siehe Anhang B" nicht mit extrahiert worden, bricht der Verweis. Dagegen funktionieren externe Verweise (URI-Aktionen auf eine Webadresse) problemlos weiter, weil sie an keine Seite gebunden sind.
Formularfelder befinden sich in einem interessanten Zwischenzustand. Das Feld selbst ist eine an die Seite gebundene Anmerkung und wird daher übernommen. Doch das Feldwörterbuch des Formulars (AcroForm) liegt auf Dokumentebene und kann Berechnungs- oder Prüflogik zwischen Feldern enthalten. Extrahieren Sie einen Teil eines mehrseitigen Formulars, sind die Felder sichtbar, doch die Logik kann zerrissen sein.
Das Dilemma der Seitenzahlen
In Ihrer extrahierten Datei beginnt der Seitenzähler bei 1 – das ergibt sich aus der Reihenfolge im Seitenbaum. Doch die auf der Seite gedruckte Zahl "47" ist Teil des Inhaltsstroms: ein Textzeichenbefehl. Weil das Extrahieren den Inhaltsstrom nicht antastet, bleibt diese Zahl unverändert stehen.
Unter dem ersten Blatt Ihrer neuen Datei kann also "47" stehen. Das ist kein Fehler, sondern eine natürliche Folge des Formats. Wollen Sie es korrigieren, gibt es zwei Wege: eine neue Nummerierung aufbringen (die neben der alten Zahl erscheint) oder die alte mit einem Bearbeitungswerkzeug durch einen weißen Kasten überdecken und eine neue Zahl hinzufügen.
In manchen PDFs gibt es zudem Definitionen für Seitenbeschriftungen (Page Labels) – eine Struktur auf Dokumentebene, die den Betrachter im Seitenfeld besondere Bezeichnungen wie "iv" oder "A-3" anzeigen lässt. Diese werden beim Extrahieren meist nicht übernommen.
Warum das im Browser möglich ist
Keiner der genannten Schritte erfordert aufwendige Berechnungen. Objekte lesen, Abhängigkeiten verfolgen, neu nummerieren und schreiben – all das sind Speicher- und Dateioperationen. Ein moderner Browser erledigt das selbst bei Dateien mit einigen Hundert Seiten rasch.
Die praktische Folge: Ihre Datei gelangt auf keinen Server. Wenn Sie aus einem vertraulichen Vertrag die Unterschriftsseiten extrahieren oder aus einem Arztbericht das betreffende Blatt heraustrennen, verlässt das Dokument Ihr Gerät nicht. Und weil kein Warten auf Upload und Download entsteht, ist der Vorgang unabhängig von der Dateigröße schnell.
Die Grenze ist der Speicher, den ein Browsertab nutzen kann. Bei sehr großen Dateien (Hunderte Megabyte, Tausende hochauflösende Seiten) kann es zu Speicherdruck kommen; dann erleichtert es die Arbeit, die Datei zunächst grob aufzuteilen und erst danach zu extrahieren.
Zusammengefasst
Das Extrahieren von Seiten bedeutet, im Objektgraphen des PDFs eine Erreichbarkeitssuche durchzuführen und alles, was mit den ausgewählten Seiten verbunden ist, in eine neue Datei zu kopieren. Weil kein Inhalt neu kodiert wird, liegt der Qualitätsverlust bei null und der Vorgang ist sehr schnell. Weil jedoch gemeinsam genutzte Ressourcen (insbesondere eingebettete Schriften) mit übernommen werden müssen, kann die Ausgabe unverhältnismäßig groß bleiben; eine Komprimierung löst das. Lesezeichen, interne Verweise und Seitenbeschriftungen, die auf Dokumentebene leben, überstehen diesen Vorgang naturgemäß nicht – ihre Ziele liegen nicht mehr in der Datei.
Häufig gestellte Fragen
Sinkt beim Extrahieren von Seiten die Bildqualität?
Nein, überhaupt nicht. Der Extraktionsvorgang kodiert keine Bilder neu; er kopiert den Inhaltsstrom der Seite und die damit verbundenen Objekte unverändert in die neue Datei. Ein JPEG-Bild bleibt, was es war, und Text bleibt vektorbasiert. Das ist der grundlegende Unterschied zur Komprimierung – dort können Bilder neu kodiert werden und die Qualität sinken.
Warum belegen 2 Seiten, die ich aus einer 300-seitigen Datei extrahiert habe, 4 MB?
Weil diese beiden Seiten von auf Dokumentebene gemeinsam genutzten Ressourcen abhängen können. Eine eingebettete Schriftfamilie allein kann mehrere Megabyte beanspruchen, und solange diese Schrift auf der Seite verwendet wird, muss sie in die neue Datei übernommen werden. Dasselbe gilt für Farbprofile und hochauflösende Bilder auf der Seite. Ein Komprimierungswerkzeug hilft in diesem Fall meist.
Ist es ein Mangel oder eine technische Notwendigkeit, dass Lesezeichen nicht übernommen werden?
Beides zugleich. Lesezeichen werden auf Dokumentebene in einem Gliederungsbaum (Outline) gespeichert, und jeder Eintrag verweist auf eine Seite. Weil die meisten dieser Seiten in der extrahierten Teilmenge fehlen, zeigt der Großteil der Einträge auf kaputte Ziele. Manche Werkzeuge versuchen, die überlebenden Einträge zu übernehmen, doch weil das Ergebnis meist unvollständig und verwirrend ist, verwerfen viele Anwendungen die Gliederung lieber vollständig.
Wie kann das Extrahieren im Browser laufen – braucht es keinen Server?
Nein, denn der Vorgang ist rechnerisch leicht. Er besteht darin, Objekte zu lesen, in eine neue Datei zu schreiben und die Verweise neu zu nummerieren; es findet keine Bildverarbeitung und keine Neukodierung statt. Moderne Browser bewältigen das selbst bei Dateien mit einigen Hundert Seiten mühelos, und die Datei verlässt das Gerät überhaupt nicht.
Probieren Sie es gleich mit Sayfa Çıkar aus.
Sayfa Çıkar ausprobieren