Ein PDF erstellen, das größer ist als Deutschland
(alexwlchan.net)- Die im Internet verbreitete Angabe „maximale PDF-Größe 381 km × 381 km“ stammt nicht von einer Grenze des PDF-Formats selbst, sondern von einer Implementierungsbeschränkung in Adobe Acrobat 7.0
- Seit PDF 1.6 lässt sich mit
/UserUnitdie Basiseinheit von 1/72 Zoll vergrößern, und der Maximalwert75.000in Acrobat 7.0 erzeugt eine Obergrenze von15.000.000 Zoll - Ein von Hand erstelltes PDF besteht aus
%PDF-1.6, einer Objektliste,xref,trailer,startxrefund%%EOF; die Seitengröße wird durch die Kombination aus/MediaBoxund/UserUnitbestimmt - Acrobat zeigt auch dann 15.000.000 Zoll an, wenn
/MediaBox14.400 oder/UserUnit75.000 überschreitet; Werte über/UserUnithinaus werden ohne Warnung ignoriert - macOS Preview.app ignoriert
/UserUnit, setzt aber im Gegensatz zu Acrobat keine vergleichbare Obergrenze für/MediaBox, sodass sich sogar Dateien erzeugen lassen, die wie ein PDF größer als das Universum erscheinen
Woher kommt die Grenze von 381 km?
- Die Behauptung, ein PDF-Dokument könne maximal 381 km × 381 km groß sein, kursiert seit Langem immer wieder im Internet
- Diese Zahl ist keine Grenze des PDF-Formats, sondern geht auf eine Implementierungsbeschränkung von Adobe Acrobat zurück
- Laut der PDF-1.7-Spezifikation lassen sich die Beschränkungen der Seitengröße so zusammenfassen
- Vor PDF 1.6 war die Basiseinheit des User Space fest auf 1/72 Zoll gesetzt
- Seit Acrobat 5.0 beträgt der maximale Standard-Seitenwert
14.400 × 14.400Einheiten, also 200 × 200 Zoll - Ab PDF 1.6 kann die Größe der Basiseinheit des User Space über
/UserUnitim Seitenverzeichnis festgelegt werden - Acrobat 7.0 unterstützt für
/UserUnitden Maximalwert75.000, wodurch eine maximale Seitenabmessung von 15.000.000 Zoll möglich wird
15.000.000 Zollentsprechen etwa 381 km, und die Formulierung „PDF version 7“ bezog sich offenbar nicht auf die PDF-Version, sondern auf Adobe Acrobat 7.0
Grundstruktur eines von Hand erstellten PDFs
- Eine PDF-Datei hat am Anfang eine Versionsnummer und am Ende eine EOF-Markierung
- Beispiel:
%PDF-1.6 - Endmarkierung:
%%EOF
- Beispiel:
- Auf die Versionsnummer folgt eine Objektliste, die Seiten, Text, Grafiken usw. beschreibt
xrefist eine Querverweistabelle, die die Positionen der Objekte angibt- Ein PDF-Reader prüft, wie viele Bytes jedes Objekt vom Dateianfang entfernt ist
trailerenthält Metadaten für das gesamte Dokument- Anzahl der Seiten
- Ob das Dokument verschlüsselt ist
- Das Root-Objekt des Dokuments
startxrefzeigt auf die Startposition derxref-Tabelle- Ein PDF-Reader sucht am Dateiende nach dem Wert von
startxrefund springt dann zurxref-Tabelle
- Ein PDF-Reader sucht am Dateiende nach dem Wert von
- Mit Bezug auf den Artikel How to create a simple PDF file lässt sich ein PDF mit einem roten Rechteck von Hand erstellen
Objekte und Seitendefinition
- Das Beispiel-PDF besteht aus vier zentralen Objekten
- Objekt 1: ein stream-Objekt, das ein rotes Rechteck zeichnet
- Objekt 2: ein
Page-Objekt, das eine einzelne Seite definiert - Objekt 3: ein
Pages-Objekt mit Informationen über mehrere Seiten - Objekt 4: ein
Catalog-Objekt, das die grundlegende Struktur des Dokuments bereitstellt
- Das
Page-Objekt verknüpft den Seiteninhalt über Verweise auf andere Objekte1 0 Rverweist auf Objekt Nummer 1, Generation 03 0 Rverweist auf dasPages-Objekt, also die Seitensammlung
- Wenn man ein PDF von Hand schreibt, ist es sehr mühsam, bei jeder Änderung der Objektpositionen die Werte in der
xref-Tabelle neu anzupassen - In einem Update vom 16. April 2025 wurde der Beispielcode korrigiert, weil
xref 0 4falsch war- Da die tatsächliche Querverweistabelle 5 Einträge enthält, muss es
xref 0 5heißen
- Da die tatsächliche Querverweistabelle 5 Einträge enthält, muss es
Eine Seite mit /MediaBox und /UserUnit vergrößern
- Die Seitengröße eines PDFs wird in jedem
Page-Objekt festgelegt /MediaBox [0 0 300 300]erzeugt eine Seite mit 300 Einheiten Breite und Höhe- Die Basiseinheit ist 1/72 Zoll
- 300 Einheiten entsprechen etwa 4,17 Zoll
- Wenn
/MediaBoxauf600 600geändert wird, zeigt Acrobat die Seite als8.33 x 8.33 inan - Der in Acrobat erlaubte Maximalwert für
/MediaBoxvon14400 14400wird als 200 × 200 Zoll angezeigt- Wird dieser Wert überschritten, erzeugt Acrobat eine Warnung
- Mit zusätzlichem
/UserUnitlässt sich die Basiseinheit des User Space vergrößern/UserUnit 2verdoppelt beide Seitenabmessungen- Werden
/MediaBox [0 0 14400 14400]und/UserUnit 2kombiniert, zeigt Acrobat400.00 x 400.00 inan
- Mit
/UserUnit 75000zeigt Acrobat die Seite als 15.000.000,00 × 15.000.000,00 Zoll an- Das sind etwa 381 km × 381 km und entspricht damit genau der ursprünglichen Behauptung
- Beispieldatei: biggest.pdf
Unterschiede zwischen Acrobat und Preview
- Acrobat zeigt weiterhin 15.000.000 Zoll an, auch wenn
/MediaBoxoder/UserUnitnoch größer gesetzt werden - Wird
/UserUnitgrößer als75000gesetzt, wird der Wert ohne Warnung oder Fehlermeldung begrenzt /UserUnitscheint in der Praxis nicht besonders häufig verwendet zu werden- Eine Stack-Overflow-Antwort sagt ebenfalls, dass dieser Wert nicht weit verbreitet ist
- Online waren kaum Beispiele dafür zu finden
- macOS Preview.app unterstützt
/UserUnitnicht- Alle PDFs werden mit der Standard-Basiseinheit 1/72 Zoll behandelt
- Dafür setzt Preview.app im Gegensatz zu Acrobat keine strenge Obergrenze für
/MediaBox- Selbst eine Breite aus einer
1mit 12 nachfolgenden Nullen wird akzeptiert - Diese Breite liegt ungefähr in der Größenordnung der Entfernung zwischen Erde und Mond
- Selbst eine Breite aus einer
- Mit noch größeren
/MediaBox-Werten lassen sich Dateien erzeugen, die Preview als PDF mit einer Fläche von etwa 37 Billionen Quadratlichtjahren anzeigt- Beispieldatei: universe.pdf
- Der Großteil des Dokuments ist leerer Raum, und es enthält eine Warnung, es nicht auszudrucken
1 Kommentare
Hacker-News-Kommentare
PDF ist technisch in vielerlei Hinsicht schrecklich, aber die Eigenschaft als in sich geschlossene statische Datei, die ich in meiner Hand behalten kann, ist großartig im Kontrast zu nutzerfeindlichen dynamischen/SaaS-Websites, die jederzeit verschwinden können
PDF/A kommt dem eigentlichen PDF näher und entfernt den Großteil des gefährlichen Sammelsuriums
Wenn man seltsame PDF-Spielereien mag: Es gibt eine Polyglot-Datei, die PDF/A ist, zugleich CSV und außerdem ein Amiga-Soundtracker-MOD-Soundtrack: https://www.lab6.com/6
https://www.nytimes.com/2009/07/18/technology/companies/18am...
Viele machen sich Sorgen über die Ausführung von JavaScript, benutzen PDF-Dateien aber ganz ohne größere Bedenken
Um ein beliebiges PDF mit Open-Source-Software in PDF/A umzuwandeln, scheint es nur den Weg über Ghostscript nach PostScript und dann wieder zurück zu geben, und Ghostscript steht unter der Affero-Lizenz, was verschiedene Probleme nach sich ziehen kann
Es gibt auch alte GPL-Versionen, und die funktionieren bei den meisten PDFs, aber sie sind etwa 15 Jahre alt
In einem früheren Job musste ich mit PDF/A arbeiten, und das hat überhaupt keinen Spaß gemacht
Allein das Rekonstruieren von Absätzen war ein enormer Aufwand, von Tabellen-Parsing ganz zu schweigen
Für etwas, das de facto Standard ist, sollte es besser sein, und das PDF-Handbuch ist ebenfalls wirklich schlecht
Zum Vergleich kann man sich PNG ansehen: Die maximale Breite und Höhe beträgt 2147483647, also 2^31 - 1
Die kleinste Dichte, die sich mit dem pHYs-Chunk angeben lässt, ist 1 Pixel pro Meter, also sind 2 Milliarden Meter größer als der Sonnendurchmesser von 1,39 Gigametern: https://en.wikipedia.org/wiki/Orders_of_magnitude_(length)#g...
Da der sCAL-Chunk ASCII-Gleitkommazahlen verwendet, lassen sich damit noch viel größere physische Größen ausdrücken
Eine Weltkarte im Maßstab 1:10.000.000 wäre nach pHYs weniger als 10 m breit, nach sCAL aber etwa 40.000 km
In dem Moment, in dem man PDF-Breiten in Kilometern misst, weiß man, dass man einen guten Technikartikel liest
Das erinnert mich an ein PDF, das ich vor mehr als zehn Jahren mit einer PostScript-Implementierung von Game of Life erstellt habe
Es scheint noch zu funktionieren, bringt aber macOS Preview zum Absturz: https://andrewcutler.net/docs/joke/life.pdf
Die Animation ist allerdings nicht sichtbar; angezeigt wird nur der Endzustand, und im PDF-Viewer von Firefox sieht man ein wenig Animation
Skim ist Preview ähnlich, zeigt aber das Raster nicht an
Dieser Artikel erinnert an das intellektuelle Spiel von Umberto Eco
Insbesondere denke ich an „On the Impossibility of Drawing a Map of the Empire on a Scale of 1 to 1“: https://s3.amazonaws.com/arena-attachments/881694/cb6119367b...
https://en.wikipedia.org/wiki/On_Exactitude_in_Science
Preview hat anders als Acrobat keine Obergrenze für Werte, die sich in die MediaBox einsetzen lassen, und akzeptiert sogar eine Breite mit 12 Nullen hinter der 1
Im Dokumentinspektor wird die Seitengröße als 352777777777.78 x 10.59 cm angezeigt, und diese Breite entspricht ungefähr der Entfernung zwischen Erde und Mond
Selbst wenn man alle Planeten des Sonnensystems nebeneinanderstellt, würden sie noch bequem in dieses Dokument passen
Am Ende brauchte man also doch ein Lineal
352777777777.78 cm sind 3.527.777,7777778 km
Lustiges Experiment, alexwlchan
Im Artikel sind zwei kleine Fehler: Bei „15,000,000,000.00 in“ und „die Seitengröße beträgt 15 Milliarden Zoll“ müssten es 15 Millionen Zoll sein
Es hieß, Textformatierung sei schwierig, aber bei einem PDF-Beispiel mit nur den zwei Wörtern „Hello World“ muss man nur ein Schriftobjekt definieren, im Stream mit
Tfdie Schrift verwenden, mitTddie Position festlegen und mitTjden Text schreibenDanke auch für das Textbeispiel; es sieht ähnlich aus wie das, was ich versucht hatte, also hatte ich offenbar irgendwo einen Fehler
Laut Spezifikation scheint es nötig zu sein
An diesem Punkt möchte man Steven Wright frei nacherzählen
„Ich habe eine Karte der USA. In Originalgröße.“
Ich weiß nicht, ob die Oberseite der Karte die Richtung ist, in die ich mich bewege, oder Norden; früher war bei Karten immer Norden oben, aber bei Google Maps scheint das nicht so zu sein, was mich verwirrt.
Wenn ich mich um 90 Grad drehe, dreht sich die Karte mit, und ich bin nicht sicher, ob sich die Karte gedreht hat oder ich.
Wenn ich stillstehe, kann die Karte offenbar nicht wissen, wohin ich unterwegs bin, also scheint man sich erst bewegen zu müssen, um eine Richtung angezeigt zu bekommen.
Wenn ich das Smartphone vor meine Augen halte, zeigt die Oberseite der Karte zum Himmel, daher weiß ich nicht, ob man auf die Karte von oben herabschauen soll.
Ich würde gern wissen, wie man Google Maps auf dem Handy richtig benutzt.
https://s3.amazonaws.com/arena-attachments/881694/cb6119367b...
https://scomedy.com/quotes/10779
„Nicht drucken“ klingt wie eine Formulierung, die nur darauf wartet, zu einer Drucker-Bombe zu werden.
Als ich zuletzt einen Drucker benutzt habe, war es unter Windows fast unmöglich, einen Druckauftrag abzubrechen.
Die Zeiten, als Wi‑Fi-Drucker offen oder schlecht abgesichert waren, waren unterhaltsam.
Die einzige halbwegs verlässliche Methode, die ich gefunden habe, ist, den Drucker auszuschalten und den Druckauftrag aus der Warteschlange zu löschen.
Wenn der Drucker nicht direkt neben einem steht, geht das nicht, und ich verstehe nicht, warum das so schwierig ist.
Vor etwa 30 Jahren hat ein Interviewer in einem Bewerbungsgespräch für ein Microsoft-Sommerpraktikum eine sehr ähnliche Frage zu Excel gestellt.
Solche Themen eignen sich immer gut, um die Neugier einer Person und ihre Fähigkeit zu sehen, potenzielle Probleme in Teilprobleme zu zerlegen.