Drucken einer Unterschrift

Anforderung

In einem Dokument soll an einer von der Nutzung des Blattes abhängigen Stelle die elektronische Unterschrift des jeweiligen Sachbearbeiters plaziert werden.

Grundlage für dieses Beispiel sind die Formulare 'Angebot einzelne Seite mit Bildern' und 'Angebot einzelne Seite variable Tabelle' aus der Beispielinstallation. Das gewünschte Ergebnis soll in etwa wie folgt aussehen (Ausschnitt):

Realisierung

Grundvoraussetzung für das Drucken der Unterschriften ist, daß sich die Bilder der Unterschriften im Zugriff des print2forms-Systems befinden. Im hier vorliegenden Beispiel sind die Unterschriften als Ressourcen in einem speziellen Subcontainer mit dem Namen 'Unterschriften' hinterlegt.

Die Unterschriften liegen aber nicht direkt in diesem Subcontainer, sondern sind erst in einem weiteren Subcontainer abgelegt. Der Name dieses Subcontainers entspricht dem Namen des Benutzers, der die Ausdrucke erzeugen soll (nicht mit dem Benutzer im print2forms-System zu verwechseln!). Auf diese Weise kann ein Zugriffskonzept realisiert werden, das den einzelnen Benutzern des Formulars nur Zugriff auf die Unterschriften in ihrem Subcontainer erlaubt.

Zur Realisation der Anforderung wird im hier verwendeten Formular 'Angebot einzelne Seite mit Bildern' ein Textfeld und ein Ressourcenfeld benötigt (existente Felder 'Sachbearbeiter' und 'Unterschrift'). Die Aufgabe des Textfeldes ist es, den Namen des Sachbearbeiters aus den Nutzdaten zu ermitteln. Das Ressourcenfeld druckt dann eine Ressource, die das Bild der Unterschrift des gefundenen Sachbearbeiters enthält. Die beiden Felder sind wie folgt definiert:

Das Textfeld ermittelt mit dem Feldindex '0104290000' und dem Vergleichsmuster '.{59}@r. (.*)' den Namen des Sachbearbeiters. Um das Muster besser zu verstehen hier ein Ausschnitt der Indexdatei des Beispieldatenstroms:

 [p2f]
 [Param]1.0;10.1.17.7;03.00.08 15:26:50
 [Computer]thinkcentre.spe-gmbh.de
 [User]Meier
 [Model]P2F LaserJet 5
 [Job]Sample 10
 [JobNo]
 ...
 [0102C10000]                                                           00018/4
 [0103390000]                                                           1704
 [0103750000]       Kunde AG
 [0103B10000]       z. Hd. Hr. X. Kunde                                 346-57897
 [0104290000]       Kundengasse 19                                      Hr. G. Muster
 [0104650000]       D-48535 Kundendorf
 [0104A10000]                                                           01.01.2007
 [0105190000]                                                           31.01.2007
 [0105CD0000]
 [0106090000]
 [0106450000]      1   SK20F1   Scart Kabel, high quality       9.99€    8.88€    7.77€ 
 [0106810000]                   1 x Scartstecker auf 1 x Scartstecker (21 pin),
 [0106AE0000]                   transparentes Kabel mit vergoldeten Kontakten,
 [0106DB0000]                   4 x 0.14 mm² abgeschirmt (Audio), 6 x 75 Ohm 
 [0107080000]                   RG59 (Video), Länge 2 m, VPE 10 Kabel
  ...

Der Teilausdruck '.{59}[HF]r\. ' überspringt zunächst den Anfang der Zeile - 59 beliebige Zeichen, bis eine Zeichenfolge aus einem großen 'H' oder 'F', einem kleinen 'R', einem Punkt gefolgt von einem weiteren Leerstellen vorkommt. Die Zeichenketten 'Hr. ' und 'Fr. ' werden so alternativ erkannt. Damit ist das Muster jetzt auf den Anfang des Namens justiert, unabhängig davon, aus wievielen Namensbestandteilen der Name besteht. Jetzt kann mit dem Teilausdruck '(.*)' einfach der Rest der Zeile (der Name) in den Zeichenkettenpuffer übernommen werden. Die Auswahl 'Nein' bei 'Feld entfernen' läßt die Textpassage so wie sie ist auf dem Blatt, sie soll ja schliesslich weiter hier stehen bleiben.

Die Position, an die die Unterschrift gedruckt werden soll, ist in diesem Beispiel durch das verwendete Formular fest vorgegeben. Die der Unterschrift vorangehende Grußformel ist der Einfachheit halber in das Formular mit aufgenommen worden, könnte aber auch mit zwei weiteren Textfeldern direkt erzeugt werden. Hier der Ausschnitt aus der Ressource 'Angebot einzelne Seite':

Mit der Schablone '\Sachbearbeiter:1' wird der gefundene Name nun in Klarschrift unterhalb der Grußformel im Formular positioniert und gedruckt. Die Schrift wurde der Schrift aus der Grußformel angepasst.

Das Ressourcenfeld erzeugt mit der Schablone '\u/\Sachbearbeiter:1' den Zugriffspfad für die Ressource mit der Unterschrift. Der Teil '\u' dient dazu, den Namen des Benutzers des Formulars mit in den Zugriffspfad aufzunehmen. Dies ist der Name, der auch in der Indexdatei unter '[User]' angeführt ist. Der anschließende Schrägstrich ist notwendig, um die verschiedenen Pfadbestandteile voneinander zu trennen. In diesem Beispiel würde also insgesamt der Zugriffspfad 'Unterschriften/Meier/G. Muster' erzeugt.

Das Druckergebnis ist dann so wie oben in der Anforderung zu sehen.

Soll die Unterschrift nicht an einer festen Position gedruckt werden, sondern abhängig von den Nutzdaten positioniert werden, ist zunächst der Teil der Nutzdaten zu identifizieren, an dem die Position der Unterschrift festgemacht werden soll. In unserem Beispiel hier wäre das die letzte Zeile mit einer Positionsnummer für einen Artikel. In einem konstanten Abstand zu dieser Zeile müßten dann die Grußformel mit den Belehrungen, die Unterschrift und der Name des Sachbearbeiters gedruckt werden. Diese Anforderung ist im folgenden Formular 'Angebot einzelne Seite variable Tabelle' realisiert:

Das Wesentliche dieses Formulars sind die Felder Name Sachbearbeiter, Unterschrift Sachbearbeiter und Belehrungen. Alle diese Felder suchen mit dem Muster ' .# @.*' die Zeilen, in denen die Positionsnummer eines Artikels auftaucht. Das Teilmuster ' .#' findet die ein- oder zweistellige Positionsnumer. Zusammen mit dem Feldindex '01????0000' werden aber alle Artikel innerhalb der Tabelle gefunden. Uns interessiert für die Platzierung der Unterschrift aber nur die letzte gefundene Position. Deshalb wird mit der Angabe 'Relativ zum letzten Feld' dafür gesorgt, daß unabhängig von der Anzahl der gefundenen Texte nur das letzte Vorkommen ausgewertet wird (damit wird auch die automatische mehrfache Auswertung des Feldes unterbunden!).

Da jetzt wegen der variablen Positionierung im Textfeld Name Sachbearbeiter die letzte Zeile mit einer Positionsnummer gesucht werden muß, muß der eigentliche Name des Sachbearbeiters mit Hilfe des Suchfeldes Sachbearbeiter separat ermittelt werden.

Damit die Grußformel zusammen mit den Belehrungen variabel positioniert werden kann, muß sie jetzt natürlich von der Tabelle getrennt und in einer eigenen Ressource abgelegt werden. Dies ist die Ressource Belehrungen im Subcontainer Angebot mit variabler Tabelle, die hier abgebildet ist:



Bemerkungen