Wiki-Quellcode von Voraussetzung Word


Zeige letzte Bearbeiter
1 {{content/}}
2
3 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.
4
5 == Word-Version ==
6
7 Es werden alle Versionen ab Word 97 unterstützt.
8
9 == Einfügen von Formularfeldern ==
10
11 {{figure image="WordDevTools.png" width="400"}}
12 Aktivieren der Registerkarte //Entwicklertolls// in den Otionen unter //Datei// {{rarrow/}} //Optionen//.
13 {{/figure}}
14
15 Um Bereiche im Word-Dokument mit Inhalten aus Formularfeldern zu befüllen, müssen sogenannte Textformularfelder (Formularsteuerelemente) in das Word-Dokument eingefügt werden.
16
17 Hierzu muss in Word oben in die Registerkarte //Entwicklertools// gewechselt werden. Wird diese nicht angezeigt, kann sie über //Datei// {{rarrow/}} //Optionen// {{rarrow/}} Menüband anpassen {{rarrow/}} //Häkchen rechts bei Entwicklertools// eingeblendet werden.
18
19 {{figure image="WordElement.png" width="400"}}
20 Einfügen eines Formularsteuerelements mit den Entwicklertools. Dieses wird dann durch Formularwerte ersetzt.
21 {{/figure}}
22
23 Nun kann in den //Entwicklertools// im Abschnitt //Steuerelemente// ein //Textfeld (Formularsteuerelement)// in das Word-Dokument eingefügt werden.
24
25 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.
26
27 {{info}}
28 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//.
29 {{/info}}
30
31 {{info}}
32 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.
33 {{/info}}
34
35 Siehe hierzu auch [[wiederholte Felder>>Formcycle.Designer.Form.ElementProperties.BaseProperties]].
36
37 == Beispiel ==
38
39 Im Folgenden nun ein einfaches Beispiel zur Verdeutlichung.
40
41 {{figure image="WordFillExample2.png" width="400"}}
42 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.
43 {{/figure}}
44
45 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.
46
47 == Word-Fill-Funktionen ==
48
49 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.
50
51 Zum Beispiel ist bei [[Auswahlelementen>>Formcycle.Designer.Form.FormElements.Selection]] 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.
52
53 {{code language="none"}}
54 sel1.lsttxt()
55 {{/code}}
56
57 === Format ===
58
59 Word-Fill-Funktionen haben immer das folgende Format (Anführungszeichen werden unterstützt ab {{version major="7" minor="1"/}}):
60
61 ==== Word-Function ====
62
63 {{code language="none"}}
64 <Word-Function> = <Field-Name> ["." <Function-Name> "(" <Argument>? ")" ] *
65 {{/code}}
66
67 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.
68
69 {{code language="none"}}
70 sel1
71 sel1.funktion1()
72 sel1.funktion1(argument)
73 sel1.funktion1().funktion2()
74 sel1.funktion1(argument).funktion2().funktion3()
75 {{/code}}
76
77 ==== Argument ====
78
79 {{code language="none"}}
80 <Argument> = <ArgList> | <ArgMap>
81 {{/code}}
82
83 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.
84
85 ==== ArgList ====
86
87 {{code language="none"}}
88 <ArgList> = <Value> [ "|" <Value> ] *
89 {{/code}}
90
91 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.
92
93 {{code language="none"}}
94 sel1.function(wert1)
95 sel1.function(wert1|wert2)
96 sel1.function(wert1|wert2|wert3)
97 {{/code}}
98
99 ==== ArgMap ====
100
101 {{code language="none"}}
102 <ArgMap> = <ArgList> "#" <ArgList>
103 {{/code}}
104
105 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.
106
107 {{code language="none"}}
108 sel1.function(schlüssel1#wert1)
109 sel1.function(schlüssel1|schlüssel2#wert1|wert2)
110 sel1.function(schlüssel1|schlüssel2|schlüssel3#wert1|wert2|wert3)
111 {{/code}}
112
113 ==== Value ====
114
115 {{code language="none"}}
116 <Value> = <Unquoted-String> | <Singly-Quoted-String> | <Doubly-Quoted-String>
117 {{/code}}
118
119 Jeder Wert ist dabei im einfachsten Fall nur eine Zeichenfolge.
120
121 {{code language="none"}}
122 sel1.function(Ein Wert)
123 sel1.function(Noch ein Wert)
124 sel1.function(Wert1|Wert2)
125 {{/code}}
126
127 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 ({{version major="7" minor="1"/}}). Werte ohne Anführungszeichen existieren aus Kompatibilitätsgründen, die Nutzung von Anführungszeichen wird empfohlen und ist nie verkehrt.
128
129 {{code language="none"}}
130 sel1.function('Wert (mit) Klammern')
131 sel1.function("Wert (mit) Klammern")
132 sel1.function("Wert einem Punkt und einer Raute #.")
133 sel1.function('Wert#1'|'Wert#2')
134 {{/code}}
135
136 Weiterhin können innerhalb von Werten mit Anführungszeichen spezielle Escape-Sequenzen verwendet werden:
137
138 {{code language="none"}}
139 sel1.function("Otto sagte: \"Es regnet\"")
140 sel1.function('Otto sagte: \"Es regnet\'')
141 sel1.function("Mit dem Zeichen \\ werden Escape-Sequenzen eingeleitet")
142 sel1.function("Zeilenumbruch: \r\n")
143 sel1.function("Tabulator: \t")
144 sel1.function("Unicode-Zeichen: \u578b")
145 {{/code}}
146
147 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):
148
149 {{code language="none"}}
150 sel1.function(Test)
151 sel1.function( Test)
152 {{/code}}
153
154 Bei Nutzung von Anführungszeichen sind Leerzeichen vor oder nach dem Anführungszeichen egal. Das folgende hat die gleiche Bedeutung:
155
156 {{code language="none"}}
157 sel1.function("Test")
158 sel1.function( "Test")
159 {{/code}}
160
161 == Verfügbare Funktionen ==
162
163 {{table dataTypeAlpha="0" preSort="0"}}
164 |= Funktion |= Beschreibung |= Beispiele |= Erläuterung
165 | empty {{version major="7" minor="2"/}}|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>>Formcycle.Designer.Form.FormElements.Selection]] gewählt wurde. Andernfalls wird //0// zurückgeliefert.
166 | lsttxt |Ersetzung aller Werte einer Auswahl mit dem Text-Wert. Steht für //list text.//|sel1.lsttxt() |Liefert den Text-Wert des [[Auswahlelements>>Formcycle.Designer.Form.FormElements.Selection]] mit Namen //sel1// zurück
167 | 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.
168 | 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.
169 | 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//.
170 | 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>>Formcycle.Designer.Form.ElementProperties.BaseProperties]] Auswahlelements //sel1//.
171 | rmp |Einen Absatz (Paragraphen) entfernen. Steht für //remove paragraph.// |{{{EL1.rmp()
172 EL1.rmp("x")}}} |Entfernt Zeile und Paragraphen, wenn Inhalt des Elements leer ist beziehungsweise den Wert //x// hat.
173 | rmr |Tabellenzeile löschen, in der sich das Steuerelement befindet. Steht für //remove row.// |{{{EL1.rmr()
174 EL1.rmr("x")}}} |Entfernt die Zeile der Tabelle, wenn das Formularelement //EL1// leer ist beziehungsweise den Wert //x// hat.
175 | rmt |Tabelle löschen, in der sich das Steuerelement befindet. Steht für //remove table.// |{{{EL1.rmt()
176 EL1.rmt("y")}}}|Entfernt die Tabelle, wenn Formularelement //EL1// leer ist beziehungsweise den Wert //y// hat.
177 | rmtp |Tabelle, in der sich das Steuerelement befindet, und den direkt darauf folgenden Paragraphen entfernen. Steht für //remove table paragraph//. |{{{EL1.rmtp()
178 EL1.rmtp("y")}}} |Entfernt die Tabelle und direkt folgenden Paragraphen, wenn das Formularelement //EL1// leer ist beziehungsweise den Wert //y// hat.
179 | 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")
180
181 EL1.rep("on" | "off" # "x" | "o")
182
183 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.
184 | 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.
185 | image |Ersetze Feld mit Bild aus URL. Dabei können auch Breiten- und Höhenangaben mit übergeben werden. |{{{EL1.image()
186 EL1.image("100" | "100")
187 EL1.image("100")
188 EL1.image("" | "100")}}}|Befüllt das Steuerelement mit dem Bild aus der URL, die im Formularelement //EL1// steht. Beispiele für Höhenangaben: {{code language="none"}}tfURL.image("579" | "410"){{/code}} wobei 579 die Breite und 410 die Höhe angibt. Sollte nur eine Breite ({{code language="none"}}tfURL.image("579"){{/code}}) oder Höhe ({{code language="none"}}tfURL.image("" | "410"){{/code}}) angegeben werden, wird das Bild skaliert um das ursprüngliche Seitenverhältnis beizubehalten.
189 | b64img |Wandelt Base64-String in ein Bild um. Dabei können auch Breiten- und Höhenangaben mit übergeben werden. |{{{EL1.b64img()
190 EL1.b64img("100" | "100")
191 EL1.b64img("100")
192 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: {{code language="none"}}tfBase64.b64img("579" | "410"){{/code}} wobei 579 die Breite und 410 die Höhe angibt. Sollte nur eine Breite ({{code language="none"}}tfURL.b64img("579"){{/code}}) oder Höhe ({{code language="none"}}tfURL.b64img("" | "410"){{/code}}) angegeben werden, wird das Bild skaliert um das ursprüngliche Seitenverhältnis beizubehalten.
193 | 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.
194 |cb |Erzeugt eine angehakte [[Checkbox>>Formcycle.Designer.Form.FormElements.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.
195 | html {{version major="7" minor="4"/}}|HTML-Code wird interpretiert ausgegeben|tf1.html() |Wenn in dem Textfeld tf1 z.B. <strong>mein Text</strong> hinterlegt ist, wird dieser dann als **mein Text** ausgegeben, anstatt dem HTML.
196 {{/table}}
197
198 == Probleme beim Erzeugen von Checkboxen ==
199
200 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.
201
202 Um das Problem zu lösen gehen Sie bitte folgendermaßen vor:
203
204 * Melden Sie sich auf dem Linux-Server, auf dem FORMCYCLE installiert ist, an der Konsole an.
205
206 * 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 >>https://wiki.ubuntuusers.de/Schriftarten/]].
207
208 * 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.
209
210 * Starten Sie den Tomcat neu.
211
212 == Ersetzen von Platzhaltern ==
213
214 Platzhalter können ebenfalls in die, in Word eingefüten, Formularfelder eingetragen werden.
215
216 == Einfügen von HTML {{version major="7" minor="2"/}} ==
217
218 {{figure image="addField_de.png" width="400"}}
219 Einfügen eines Feldes.
220 {{/figure}}
221
222 {{figure image="mergeField_de.png" width="400"}}
223 Erstellen eines //MergeFields//.
224 {{/figure}}
225
226 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// {{rarrow/}} //Schnellbausteine// {{rarrow/}} //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.
227
228 == Videos ==
229
230 [[Workshop-Video>>https://help6.formcycle.eu/xwiki/bin/view/Workshops/2020/052020%20Teil%202%20-%20Word%20Fill/]] (Der Workshop bezieht sich auf FORMCYCLE Version 6. Die grundsätzlichen Inhalte sind aber auf Version 7 übertragbar)