Wie erkennt man das PDF-Format?

8

Wie kann ich feststellen, ob dieser Stream ein PDF-Dokument oder etwas anderes enthält?

Ich benutze .NET und C #, aber das spielt keine Rolle.

    
akonsu 16.09.2010, 16:17
quelle

2 Antworten

15

Es kommt darauf an, wie gut / zuverlässig die Erkennung funktioniert.

Hier meine Auswahl der wichtigsten Bits + Teile aus der 756 Seiten langen offiziellen Definition, direkt aus dem Mund des Pferdes (PDF 32000: 1-2008 ):

Eine grundlegende konforme PDF-Datei muss aus folgenden vier Elementen bestehen (siehe Abbildung 2):

  • Ein einzeiliger Header, der die Version der PDF-Spezifikation identifiziert, der die Datei entspricht
  • Ein Body, der die Objekte enthält, aus denen das in der Datei
  • enthaltene Dokument besteht
  • Eine Querverweistabelle mit Informationen zu den indirekten Objekten in der Datei
  • Ein Trailer, der die Position der Querverweistabelle und bestimmter spezieller Objekte im Dateikörper angibt [....]

Die erste Zeile einer PDF-Datei besteht aus einer Kopfzeile bestehend aus 5 Zeichen% PDF- gefolgt von einer Versionsnummer der Form 1.N, wobei N eine Ziffer zwischen 0 und 7 ist. Ein konformer Leser akzeptiert Dateien mit einem der folgenden Header:
% PDF-1.0
% PDF-1.1
% PDF-1.2
% PDF-1.3
% PDF-1.4
% PDF-1.5
% PDF-1.6
% PDF-1.7
[...]

Wenn eine PDF-Datei wie die meisten Binärdaten enthält (siehe 7.2, "Lexikalische Konventionen"), folgt unmittelbar auf die Kopfzeile eine Kommentarzeile, die mindestens vier Binärzeichen enthält, also Zeichen mit 128 Zeichen oder größer. Dies stellt das ordnungsgemäße Verhalten von Dateiübertragungsanwendungen sicher, die Daten nahe dem Anfang einer Datei prüfen, um zu bestimmen, ob der Inhalt der Datei als Text oder als Binärdatei behandelt werden soll.

Trailer
[....] Die letzte Zeile der Datei soll nur den Dateiende-Marker %% EOF enthalten. Die beiden vorhergehenden Zeilen enthalten das Wort keyword startxref und den Byte-Offset im dekodierten Stream vom Anfang der Datei bis zum Anfang des Schlüsselwortes xref im letzten Querverweisabschnitt pro Zeile und Zeile.

Zusammenfassung

Zwei der wichtigsten Dinge zu erinnern:

(a) Die erste 'Kopfzeile'

%Vor%

[wobei X in 0..7] auf einer eigenen Zeile erscheinen muss, gefolgt von einem Zeilenumbruch. Diese Zeile muss innerhalb der ersten 4096 Bytes erscheinen, nicht unbedingt in der ersten Zeile. Die vorhergehenden Zeilen enthalten möglicherweise Nicht-PDF-Inhalt, aber Druckerjob-Sprachbefehle (PJL) oder Kommentare.

(b) Die nächste Zeile muss vier Binärbytes enthalten, wenn das PDF Binärdaten enthält.

Parsing für '% PDF-1'. hat schon viele Leute gebissen ....

    
Kurt Pfeifle 16.09.2010, 16:56
quelle
4

Eine PDF-Datei beginnt mit einer ASCII-Zeichenfolge %PDF-1.3 oder etwas ähnlichem, abhängig davon, welche PDF-Version sie tatsächlich ist.

    
Carl Norum 16.09.2010 16:19
quelle

Tags und Links