Xpd-Syntax

CIB-Druckdateien werden im Textformat in Dateien mit der Namenserweiterung "xpd" hinterlegt. Zum Umgang mit den Druckdateien gibt es einen Druckdateibetrachter und einen Pdf-Erzeuger. Der Druckdateibetrachter ist über das Menü des Beton.NET-Hauptfensters aufrufbar. Sowohl der Druckdateibetrachter als auch der Pdf-Erzeuger sind im Servicetool enthalten. Die Druckdatei-Anzeige per Kommandozeilenparameter ist durch das Servicetool möglich.

Die folgende syntaktische Beschreibung ist vordergründig nicht für den Anwender vorgesehen. Die hier beschriebenen Befehle kommen in den Druck-Formularen zum Einsatz und können daher trotzdem besonders versierten Anwendern bei eigenen Formularanpassungen von Nutzen sein.

1. Grundsätze

Das Programm verwaltet eine aktuelle Position je Druckseite in x-y-Koordinaten von links nach rechts bzw. von oben nach unten in der Maßeinheit "cm". Die Befehle laut folgender Liste dienen zur Ausgabe von graphischen Elementen (Text, Linien und anderen) an der aktuellen Position bzw. zur Veränderung der aktuellen Position. Befehle sowie deren Parameter sind durch mindestens ein Leerzeichen oder Tabulator zu trennen; zu einem Befehl gehörende Parameter müssen in derselben Zeile wie der Befehl stehen. Mit runden Klammern eingeklammerte Teile einer Zeile werden überlesen, wenn die Klammern paarweise als Einzelzeichen oder an Befehlsanfang/-ende stehen.
Das Programm verwaltet ebenfalls eine aktuellen Tabulator-Nr. Jedem Tabulator kann eine horizontale Position zugeordnet werden.
Die Seitenwechsel erkennt das Programm am Steuerzeichen "FormFeed", Ascii-Code 12 (hex. C). Beim Seitenwechsel werden folgende Default-Einstellungen vorgenommen: Randeinstellungen zu Null, aktuelle Position auf die Koordinaten (0,0), aktuelle Tab-Nr auf -1, Tabulatoren und Schrift siehe unten.

2. Befehlsliste mit Syntaxbeispiel

Befehl / BeispielErläuterung
nwlneue Zeile: erhöht die aktuelle y-Position um den Zeilenabstand, setzt die aktuelle x-Position auf Null und die aktuelle Tab-Nr auf den (fiktiven) Wert -1
txt "Text"stellt nachfolgenden Text linksbündig mit der aktuellen Schrift an der aktuellen Position dar; die aktuelle Position wird dabei nicht verändert
rtxt "Text"ähnlich txt, der Text wird aber rechtsbündig an der aktuellen Position ausgerichtet
ctxt "Text"ähnlich txt, der Text wird aber horizontal zentriert an der aktuellen Position ausgerichtet
3.0 2.0 tbox "Text"stellt Text beginnend an der aktuellen Position in einem Rechteck linksbündig dar; im Text vorhandene Zeichenfolgen "\n" erzwingen einen Zeilenwechsel, aber nur einen einzigen auch für mehrere direkt aufeinanderfolgende, wie bei "\n\n"
5.0 5.0 mapsetzt die aktuelle Position auf die angegebenen x-y-Koordinaten
1.0 0.5 mrpverändert die aktuelle Position relativ um die angegebenen x-y-Koordinaten
1 2.5 settabdefiniert eine Tabulatorposition mit der angegebenen Tab-Nummer auf die angegebene x-Koordinate; wenn der Tabulator schon existiert, wird dessen Koordinate angepasst, wenn er noch nicht existiert, wird die Folge der Tabulatoren bis zur gewünschten Tab-Nr vergrößert, zwischenliegende Tabulatoren erhalten die Koordinate Null; Details siehe unten
1 mtta) verändert den aktuellen Tabulator auf die angegebene Nummer und b) verändert die aktuelle x-Koordinate auf den zugehörigen Wert
mnta) erhöht den aktuellen Tabulator um 1 auf den nächsten Tabulator und b) verändert die aktuelle x-Koordinate auf den Wert des nächstfolgenden Tabulators; der erste mnt-Befehl auf einer neuen Seite oder auf einer neuen Zeile erhöht den aktuellen Tabulator von seinem Ausgangswert -1auf die erste Tabulatorposition (diejenige mit der Nummer Null)
stf "Arial"wählt die Schriftart mit diesem Namen, die Schriftgröße bleibt unverändert; die Schriftart muss installiert sein; gleichbedeutend ist setfont; Details siehe unten

0.3 sfh
wählt eine Schrift, die diesen Zeilenabstand hat; die Schriftart bleibt unverändert; gleichbedeutend ist setfontheight; Details siehe unten
7 sfaSchrift-Attribute: 1=fett, 2=unterstrichen, 4=kursiv, auch kombiniert zulässig; bleibt auch beim Wechsel der Schrift (Art und Größe) erhalten, bis zum nächsten Seitenwechsel oder bis zum nächsten sfa-Befehl; "0 sfa" entfernt alle Attribute
#7799bb sbcFüll- bzw. Hintergrundfarbe durch rot-grün-blau-Anteile festlegen, ggf. kann auch noch ein Alphawert für die transparenz der Farbe vorangestellt werden #cc7799bb, Rücksetzen auf Standard durch #0 (Auswahl an Farben)
blue sbcFüll- bzw. Hintergrundfarbe durch Windows-Farb-Namen festlegen, Standard ist "black". (Auswahl an Farben)
#7799bb sfcSchrift- und Vordergrundfarbe durch rot-grün-blau-Anteile festlegen, ggf. kann auch noch ein Alphawert für die transparenz der Farbe vorangestellt werden #cc7799bb, Rücksetzen auf Standard durch #0 (Auswahl an Farben)
blue sfcSchrift- und Vordergrundfarbe durch Windows-Farb-Namen festlegen, Standard ist "black" (Auswahl an Farben)
1 qualQualität der Textausrichtung; Wertevorrat 0 (normal) und 1 (exakter)
900 sfoSchriftorientierung; nur die Werte 0 (waagrecht von links nach rechts) und 900 (senkrecht von oben nach unten) sind zulässig; gleichbedeutend ist setfontorientation; zum Pdf-Format bitte den Hinweis im nächsten Absatz beachten
0 spoPapierorientierung: 0=Hochformat, 1=Querformat; nur das erstmalige Vorkommen in gesamten Dokument wird beachtet; gleichbedeutend ist setpageorientation
1 setpaperbinPapierschacht; laufende Nr von 1 bis 9; die Bedeutung hängt vom jeweiligen Drucker ab; das Programm setzt die Druckereigenschaft PaperSource auf Schachtnummer minus 1, also auf 0 bis 8. Bei einem Testdrucker bedeutete "PaperSource=0" zum Beispiel "automatische Schachtauswahl". Mit dem ServiceTool lassen sich die Schächte der am jeweiligen Computer installierten Drucker anzeigen. Der Befehl wirkt sich auf die Seite nach dem danach folgenden Seitenwechsel aus. Besonderheit: Wenn der Befehl als erster Befehl einer Seite steht, wirkt er schon für diese aktuelle Seite; Bedingung in diesem Fall: Seitenwechselzeichen und Papierschachtbefehl müssen jeweils als einzelne Befehle je Zeile stehen.
1.5 stmstellt den oberen Seitenrand ein; wirkt so, als ob alle absoluten y-Koordinaten um diesen Wert erhöht wären; der Defaultwert bei Beginn einer Seite ist Null
1.5 slmstellt den linken Seitenrand ein; wirkt so, als ob alle absoluten x-Koordinaten um diesen Wert erhöht wären; der Defaultwert bei Beginn einer Seite ist Null
3.0 0.8 scrschränkt den sichtbaren Bereich für die folgenden Graphikausgaben ein; nur Ausgaben im angegebenen Rechteck von der aktuellen Position aus bleiben sichtbar; wenn eine der beide Koordinaten Null ist, wird die Einschränkung aufgehoben und der sichtbare Bereich wird wiederum auf die gesamte Seite ausgedehnt
0.05 spdStrichstärke für Linien und Kästen; die Einheit ist schwer plausibel: 0.025 entspricht (abhängig von Papiergröße und Auflösung) etwa einem Pixel; das ist der Default-Wert bei Beginn einer neuen Seite
5.0 1.0 boxRechteck an der aktuellen Position mit der angegebenen Größe
5.0 1.0 blkBalken an der aktuellen Position mit der angegebenen Größe; der Balken ist ein Recheck, das zusätzlich mit einem Hintergrund ausgefüllt ist
5.0 5.0 dapLinie von den aktuellen Position aus zu den angegebenen absoluten Koordinaten; wenn die x-Koordinaten der aktuellen Position und des angegebenen Punktes gleich sind, entsteht eine senkrechte Linie, wenn die y-Koordinaten gleich sind, entsteht eine waagrechte Linie; Achtung!: die Befehle "dap" und "drp" ändern zugleich die aktuelle Position auf die angegebenen Koordinaten - im Gegensatz zu "box", "blk"
3.0 0.0 drpLinie von der aktuellen Position aus um diese relative Position; wenn der erste Parameter Null ist, entsteht eine senkrechte Linie, wenn der zweite Parameter Null ist, entsteht eine waagrechte Linie
15 patHelligkeit der Füllung eines Balkens; Wertevorrat: 0 (= keine Helligkeit, also schwarz) bis 15 (= recht hell, blass)
5.0 4.0 bmp "Bild.jpg"stellt das Bild an der angegebenen Koordinate dar; das Bild wird so gestreckt/geschrumpft, dass es das angegebene Rechteck genau ausfüllt; Bildformate jpg und bmp werden unterstützt
5.0 4.0 barcode "CODE128T*|Inhalt"vor Trennstrich steht Kennung CODE128 oder CODE39 oder abgekürzt nur "128" oder "39"; daran anschließen können sich die Zeichen T (stellt den Text unter dem Barcode dar), Zeichen * (schließt den Text in Sternzeichen ein) und Zeichen P (fügt Prüfbyte an). Die Zusatzzeichen werden nur bei CODE39 unterstützt. Der Inhalt darf bei CODE128 Textzeichen enthalten, bei CODE39 nur Ziffern.
3 giro "|Wikimedia|DE33100205000001194700|EUR123.45|||Spende|Info"stellt den Code zur Bezahlung an der aktuellen Position in einem Quadrat mit der angegebenen Größe dar; der Inhalt besteht aus "BIC|Empfänger|IBAN|Betrag|Code|Referenz|Zahlungsgrund|Info", wobei Regeln zur Syntax/Auslassbarkeit/Stelligkeit einzuhalten sind; ein einleitendes # erzeugt zu Testzwecken eine jpg-Datei
3 variable VAR1definiert unter dem angegebenen Namen einen ganzzahligen Wert, der bei folgenden @-Befehlen verwendet werden kann
11.5 2variable VAR2definiert unter dem angegebenen Namen einen dezimalen Wert, der bei folgenden 2@-Befehlen verwendet werden kann
2.0 0.3 f+addiert die beiden vorstehenden Werte zueinander; die drei Elementen gemeinsam vertreten einen einzelnen Zahlenwert, der von einem folgenden Befehl verwendet werden soll; Beispiel: "1.0f 2.0f 0.3 f+ map" hat dieselbe Wirkung wie "1.0f 2.3f map"; diese Syntax hat z.B. dann einen Sinn, wenn einer der beiden Werte eine Variable ist
2.0 0.3 f-subtrahiert den vorstehenden Wert vom vorletzten Wert; analog zu f+; Beispiel: "1.0f 2.0f 0.3f f- map" hat dieselbe Wirkung wie "1.0 1.7 map"
VAR1 @verwendet die zuvor definierte ganzzahlige Variable; die beiden Elemente gemeinsam vertreten einen einzelnen Zahlenwert, der von einem folgenden Befehl verwenden werden soll
VAR2 2@verwendet die zuvor definierte dezimale Variable; analog zu @
!R!Beginn der xpd-Syntax (veraltet, wird ignoriert); vor Beginn und nach Ende der xpd-Syntax konnte in früheren Versionen des Druckdateibetrachters Klartext stehen, der damals "im befehlslosen Modus" ohne Benutzung der xpd-Formatierung dargestellt wurde; diese Funktion wird nicht mehr unterstützt
exitEnde der xpd-Syntax (veraltet, wird ignoriert)
forget VAR1macht Variable ungültig (veraltet, wird ignoriert); in früheren Versionen des Druckdateibetrachters durften Variable nur einmalig definiert werden und mussten vor einer erneuten Definition durch diesen Befehl ungültig gemacht werden

3. Hinweise / Vereinfachungen

- Buchstabe "f" nach Zahlen kennzeichnet den Datentyp "float"=Dezimalzahl; er kann weggelassen werden
- die "2" vor "variable" und vor "@" kann weggelassen werden
- zusätzlich zu . (Punkt) ist auch , (Komma) als Dezimaltrennzeichen zulässig
- Klammern zum Auskommentieren werden auch ohne Leerzeichen zum umschlossenen Befehl erkannt
- Gänsefüßchen um Textzeichenfolgen/Dateinamen/Schriftart können dann und nur dann weggelassen werden, wenn der Text aus einem einzigen Wort besteht, also keine Leerzeichen enthält, und wenn der Text nicht zufällig mit einem xpd-Befehl identisch ist; es ist also Vorsicht geboten; bedenkenlos ist z.B. folgendes zulässig: 1 1 map txt [BETRAG]
- die Befehle "variable", "@", "f+" und "f-" sind zwar verwendbar; von ihrer Verwendung wird aber abgeraten; man sollte besser das jeweilige Formular oder bei Bedarf das Druckprogramm besser gestalten, um ohne diese Syntaxelemente auszukommen.
- bitte Fehlerhinweise im Druckdateibetrachter laut Warnsymbol (gelbes Dreieck) beachten und - falls vorhanden - beheben
- zwischen den Befehlen 900 sfo und 0 sfo dürfen beim Pdf-Format keine Befehle stehen, die die aktuelle Schreibposition verändern (wie map, mnt, nwl und andere). Das technische Gründe, weil die Pdf-Bibliotheken keine Änderung der Schriftausrichtung unterstützen und daher das gesamte Koordinatensystem gedreht werden muss.

4. Besondere Funktionen

Mit "load" oder "bmp" eingebundene Dateien können an verschiedenen Stellen stehen; das Programm sucht sie a) mit angegebenem Pfadnamen, b) im aktuellen Verzeichnis, c) im Formularverzeichnis, d) im Druckdatenverzeichnis und e) im Verzeichnis der xpd-Datei; wenn eine bmp/jpg-Datei an allen fünf Stellen nicht vorhanden ist, wird stattdessen "Bild fehlt" dargestellt.

Bei jedem Seitenwechsel werden als Defaultwerte 30 Tabulatoren auf die Positionen 2.0f, 4.0f bis 60.0f eingestellt. Folgende settab-Befehle können bei Verwendung der Tab-Nr 0 bis 29 diese Default-Koordinaten ändern oder bei Verwendung größerer Tab-Nr weitere Tabulatoren zufügen.

Solange keine explizite Auswahl getroffen wurde, verwendet der Druckdateibetrachter bei jedem Seitenwechsel eine Default-Schrift nach folgenden Regeln:
a) bevor eine neue Schriftart und eine neue Größe gewählt wurde: "Courier New" mit Größe 0.4f
b) solange nur neue Größe, aber keine Schriftart ausgewählt wurde: "Times New Roman"
c) solange nur neue Schriftart, aber keine Größe ausgewählt wurde: Größe 0.2f
Diese Funktionsweise ist historisch bedingt, um die früher mit CIBView (unter dBASE) benutzten Formulare weiterverwenden zu können.

Die Schriftgröße wird so gewählt, dass der entstehende Zeilenabstand dem vorgegebenen Zahlenwert entspricht. Es gibt in de Regel mehrere benachbarte Schriftgrößen, die denselben Zeilenabstand haben, die sich aber zum Beispiel in der Schriftbreite unterscheiden können. Das Programm ermittelt daher zunächst die kleinste und die größte Schrift für den vorgegebenen Zeilenabstand und verwendet dann die mittlere der so eingegrenzten Schriftgrößen.
Hierfür ein Zahlenbeispiel: Laut Befehl "setfont" oder "shf" wird die Schriftart Arial in der Größe 0,30 gewünscht. Das Programm rechnet die Größe 0,30 cm in Pixel um, im Beispiel ergibt das 11,81. Da die Schrifthöhe ein ganzahliger Wert ist, wird eine Schrift mit der Höhe 12 gesucht. Für alle Schriftgrößen von 9,57 (minimale Größe) bis zur 10,43 (Maximalwert) beträgt die Schrifthöhe 12. Das Programm verwendet daher diejenige Schrift mit der Schriftgröße 10,00.