===== Formatierung in Textblöcken =====
==== Anforderung ====
Motivation für die Einführung von Textblöcken in (p2f) war die Beobachtung, dass in sehr vielen Formualaren noch grosse Anteile von Texten enthalten sind, die zudem noch eine erhöhte Änderungswahrscheinlichkeit haben. Das sind beispielsweise die Geschäftsangaben mit Adresse, Telephonnummern und Geschäftsführern oder etwa Rücksendegründe auf Versandpapieren.
Sind diese Texte Bestandteil eines in (p2f) importierten Formulars, muss im Bedarfsfall das Formular geändert und neu importiert werden. Je nachdem ein nicht unbedeutender Aufwand. Es wäre also wartungsfreundlicher, wenn bestimmte Texte des Formulars direkt im Administrationsprogramm von (p2f) geändert werden könnten.
In den bisherigen Versionen von (p2f) liess sich diese Anforderung im Prinzip schon lösen, wenn für jeden Text ein Textfeld im Formular angelegt wird. Das ist aber sehr aufwändig, weil für jeden Text die Position neu errechnet werden muss, und weil Formatierungen - etaw im Sinne von Fett- oder Kursivschrift - ein neues Textfeld erfordern.
\\
\\
==== Realisierung ====
Ab der Build-Nummer 5830 des (p2f)-Clients und der Build-Nummer 3104 des (p2f)-Gateways steht nunmehr ein sogenanntes **Textblockfeld** zur Verfügung, das mehrzeilige Texte enthalten kann, und einige Möglichkeiten der Text(-)formatierung via eines bestimmten [[https://de.wikipedia.org/wiki/Auszeichnungssprache|Markups]] anbietet. ((Diese Builds sind in (p2f)-Installern mit Build-Nummern grösser als 290 enthalten.\\ \\ ))
Weitere Informationen dazu sind in der Beschreibung der [[print2forms:objekte:ovl:txtblk|Schablone]] für den Textblock enthalten.
\\
\\
{{print2forms:tips:0084-1.png}}
Ausgabe auf Drucker:\\ \\ {{print2forms:tips:0084-2.png}}
\\
=== Skalierungsfaktor ===
Der Skalierungsfaktor ist eine Dezimalziffer '0' bis '9', was einer Skalierung von 100% bis 190% entspricht. Der Skalier(-)ungsfaktor wirkt zum einen auf die Einstellungen **Schriftgrösse** als auch auf **Zeilenvorschub** des Textblockfeldes. Ausserdem wird auch noch die mit dem Markup '''I'' erzeugte Einrückung entsprechend angepasst.
Demzufolge ist bei einer Schriftgrösse von 12 Punkten ein mit dem Markup '''0'' versehener Text 12 Punkte gross, während einer mit '''5'' schon 18 Punkte gross ist. Gleichzeitig mit der Schriftgrösse ändert sich auch der Zeilenabstand. Ein Markup von '''5'' bedeutet einen 1.5-zeiligen Abstand - aus 6 Zeilen pro Zoll (12 Punkte) werden 4 Zeilen pro Zoll (18 Punkte). ((Maximum für die Schriftgrösse wäre hier 22.8 Punkte und für den Zeilenabstand 3.15 Zeilen pro Zoll.\\ \\ ))
Das kann sehr effektiv für die Gestaltung des Textes eingesetzt werden.
Im obigen Beispiel ist schon am Ende der ersten Zeile zu sehen, dass mit '''3'' und dem '''2'' am Anfang der nächsten Zeile der Zeilenabstand etwas vergrössert wird. Dass sorgt für den erhöhten Durchschuss unter 'Passform' und lässt 'Passform' als Überschrift erscheinen. Das gleiche gilt in der viertletzten Zeile, in der mit '''4'' gefolgt von '''2'' in der drittletzten Zeile die Liste 'zu kurz:' vertikal abgesetzt wird.
\\
\\
=== Einrückung ===
Mit dem Markup '''I'' kann eine horizontale Einrückung (in Form einer absoluten Positionierung) erzeugt werden, die auch vom Skalierungsfaktor abhängig ist (erster Textblock im neben(-)stehender Abbildung).
Das kann dazu genutzt werden, tatsächlich [[https://de.wikipedia.org/wiki/Einzug_(Typografie)|hängende Einzüge]] zu erzeugen (zweiter Textblock im neben(-)stehender Abbildung), oder für die Formatierung von Auf(-)zähl- oder Ankreuzlisten (dritter Text(-)block im neben(-)stehender Abbildung).
Dabei wird durch den Skalier(-)ungsfaktor unmittelbar vor der Einrückung für den nötigen Abstand gesorgt. Nach der Ein(-)rückung muss dann über einen weiteren Skalierungs(-)faktor wieder die ursprüngliche Schriftgrösse hergestellt werden.
{{print2forms:tips:0084-3.png }}{{print2forms:tips:0084-4.png }}
=== Zeilenumbruch ===
Normalerweise sind die in der Schablone des Textblockfeldes eingegebenen Texte bereits auf Zeilen verteilt. Es gibt aber Anwendungsfälle, in denen das nicht der Fall sein kann, weil in der Schablone zum Beispiel variabler Text aus den Druckdaten eingefügt werden muss. Klassischer Fall ist die Einbettung des Namens einer Bank beim Avis eines Last(-)schrifteinzugs.
Aus diesem Grund gibt es in den Einstellungen des Textblocks eine **Zeilenlänge**. Diese wird nicht in Punkten, Milli- oder Zentimetern angegeben, sondern in **Zeichen je Zeile**. ((Das ist eine Folge des simplen Algorithmus zum Zeilenumbruch. Bei proportionaler oder typographischer Schrift ist das natürlich relativ ungenau, weil die Zeichenbreiten ja variieren. In der Praxis liefert es aber trotzdem brauchbare Resultate. Evenutell muss man mit der Zeilenlänge etwas justieren.\\ \\ ))
\\
\\
{{print2forms:tips:0084-5.png}}
\\
\\
{{ print2forms:tips:0084-6.png}} Der Text innerhalb der Schablone wird sinnvollerweise natürlich ohne einen Zeilenumbruch geschrieben. Im Beispiel enthält die Schablone zu Vergleichszwecken zwei unter(-)schiedlich formatierte Texte mit einem einzusetzenden Banknamen.
Der Zeilenumbruch erfolgt selbstverständlich erst, nachdem alle variablen Daten innerhalb der Schablone eingesetzt worden sind.
Da (p2f) die Laufweiten der Texte nicht korrekt ermit(-)teln kann, wird ein Umbruch beim Erreichen einer maximalen Anzahl von Zeichen innerhalb einer Zeile eingefügt. Die Position wird soweit zurückgeschoben, bis eine Wortgrenze ((Als Wortgrenze gelten Leerzeichen, Bindestriche, Schrägstriche und das Trennkennzeichen (Markup '''-'').\\ \\ )) erreicht ist. Wie im oberen Textblock zu sehen ergibt das je nach Wort(-)längen mehr oder minder schönen [[https://de.wikipedia.org/wiki/Flattersatz|Flattersatz]].
Etwas mildern kann man den Flattersatz, indem man im Text Trennpunkte zwischen den Silben markiert. Das geschieht mit dem Markup '''-''. Liegt ein solcher Trennpunkt in der Nähe des Zeilenendes wird er aktiviert, indem ein Bindestrich ausge(-)geben und die Zeile unmittelbar danach umgebrochen wird. Im unteren Textblock ist zu sehen, wie das Wort 'veranlassen' vor der letzten Silbe getrennt worden ist.
In beiden Textblöcken ist auch zu sehen, dass der eingefügte Name der Bank 'Sparkasse Langen-Seligenstadt' ebenfalls am Bindestrich getrennt worden ist.
\\
\\
=== Zeilenunterdrückung ===
Die Motivation für einen Mechanismus zur Unterdrückung von Zeilen resultiert aus dem Wunsch, Texte vertikal zusammen(-)zuschieben, wenn irgendwelche optionalen Bestandteile fehlen. Das ist zum Beispiel bei Adressfeldern der Fall, bei denen durchaus einmal ein oder zwei Zusatzzeilen für den Absender benötigt werden können. Damit diese Zusatzzeilen nicht weissen Leerraum hinterlassen, wenn sie nicht gefüllt sind, sollten die nachfolgenden Zeilen 'hochgezogen' werden.
{{print2forms:tips:0084-7.png }}Dazu gibt es im Textblockfeld ein Markup '''s'', welches den Anfang einer optionalen Zeile definiert. In der Regel folgt nach dem Markup innerhalb der Schablone die Ausgabe von variablen Daten aus dem Druckdaten.
Unter der Annahme, dass mit 'Adresse1' bis 'Adresse3' bis zu drei Empfängerangaben aus den Druckdaten auf(-)ge(-)nommen wurden, erzeugt der Textblock je nach Umfang der Empfängerangaben die nachfolgend gezeigten Ausgaben.
Die Leerzeile nach dem Empfänger bleibt immer erhalten.
{{print2forms:tips:0084-8.png}}
\\
\\