Voraussetzung Word


Mittels der Aktion Word (Fill) kann ein PDF-Dokument anhand einer bestehenden Word-Vorlage erstellt werden. Entsprechende Bereich im Word-Dokument werden durch den Inhalt von Formularfelder befüllt. Dies kann z.B. verwendet werden für eine Bestätigung mit den Kontaktdaten und der Frage bei einem Online-Kontaktformular.

Word-Version

Es werden alle Versionen ab Word 97 unterstützt.

Einfügen von Formularfeldern

Aktivieren der Registerkarte Entwicklertolls in den Otionen unter Datei   Optionen.

Um Bereiche im Word-Dokument mit Inhalten aus Formularfeldern zu befüllen, müssen sogenannte Textformularfelder (Formularsteuerelemente) in das Word-Dokument eingefügt werden.

Hierzu muss in Word oben in die Registerkarte Entwicklertools gewechselt werden. Wird diese nicht angezeigt, kann sie über Datei   Optionen   Menüband anpassen   Häkchen rechts bei Entwicklertools eingeblendet werden.

Einfügen eines Formularsteuerelements mit den Entwicklertools. Dieses wird dann durch Formularwerte ersetzt.

Nun kann in den Entwicklertools im Abschnitt Steuerelemente ein Textfeld (Formularsteuerelement) in das Word-Dokument eingefügt werden.

Durch Doppelklick auf das somit eingefügte graue Steuerelemente öffnet sich ein Fenster, wo in dem Feld Standardtext der Name des Formularelements eingegeben wird, mit dessen Inhalt das Feld befüllt wird.

Bei wiederholten Feldern wird das Feld mit den Werten aller dynamisch erzeugten Felder kommasepariert befüllt. Bei drei dynamischen Kopien des Textfelds Vorname also z.B. Anton,Sabine,Odo.

Der Wert von Steuerelementen ist im Dokument sichtbar. Falls dies nicht gewünscht, kann die Word-Funktion auch im Hilfetext des Steuerelements hinterlegt werden. Ist im Hilfetext eine Funktion hinterlegt, hat diese immer Vorgang vor Funktionen im Wert des Steuerelements.

Siehe hierzu auch wiederholte Felder.

Beispiel

Im Folgenden nun ein einfaches Beispiel zur Verdeutlichung.

Beispiel für ein Word-Dokument, das mit Daten aus dem Formular befüllt wird. Es werden die Formularfelder mit den entsprechenden Namen dazu genommen.

Bei diesem Beispiel wird das Steuerelement mit dem Standardtext tfVorname bei der PDF-Generierung mit dem Inhalt des Formularelements mit dem Namen tfVorname ersetzt. Genauso wird das Steuerelement tfNachname und tfFrage mit dem Inhalt des entsprechenden Formularelements ersetzt.

Word-Fill-Funktionen

Falls es nicht ausreicht, direkt den Inhalt eines Formularelementes zu übernehmen, stehen noch einige Funktionen zur Verfügung. Diese werden immer auf ein Formularelement angewendet.

Zum Beispiel ist bei Auswahlelementen der Inhalt des Formularelements der im Designer eingestellte Wert wie etwa 1 oder 2 statt Frau oder Herr für die Auswahl der Anrede . Um stattdessen den Anzeigetext der ausgewählten Option einzufügen, kann die Funktion lsttxt verwendet werden. Heißt das Formularelement sel1, so gibt man im Steuerlement Folgendes ein.

sel1.lsttxt()

Format

Word-Fill-Funktionen haben immer das folgende Format (Anführungszeichen werden unterstützt ab 7.1.0+ ):

Word-Function

<Word-Function> = <Field-Name> ["." <Function-Name> "(" <Argument>? ")" ] *

Eine Word-Funktion besteht aus einem Feldnamen, gefolgt von Funktionen, jeweils mit Punkt abgetrennt. Jede Funktion kann ein Argument haben, muss es aber nicht. Es kann keine, eine, oder mehrere Funktionen geben.

sel1
sel1.funktion1()
sel1.funktion1(argument)
sel1.funktion1().funktion2()
sel1.funktion1(argument).funktion2().funktion3()

Argument

<Argument> = <ArgList> | <ArgMap>

Das Argument kann entweder eine Liste von Werten sein oder eine Zuordnung von Schlüsseln zu Werten. Welche Art von Argument benutzt werden muss, hängt von der konkreten Funktion ab.

ArgList

<ArgList> = <Value> [ "|" <Value> ] *

Einerseits kann das Argument eine Liste von Werten sein, die mit einer vertikalen Linie voneinander getrennt sind. Wieviele Werte an eine Funktion übergeben werden müssen, hängt von der konkreten Funktion ab.

sel1.function(wert1)
sel1.function(wert1|wert2)
sel1.function(wert1|wert2|wert3)

ArgMap

<ArgMap> = <ArgList> "#" <ArgList>

Anderseits kann das Argument auch eine Zuorndung von Schlüsseln zu Werten sein. Die Schlüssel und die Werte sind durch eine Raute voneinander getrennt. Welche Schlüssel und welche Werte an eine Funktion übergeben werden müssen, hängt von der konkreten Funktion ab.

sel1.function(schlüssel1#wert1)
sel1.function(schlüssel1|schlüssel2#wert1|wert2)
sel1.function(schlüssel1|schlüssel2|schlüssel3#wert1|wert2|wert3)

Value

<Value> = <Unquoted-String> | <Singly-Quoted-String> | <Doubly-Quoted-String>

Jeder Wert ist dabei im einfachsten Fall nur eine Zeichenfolge.

sel1.function(Ein Wert)
sel1.function(Noch ein Wert)
sel1.function(Wert1|Wert2)

Manche Sonderzeichen wie Klammern, Punkte oder Rauten können dabei aber nicht verwendet werden. Dann ist es auch möglich, den Wert in einfache oder doppelte Anführungszeichen zu setzen (7.1.0+ ). Werte ohne Anführungszeichen existieren aus Kompatibilitätsgründen, die Nutzung von Anführungszeichen wird empfohlen und ist nie verkehrt.

sel1.function('Wert (mit) Klammern')
sel1.function("Wert (mit) Klammern")
sel1.function("Wert einem Punkt und einer Raute #.")
sel1.function('Wert#1'|'Wert#2')

Weiterhin können innerhalb von Werten mit Anführungszeichen spezielle Escape-Sequenzen verwendet werden:

sel1.function("Otto sagte: \"Es regnet\"")
sel1.function('Otto sagte: \"Es regnet\'')
sel1.function("Mit dem Zeichen \\ werden Escape-Sequenzen eingeleitet")
sel1.function("Zeilenumbruch: \r\n")
sel1.function("Tabulator: \t")
sel1.function("Unicode-Zeichen: \u578b")

Achtung: Werden keine Anführungszeichen benutzt, gehören alle Leerzeichen zum Wert. Das folgende sind zwei verschiedene Werte (einmal ohne und einmal mit Leerzeichen am Anfang):

sel1.function(Test)
sel1.function( Test)

Bei Nutzung von Anführungszeichen sind Leerzeichen vor oder nach dem Anführungszeichen egal. Das folgende hat die gleiche Bedeutung:

sel1.function("Test")
sel1.function( "Test")

Verfügbare Funktionen

 Funktion  Beschreibung  Beispiele  Erläuterung
 empty 7.2.0+ Prüfen, ob die Liste der Werte oder einer der Werte leer ist.sel1.empty() Liefert 1 zurück, wenn gar keine Option oder eine Option mit leeren Wert bei einem Auswahlelements gewählt wurde. Andernfalls wird 0 zurückgeliefert.
 lsttxt     Ersetzung aller Werte einer Auswahl mit dem Text-Wert. Steht für list text.sel1.lsttxt() Liefert den Text-Wert des Auswahlelements mit Namen sel1 zurück
 lsttitle   Ersetzung aller Werte einer Auswahl mit dem Titel-Wert. Steht für list title.sel1.lsttitle() Liefert den Titel-Wert (falls hinterlegt) des Auswahlelements mit Namen sel1 zurück.
 lst   Ersetzung aller Werte einer Auswahl mit dem entsprechenden Spalte aus der Datenquelle, welche die Auswahloptionen bereitstellt. Dabei muss der Name der Spalte angegeben werden. Hat die Datenquelle keine Spaltenname, muss col0, col1, col2 etc. verwendet werden. sel1.lst("Landname") Liefert den Wert der Spalte Landname von der Datenquelle des Auswahlelements mit Namen sel1 zurück.
 con        Prüfung ob ein Wert in der Liste vorhanden ist. Bei Mehrfachauswahl hilfreich. Steht für contains.sel1.con("6" | "9" | "69") Liefert 1 wenn am Auswahlelement mit Namen sel1 der Wert "6", "9" oder "69" ausgewählt ist, sonst 0.
 cnt        Zählt die vorhandenen Werte. Bei dynamic sinnvoll. Steht für count.sel1.cnt() Liefert die Anzahl der erzeugten Elemente des auf wiederholt geschalteten Auswahlelements sel1.
 rmp        Einen Absatz (Paragraphen) entfernen. Steht für remove paragraph. EL1.rmp() EL1.rmp("x") Entfernt Zeile und Paragraphen, wenn Inhalt des Elements leer ist beziehungsweise den Wert x hat.
 rmr        Tabellenzeile löschen, in der sich das Steuerelement befindet. Steht für remove row. EL1.rmr() EL1.rmr("x") Entfernt die Zeile der Tabelle, wenn das Formularelement EL1 leer ist beziehungsweise den Wert x hat.
 rmt        Tabelle löschen, in der sich das Steuerelement befindet. Steht für remove table. EL1.rmt() EL1.rmt("y")Entfernt die Tabelle, wenn Formularelement EL1 leer ist beziehungsweise den Wert y hat.
 rmtp       Tabelle, in der sich das Steuerelement befindet, und den direkt darauf folgenden Paragraphen entfernen. Steht für remove table paragraphEL1.rmtp() EL1.rmtp("y") Entfernt die Tabelle und direkt folgenden Paragraphen, wenn das Formularelement EL1 leer ist beziehungsweise den Wert y hat.
 rep        Den gegebenen Wert durch einen anderen Wert ersetzen. Als Argument muss eine Zuordnung von Schlüsseln zu Werten übergeben werden, welche ersetzt werden sollen. Steht für replace.EL1.rep("on" # "x") EL1.rep("on" | "off" # "x" | "o") EL1.rep("on" | "off" | "aus" # "x" | "o" | "o")Der Wert on wird durch x ersetzt, der Wert off wird durch o und der Wert aus wird ebenfalls durch o ersetzt. ersetzt.
 cf         Ändert den Zeichensatz in Wingdings. Wird meist in Kombination mit der rep-Funktion genutzt. Steht für change font. EL1.rep("on" | "off" # "x" | "o").cf() Der Wert on wird durch x, off durch o ersetzt. Anschließend werden die Werte x und o  durch die entsprechenden Wingdings-Symbole (? und ?) ersetzt.
 image      Ersetze Feld mit Bild aus URL. Dabei können auch Breiten- und Höhenangaben mit übergeben werden. EL1.image() EL1.image("100" | "100") EL1.image("100") EL1.image("" | "100")Befüllt das Steuerelement mit dem Bild aus der URL, die im Formularelement EL1 steht. Beispiele für Höhenangaben: tfURL.image("579" | "410") wobei 579 die Breite und 410 die Höhe angibt. Sollte nur eine Breite (tfURL.image("579")) oder Höhe (tfURL.image("" | "410")) angegeben werden, wird das Bild skaliert um das ursprüngliche Seitenverhältnis beizubehalten.
 b64img      Wandelt Base64-String in ein Bild um. Dabei können auch Breiten- und Höhenangaben mit übergeben werden. EL1.b64img() EL1.b64img("100" | "100") EL1.b64img("100") EL1.b64img("" | "100")Interpretiert den Feldwert als Base64-String (in der Form iVBORw0KGgoAAAANSUhEUgAAABAAAA...) und fügt das Bild in das Dokument ein. Beispiele für Höhenangaben: tfBase64.b64img("579" | "410") wobei 579 die Breite und 410 die Höhe angibt. Sollte nur eine Breite (tfURL.b64img("579")) oder Höhe (tfURL.b64img("" | "410")) angegeben werden, wird das Bild skaliert um das ursprüngliche Seitenverhältnis beizubehalten.
 url        Erzeugt einen Link auf eine URL.  EL1.url() Fügt eine URL in das PDF-Dokument ein, die Adresse wird aus dem Formularelement EL1 genommen.
cb          Erzeugt eine angehakte Checkbox, wenn der übergebene Wert in der Liste der Werte des Elements vorhanden ist. Sonst ist diese nicht angehakt.  Steht für Checkbox.SEL1.cb("1" | "2" | "3") Erzeugt eine angehakte Checkbox, wenn SEL1 den Wert 1, 2 oder 3 hat, ansonsten eine nicht angehakte Checkbox.
 html 7.4.0+ HTML-Code wird interpretiert ausgegebentf1.html() Wenn in dem Textfeld tf1 z.B. <strong>mein Text</strong> hinterlegt ist, wird dieser dann als mein Text ausgegeben, anstatt dem HTML.

Probleme beim Erzeugen von Checkboxen

Wenn beim Einsatz der Funktion cb() im generierten PDF Dokument keine Checkbox angezeigt wird, liegt es wahrscheinlich an fehlenden Schriften auf dem Server. Dies tritt in der Regel nur auf, wenn der Server auf einem Linux-Server installiert wurde.

Um das Problem zu lösen gehen Sie bitte folgendermaßen vor:

  • Melden Sie sich auf dem Linux-Server, auf dem FORMCYCLE installiert ist, an der Konsole an.
  • Wechseln Sie zum Ordner für Systemschriften (unter Debian/Ubuntu ist dies z.B. /usr/share/fonts/truetype/) und prüfen Sie, ob die Schriften windings.ttf und windings2.ttf vorhanden sind. Hinweise zur Installation finden Sie auch unter dem Artikel Schriftarten .
  • Wenn nicht, kopieren Sie dies Schriften in den Ordner. Aus Lizenzgründen können wir diese Schriften nicht zur Verfügung stellen, so dass Sie diese selbst etwa von einem Windows Rechner kopieren müssen.
  • Starten Sie den Tomcat neu.

Ersetzen von Platzhaltern

Platzhalter können ebenfalls in die, in Word eingefüten, Formularfelder eingetragen werden.

Einfügen von HTML 7.2.0+ 

Einfügen eines Feldes.

Erstellen eines MergeFields.

Damit der Textinhalt eines Formularelements oder Platzhalters als HTML interpretiert werden kann, muss dieser sich in einem Word MergeField befinden. Die Erstellung eines MergeFields geschieht über Einfügen   Schnellbausteine   Feld, in dem erschienen Menü muss unter dem Reiter Feld auswählen, in dem Feld Feldnamen://, nun /MergeField ausgewählt werden und unter dem Reiter Feldeigenschaften, in dem Feld Feldname, der Name des zu ersetzenden Formularelments oder Platzhalters eingetragen werden.

Videos

Workshop-Video (Der Workshop bezieht sich auf FORMCYCLE Version 6. Die grundsätzlichen Inhalte sind aber auf Version 7 übertragbar)