Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Workshops / PDF / Grundlagen

PDF-Struktur und Problemlösungen

Aufbau von PDF-Dokumenten

PDF ist aus dem Bedürfnis entstanden, vor allem Druckausgaben unabhängig vom tatsächlich vorhandenem Drucker 100%-ig genau beschreiben zu können. Grundlage war deshalb die Seitenbeschreibungssprache PostScript, was übrigens viele Drucker sogar direkt interpretieren können.

PDF erweitert die Daten zur Druckaufbereitung u.a. um Informationen zur Navigation. Allerdings werden diese quasi an das Ende verlagert, um den eigentlichen Druckvorgang nicht durch "Hintergrundrauschen" zu stören.

Ein PDF-Dokument stellt sich also folgendermaßen dar:

Tatsächlich sieht die Struktur sogar noch etwas komplizierter aus, da jede Seite (engl. "Page") selbst wiederum aus mehreren Objekten aufgebaut ist, jedes natürlich ausgestattet mit einem Header und einem Trailer.

PDF-Dateien bestehen aus dem eigentlichen Text und einer großen Zahl an eingestreuten "Tags", welche wiederum bestimmte Sonderzeichen enthalten (etwa das Backslash "\"). Solche Sonderzeichen dürfen natürlich nicht im eigentlichen Text vorkommen.

PDF ist ein Betriebssystem-übergreifendes Format, welches Seiten (im Prinzip) Zeilen-weise beschreibt.

Probleme und bekannte VB-Lösungen

Aus Sicht der Software-Entwicklung in VB ergeben sich aufgrund der vorgegebenen und einzuhaltenden PDF-Struktur einige spezielle Probleme, welche aber dank VB-Tec.de keine unüberwindbaren Hindernisse darstellen:

Streaming

Es wird eine Speicherstruktur benötigt, in die man beliebige Mengen an Strings hinein schreiben kann - analog zu einem Drucker, welcher grundsätzlich ja auch beliebige Inputmengen verträgt.

Wir werden dafür auf das in "Strings schnell aneinander hängen" gezeigte Verfahren zurückgreifen, um eine Datenstruktur "Stream" zu realisieren.

Verwaltung der Referenzen

Da zu Beginn der PDF-Erzeugung oft noch nicht bekannt ist, wieviele Seiten der Gesamtoutput haben wird (abhängig von Zeichensatzgröße und der Zeilenanzahl), müssen entsprechende Referenzen während der Generierung in einer stetig wachsenden Datenstruktur gespeichert werden. Analoges gilt auch für die noch größere Anzahl an Objekt-Referenzen.

Wir werden dafür auf das in "Array dynamisch vergrößern" gezeigte Verfahren zurückgreifen, um ein Array ohne großen Aufwand dynamisch vergrößern zu können.

Zugriff auf Dateien

PDF-Dokumente müssen letztendlich als Datei mit dem Suffix ".pdf" gespeichert werden. Außerdem müssen auch Textdateien eingelesen werden können, um diese überhaupt nach PDF umwandeln zu können.

Wir werden dafür auf die in "Beliebige Datei einlesen" und "Beliebigen Text speichern" gezeigten Routinen zurückgreifen, welche diese Aufgaben schnell und zuverlässig erledigen.

PDF-Sonderzeichen

Einige Sonderzeichen werden für die PDF-Beschreibung selbst benötigt und dürfen deshalb nicht im eigentlichen Text vorkommen. Sie müssen daher durch sogenannte "Escape-Sequenzen" ersetzt werden.

Wir werden auf die in "Blitzschnelle Replace-Funktion" gezeigten Routinen zurückgreifen, um dies (unabhängig von der VB-Version!) erledigen zu können.

Unterschiedliche Zeilentrenner

Der zu konvertierende Input kann von unterschiedlichen Betriebssystemen stammen, so dass man sich bei der Analyse nicht auf das Zeilentrennerzeichen verlassen kann.

Wir werden die in "Zeilenvorschub-String bestimmen" gezeigte Routine benutzen, um das jeweils korrekte Zeilentrennerzeichen zu bestimmen.

Komprimierung von Bilddateien

Bilddateien nehmen in der Regel viel Platz ein. Daher sieht das PDF-Format eine Komprimierung dieser Informationen vor, welche hier ebenfalls genutzt werden soll.

Wir werden die in "RLE-Komprimierung mit Läufen" gezeigte Routine benutzen, um ggf. die PDF-Dateigröße klein zu halten.


...>>

© Jost Schwider, 13.07.2004-22.05.2005 - http://vb-tec.de/pdf1.htm