logo

Suletuxe.de
Linux - Nutzer
helfen
Linux - Nutzern

Willkommen, Gast. Bitte Login oder Registrieren.
29. Januar 2023, 05:56:37
Übersicht Hilfe Suche Login Registrieren

Amateurfunk Sulingen
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  allgemeine Kategorie  |  Allgemeine Diskussionen  |  Thema: Aufbau des Portable Document Format (PDF) « zurück vorwärts »
Seiten: [1] nach unten Drucken
   Autor  Thema: Aufbau des Portable Document Format (PDF)  (Gelesen 251 mal)
Sebastian
Full Member
***

Offline

Einträge: 177





Profil anzeigen
Aufbau des Portable Document Format (PDF)
« am: 01. Dezember 2022, 16:45:00 »

Wie hier angekündigt, wollte ich mich zurückmelden, sobald ich etwas mehr über das PDF weis. Da das Thema komplexer ist, mache ich dafür lieber einen eignen Thread auf.

Der Post wird noch nicht ganz fertig und ich werde ihn später noch weiter ergänzen.

PDF Syntax

Der Dokumenteninhalt besteht aus verschiedenen Objekten, die aus folgenden Elementen bestehen:


  • Namen geschrieben als /Name
  • Ganzzahlen wie 30
  • Strings, die mit Klammern dargestellt werden (Dies ist ein String)
  • Objektreferenzen wie 3 0 R das zum dritten Objekt verweist.
  • Arrays wie [30 70 /Name] ein Array mit 3 Objekten 30, 70 und /Name
  • Dictionaries (Bilioteken) wie << /ten 10 /two 2 >> das /ten auf die 10 und /two auf die 2 verweist.
  • Streams, die aus Dictionaries bestehen, die PDF-Grafik Operatoren (um PDF Vektorgrafiken zu zeichnen) oder andere binäre Daten enthalten (Anhänge, Rastergrafiken etc.)


Anmerkung:

In so einen Stream Objekt kann man alles an Daten rein kodieren, was man möchte.

Jedes erzeugte Objekt wird durchnummeriert und in die cross-reference-table eingetragen, die den offset jedes Objekt enthält, wo genau man dies in der Datei finden kann.

z.b. diese Seiten Liste Objekt:

Code:

1 0 obj # Objekt 1
<< /Type /Pages # Es ist eine Seiten Liste
    /Count 1 # Es gibt eine Seite
    /Kids [2 0 R] # Liste von Objekt Nummern der Seiten, hier nur das Seiten Objekt 2
>>
endobj # Ende von Objekt 1

Wenn man also in dem Seiten Liste Objekt nach /Count sucht, bekommt man die Anzahl der Seiten einer PDF heraus. Das kann man sich in Hinterkopf behalten, falls man die Seitenanzahl einer PDF mithilfe eines Skriptes einlesen möchte.

PDF Struktur

Eine einfache gültige PDF-Datei besteht aus 4 Teilen in folgender Reihenfolge:


  • Denn Header indem die PDF Version Nummer steht
  • Denn Body der die Seiten, Grafiken und ergänzende Informationen in Form von mehreren Objekten kodiert hat. 
  • Die cross-reference table die, die Positionen der Objekte in der Datei referenziert, und damit den Zufallszugriff (Es muss nicht die ganze Datei geladen werden, um eine Seite in der Mitte z.B. aufzurufen) sicherstellt.
  • Denn trailer mit dem trailer dictionary der Metadaten enthählt und hilft jede stelle in der Datei zu finden. Dieser enthält auch denn offset zur cross-reference table


Der Header

Eine PDF-Datei fängt mit dem Header an, die dem jeweiligen benutzten Programmen mitteilt, dass es sich um eine PDF-Datei handelt, und in welche Version diese vorliegt.


  • 1 Zeile enthält die PDF-Version
  • 2 Zeile enthält binär Daten, damit die Datei als ein Binary erkannt wird.


Code:

%PDF-1.4 # PDF 1.4 Version header
0101010 # Binary Daten


Fortsetzung folgt...
« Letzte Änderung: 01. Dezember 2022, 18:52:51 von Sebastian » Gespeichert
Seiten: [1] nach oben Drucken 
Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe  |  allgemeine Kategorie  |  Allgemeine Diskussionen  |  Thema: Aufbau des Portable Document Format (PDF) « zurück vorwärts »
Gehe zu: 


Login mit Username, Passwort und Session Länge

 Es wird die Verwendung "Blink"-basierter Browser und mindestens 1024x768 Pixel Bildschirmauflösung
für die beste Darstellung empfohlen
 
freie Software für freie Menschen!
Powered by MySQL Powered by PHP Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2004, YaBB SE Dev Team. All Rights Reserved.
- modified by Andreas Richter (DF8OE)
Valid XHTML 1.0! Valid CSS!