Verkaufte Tickets können auf zwei Arten an die Kundschaft kommen:

  • als A4-PDF-E-Ticket per E-Mail oder Download — druckbar auf jedem Drucker
  • als BOCA-Direkt-Druck im Format 203 × 83 mm, direkt am Counter — setzt einen BOCA-Ticketdrucker voraus

Wenn du das PDF-E-Ticket oder die Bestellprozesse tiefer anpassen möchtest, gibt es im Shop-Modul mehrere Injection-Punkte (HTML-/CSS-/JS-Injection). Siehe dazu die Shop-Dokumentation.

Inhalt

E-Ticket (PDF)

Das E-Ticket ist ein A4-PDF, das beim Kauf automatisch erzeugt und an die Kundschaft per E-Mail verschickt sowie zum Download angeboten wird. Es kann auf jedem handelsüblichen Drucker (Tinte, Laser, mobile Drucker) gedruckt werden — der QR-Code am Einlass funktioniert genauso wie beim BOCA-Direkt-Druck.

Ticketfelder im Standard-Layout

Die auf dem Standard-Ticket abgedruckten Informationen werden aus folgenden Werten generiert:

FeldBeschreibung
1. TitelTitel aus dem Shop Event
2. OrtOrt aus dem Shop Event
3. DatumDatum des Events
4. Beginn / EinlassBeginn und Einlass aus dem Ablauf des Events
5. KategoriePlatzkategorie des Kontingents
6. PreisPreis des Kontingents
7. VeranstalterKontakte mit der Rolle „Veranstalter:in" und „Örtl. Veranstalter:in" des Events
8. TicketinfoEvent-Information „Ticketinfo"
9. SponsorenEventbilder mit dem Tag „sponsor"
10. BestelldatenDaten aus der Bestellung
11. StammdatenShop-Stammdaten
12. LogoLogo aus den Shop-Stammdaten

Anpassungen am E-Ticket

Das E-Ticket-Layout kannst du über die HTML-/CSS-/JS-Injection-Punkte des Shop-Moduls anpassen. Eine ausführliche Beschreibung findest du in der Shop-Dokumentation.

BOCA-Direkt-Druck

Für das Direkt-Drucken am Counter setzen wir einen Ticketdrucker der BOCA-Reihe voraus (getestet mit dem Boca Lemur). Der Drucker muss im Netzwerk per TCP/9100 erreichbar sein und die FGL-Sprache von BOCA verstehen.

Druckerkonfiguration

Die Druckerverbindung wird in den Shop-Stammdaten hinterlegt:

FeldBeschreibung
Drucker-IP / HostDie im lokalen Netzwerk erreichbare Adresse des BOCA-Druckers (z.B. 192.168.1.50 oder ein Hostname).
PortIn der Regel 9100 (BOCA-Standardport für Raw-FGL).
Externer Pfad (optional)HTTPS-Basis-URL für eigene Ticket-Layouts (siehe nächster Abschnitt).

Ist die Drucker-Konfiguration unvollständig, schlägt der Druckauftrag mit einer eindeutigen Fehlermeldung fehl, ohne dass Tickets verloren gehen — der Auftrag kann nach Korrektur wiederholt werden.

Eigenes Ticket-Layout (Custom-FGL-Template)

Das Standard-Layout für den BOCA-Druck reicht für die meisten Anwendungsfälle. Wenn du ein eigenes Layout brauchst — z.B. anderes Logo-Arrangement, zusätzliche Hinweistexte, andere Schriftgrößen — kannst du eine eigene FGL-Vorlage in einem öffentlichen Ordner deiner Wahl hinterlegen.

Setup

  1. Externer Pfad konfigurieren: In den Shop-Stammdaten unter „Externer Pfad" eine HTTPS-Basis-URL eintragen, z.B. https://meine-domain.de/copilot/.
  2. Template-Datei ablegen: Unter dieser Basis-URL ein File boca-ticket/base.fgl öffentlich erreichbar bereitstellen (kein Auth-Schutz).
  3. Drucken: Beim nächsten Druckauftrag wird das eigene Template verwendet. Änderungen am Template greifen nach max. 30 Sekunden (Cache).

Event-spezifische Layouts

Du kannst pro Event ein eigenes Layout hinterlegen. Die App sucht in dieser Reihenfolge — die erste gefundene Datei wird verwendet:

PfadWann
{base}/boca-ticket/events/{eventId}/template.fglEvent-spezifisch (höchste Priorität)
{base}/boca-ticket/base.fglGlobaler Fallback
Standard-LayoutWenn keine Datei gefunden / „Externer Pfad" leer

{eventId} ist die externe Event-ID, wie sie auch im Shop-Backend angezeigt wird.

Template-Format

Die Templates sind Handlebars-Templates mit FGL-Code drin. Variablen werden mit {{variable}} eingesetzt, Helper-Funktionen mit {{helper arg1 arg2 …}}. Datei-Encoding: UTF-8 — Texte werden automatisch in die BOCA-Codepage konvertiert.

Variablen und Helper

Verfügbare Variablen

VariableBeispiel
eventNameMozart-Galakonzert
subTitlemit dem Wiener Philharmonie-Quartett
locationKonzerthaus Wien, Großer Saal
categoryPremium
formattedPrice75,00
date30.04.2026
start20:00
doors19:00
tokenABC123DEF456
ticketInfoReihe 5, Platz 12
veranstalterWiener Konzertveranstaltungs GmbH
order.firstNameMax
order.lastNameMustermann
order.emailmax@example.com

Layout-Helper

HelperSignaturZweck
text{{text xMM yMM "F12" "Hello"}}Text an Position rendern. Font siehe „Schriftarten" unten.
qr{{qr xMM yMM sizeMM "DATA"}}QR-Code an Position. Größe in mm.
logo{{logo "shop" xMM yMM}}Eingebettetes Logo. Name ∈ copilot, shop.
sponsorLogos{{sponsorLogos xMM yMM gapMM}}Alle Sponsor-Logos nebeneinander, mit gapMM Abstand.
priceLine{{priceLine xMM yMM "Preis" formattedPrice}}Preiszeile in Großschrift mit Euro-Zeichen.

Position relativ zu vorigem Logo: Statt einer mm-Position kann ein String "after-{name}" übergeben werden. Beispiel: {{logo "shop" "after-copilot" 62}} setzt das Shop-Logo direkt rechts vom co*pilot-Logo (mit 3mm Abstand). Verfügbare Anker: after-copilot, after-shop, after-sponsors.

String-Helper

HelperSignaturZweck
truncate{{truncate eventName 40}}String auf max. Länge kürzen.
upper{{upper eventName}}Großbuchstaben.
concat{{concat "Hi " name}}Strings konkatenieren.
formatToken{{formatToken token}}12-Zeichen-Token als XXX-XXXXXX-XXX.

Koordinaten-System

  • Ursprung: oben links, in Millimeter.
  • Druckbarer Bereich: ungefähr 0–185 mm horizontal, 0–80 mm vertikal (abhängig vom Ticket-Format).
  • Auflösung: ca. 8,1 Dots pro mm horizontal, 8 Dots pro mm vertikal.

Schriftarten und Umlaute

Nicht jede BOCA-Schriftart kann deutsche Umlaute (Ä Ö Ü ß) darstellen. Empirisch festgestellt am Lemur FGL-46N7:

FontGrößeStilUmlaute?
F3kleinCourier (Monospace)✅ ja
F8großHelvetica Bold (breit)✅ ja
F9kleinHelvetica✅ ja
F10mittelHelvetica✅ ja
F11sehr großDisplay Bold❌ nein
F12sehr großDisplay Bold Condensed❌ nein
F13großHelvetica Condensed Bold✅ ja

F11 und F12 sind die einzigen typischen „Big-Display"-Fonts ohne Umlaut-Glyphen. Damit dein Layout trotzdem ohne Lücken druckt, transliteriert co*pilot Umlaute bei diesen Fonts automatisch:

  • Ü → UE, Ö → OE, Ä → AE, ß → SS
  • Kleinbuchstaben analog: ü → ue, ö → oe, ä → ae

Beispiel: {{text 0 0 "F12" (upper eventName)}} mit eventName = "Parteitag Die Grünen" druckt PARTEITAG DIE GRUENEN.

Echte Umlaute statt Transliteration

Möchtest du im Titel echte Umlaut-Glyphen statt der Transliteration, nimm einen Font, der sie kann. Für einen großen Titel empfehlen wir F13 mit Skalierung <HW2,2> — sieht praktisch identisch zu F12 aus, hat aber echte Umlaute:

  {{text 0 0 "F13><HW2,2" (upper (truncate eventName 30))}}
{{!-- Achtung: HW skaliert auch alle folgenden Text-Ausgaben! --}}
{{text 0 15 "F9><HW1,1" subTitle}}
  

Wichtig: <HW> ist ein FGL-Statusbefehl und gilt für alle folgenden Text-Ausgaben, bis er explizit zurückgesetzt wird. Setze beim nächsten Text deshalb <HW1,1> mit, damit die kleinen Schriften nicht ebenfalls skaliert werden.

Beispiel-Template

  {{!-- Mein Festival-Ticket-Layout --}}
<TT2>

{{!-- Header: Event-Name groß --}}
{{text 0 5 "F13" (upper (truncate eventName 30))}}
{{text 0 15 "F9" subTitle}}

{{!-- Datum prominent --}}
{{text 0 25 "F12" (concat date " — Beginn " start " Uhr")}}
{{text 0 30 "F3" (concat "Einlass: " doors " Uhr")}}

{{!-- Preis & Kategorie --}}
{{priceLine 0 40 "Preis" formattedPrice}}
{{text 100 40 "F10" (concat "Kategorie: " category)}}

{{!-- Inhaber --}}
{{text 0 50 "F9" (concat "Ticketinhaber: " order.firstName " " order.lastName)}}

{{!-- Hinweistext --}}
{{text 0 56 "F3" "Eintritt nur mit gültigem Ticket"}}

{{!-- Logos unten links --}}
{{logo "copilot" 0 65}}
{{logo "shop" "after-copilot" 65}}
{{sponsorLogos "after-shop" 65 3}}

{{!-- QR-Code rechts --}}
{{qr 145 25 25 token}}
{{text 145 55 "F3" (formatToken token)}}

<p>
  

Fehlerbehandlung beim Custom-Template

  • Template nicht erreichbar (Netzwerk-Fehler): Fällt auf das Standard-Layout zurück, Druck läuft weiter.
  • Datei nicht gefunden (404): Nächste Hierarchie-Stufe wird probiert, am Ende das Standard-Layout.
  • Syntax-Fehler im Template: Druck läuft mit dem Standard-Layout weiter — nicht der ganze Druckauftrag bricht ab.