Wiederholbare Formen

Eine PDF-Form ist eine Sequenz von Anweisungen zur Seitenbeschreibung, der ein Name zugeordnet wurde. Über diesen Namen kann die Form dann an beliebiger Stelle im Dokument eingesetzt werden. Die Form bildet dabei eine implizite Gruppe. Das heisst, Anweisungen in der Form können keinen Einfluss auf Anweisungen nach der Form nehmen. Umgekehrt können aber Anweisungen vor der Form Einfluss auf die Anweisungen in der Form nehmen.

Formobjekte

Zunächst müssen wir ein Formobjekt definieren. Dabei handelt es sich um ein Streamobjekt mit zusätzlichen Einträgen im Dictionary. Folgende Einträge neben /Length sollten vorhanden sein:

/Type immer /XObjekt
/Subtype immer /Form
/BBox Formumfang
/Resources Resourcendictionary

/BBox ist mehr oder weniger das Gegenstück zu /MediaBox in Seitenbereichs- und Seitenobjekten. Man definiert damit die Zeichenfläche, die von den Anweisungen in der Form benötigt wird. Jegliche Operationen ausserhalb dieser Fläche werden abgeschnitten (so wie bei Clipping). Der Wert ist ein Array mit vier Zahlen, wovon typischerweise die ersten Beiden 0 sind, die Dritte auf die Breite, und die Vierte auf die Höhe des Bereichs gesetzt wird.

/Resources enthält ein eigenes Resourcendictionary. Der Eintrag ist optional. Lässt man ihn weg, so wird jeweils das Resourcendictionary verwendet, welches beim Einfügen gerade gültig ist. Gibt es nur ein Resourcendictionary für das gesamte Dokument, so ist dies unproblematisch. Ansonsten kann man aber unliebsame Überraschungen erleben.

Als Streamdaten schliesslich legt man einfach die Anweisungen fest, welche man später einfügen will.

Beispiel:

10 0 obj
<<
/Type /XObject
/Subtype /Form
/BBox [0 0 100 100]
/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] >>
/Length 34
>>
stream
100 50 m 50 100 l 0 50 l 50 0 l f
endstream
endobj

Diese Form zeichnet einen gefüllten Rhombus. Da in der Form keine Füllfarbe definiert wurde, wird beim Einfügen die zu jenem Zeitpunkt gültige Farbe verwendet.

Einbindung als Resource

Nun können wir das Formobjekt im X-Object Dictionary des Resourcendictionarys der Seitenbereichs bzw. der Seite vermerken. Als Name wird üblicherweise ein Fo gefolgt von einer Nummer verwendet (da das grosse F alleine ja schon für Fonts verwendet wird).

Beispiel:

/Resources <<
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/Font <<
/F1 4 0 R
>>
/XObject <<
/Fo1 10 0 R
>>
>>

Einbindung in die Seite

Um die Form nun in einer Seite zu verwenden, benötigen wir die bereits bekannte Anweisung Do, die wir bislang für Bilder verwendet haben.

Wie bei Bildern erwartet die Anweisung genau einen Parameter mit dem Namen des Objekts (in diesem Fall des Formobjekts), und wie bei Bildern wird die Form mit der linken, unteren Ecke auf dem Nullpunkt gezeichnet. Anders als bei Bildern wird die Form aber nicht 1×1 Einheiten gross gezeichnet, sondern gemäss den Angaben der /BBox. Folglich müssen wir die Form immer noch per Transformation verschieben, aber wir müssen sie nicht unbedingt skalieren.

Beispiel:

q
1 0 0 1 72 670 cm
/Fo1 Do
Q

Damit zeichnen wir unseren Rhombus links oben auf dem Blatt.

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
S​ E S K I
 
grafik/formen.txt · Zuletzt geändert: 2013/01/28 13:17 (Externe Bearbeitung)
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC0 1.0 Universal
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki