PDF-Dokumente mit HTML, CSS und Liquid gestalten: Datenobjekte, Shipment-Details auf einer Tour, Barcodes und scanbare Links, Schriften und eigene Typografie, mehrseitige Etiketten, Tests und wie erzeugte Dokumente versioniert werden.
Mit der Orbit Document Engine erzeugen Sie PDF-Dokumente dynamisch aus Ihren operativen Daten. Sie verbindet die üblichen Web-Technologien (HTML und CSS) mit der Template-Sprache Liquid. Statt starrer, fertiger Vorlagen haben Sie volle Kontrolle über Layout, Gestaltung und Inhalt Ihrer Dokumente. Ob Versandetiketten, CMR-Frachtbriefe, Rechnungen oder eigene Berichte: Sie gestalten sie genau nach Ihren Vorgaben.
Datenobjekte legen fest, auf welche Art von Objekt das Template zugreifen kann. Jedes Datenobjekt, das Sie einem Template hinzufügen, muss beim Erzeugen mitgegeben werden. Legen Sie zum Beispiel ein Template mit dem Datenobjekt „Tour“ an, müssen Sie beim Erzeugen eine Tour-ID angeben.
Wählen Sie in der Werkzeugleiste des Editors über das Dropdown „Daten hinzufügen“ Ihre Quelldaten (z. B. Tour, Order). Damit stehen die passenden Liquid-Variablen bereit, und die Vorschau lädt die zugehörigen Beispieldaten.
Im Inhaltseditor des Templates nutzen Sie normales HTML und CSS in Style-Tags, um das Layout des Dokuments festzulegen. Das umfasst alle HTML-Eigenschaften, die moderne Webbrowser unterstützen.
Zusätzlich zu HTML nutzt der Inhalt die Template-Sprache Liquid. Damit greifen Sie auf spezielle Funktionen, Datenobjekte und Kontrollstrukturen zu. Die Beispiele unten zeigen, wie Sie Liquid einsetzen. Eine ausführliche Referenz zu Liquid finden Sie unter diesem Link.
Um Dokumentgröße und Seiteneinrichtung für den Druck zu steuern, empfehlen wir das CSS-Modul „Paged Media“. Es bietet eigene CSS-Anweisungen für Seitengröße, Ränder und Seitenumbrüche. Die Beispiele unten decken diese Eigenschaften ab. Eine ausführliche Referenz finden Sie unter diesem Link.
Im Beispiel oben haben wir mit {{ tour.id | code128 }} einen Barcode erzeugt. Barcodes entstehen über Liquid-Filter, die einen beliebigen String in ein SVG-Bild umwandeln.
Nun soll es ein Etikett pro Ladung (Load) geben (z. B. 5 Paletten = 5 Seiten).
Wichtig: Eine Ladung kann eine Anzahl größer als eins haben. Dann müssen mehrere Einheiten derselben Ladung (mit gleichen Maßen und gleichem Gewicht, wie in der Ladung festgelegt) behandelt werden. Das Beispiel unten berücksichtigt die Anzahl nicht. Ein Etikett pro Einheit ist zwar möglich, wir empfehlen diesen Weg für Etiketten aber nicht. Sorgen Sie stattdessen dafür, dass count immer eins ist, und legen Sie ein Etikett pro Ladung an.
Um mehrere Seiten im PDF und in der Vorschau zu erzeugen, nutzen Sie die CSS-Regel page-break-after zusammen mit einer Liquid-Schleife.
Passen Sie Ihr CSS an:
Fügen Sie page-break-after: always; zu Ihrer Klasse .label-page hinzu:
.label-page { /* ... existing styles ... */ /* IMPORTANT: This triggers the page break */ page-break-after: always;}/* Optional: Prevent empty page at the end */.label-page:last-child { page-break-after: auto;}
@page und page-break-after im Vergleich:
CSS-Regel
Zweck
@page { size: 100mm 150mm; }
Legt die Seitenmaße für das PDF fest.
page-break-after: always
Erzwingt nach jedem Element einen ausdrücklichen Seitenumbruch.
Beide Regeln wirken zusammen:
@page sagt der PDF-Engine, wie groß jede Seite ist
page-break-after sagt ihr, wo eine neue Seite beginnt
Ohne page-break-after bricht der Inhalt nur um, wenn er über die Seitengröße hinausläuft. Bei Schleifen (wie {% for load in tour.loads %}) brauchen Sie page-break-after: always, damit jeder Durchlauf auf einer neuen Seite beginnt.
So funktioniert die Vorschau:
Browser wenden @page-Regeln nur im Druckmodus an, nicht in der normalen Bildschirmdarstellung. Der Editor bildet mehrseitige Layouts deshalb nach: Er durchsucht Ihre <style>-Blöcke nach page-break-after: always. Findet er die Regel, dann:
wird der Body zu einem Flex-Container mit Abständen
erscheint jedes passende Element als eigenes Blatt Papier mit Schatten
liegt zwischen den Seiten ein sichtbarer Abstand (24px)
Diese Erkennung läuft automatisch. Außer der CSS-Regel brauchen Sie keine besonderen Klassen oder Auszeichnungen.
Der wichtigste Weg, das Erzeugen von Dokumenten in Ihre Abläufe einzubinden, sind Automatisierungen. Unser kommendes Feature Orbit Automations wird das Erzeugen von Dokumenten bald direkt und vollwertig in der Plattform unterstützen. Diese Funktion ist aber noch in Entwicklung.
Bis Orbit Automations erscheint, lassen sich Dokumente nur programmatisch über die Orbit API erzeugen.
Um diese Lücke heute zu schließen, empfehlen wir einen externen Automatisierungsanbieter (etwa n8n), der Orbit Webhooks mit der Document Templates API verbindet. So reagieren Sie auf Ereignisse und lösen das Erzeugen automatisch aus. Wenn Sie Hilfe beim Einrichten brauchen oder diese Automatisierungen lieber von uns betreuen lassen, wenden Sie sich an den Orbit-Support.
Es hilft, zwei Dinge zu trennen. Ein Template ist das wiederverwendbare Rezept, das Sie hier gestalten; ein Dokument (Document) ist die Datei, die daraus entsteht.
Aus einem Template entsteht ein versioniertes Dokument. Jede Datei, die Orbit ablegt, behält ihre Historie.
Erneutes Erzeugen legt kein Duplikat an. Erzeugen Sie dasselbe Dokument noch einmal, zum Beispiel nachdem sich ein Stopp (Stop) oder eine Adresse geändert hat, kommt eine neue Version zum bestehenden Dokument hinzu. Es liegen also keine zwei konkurrierenden Dateien nebeneinander. Sie sehen die neueste Version; ältere bleiben erhalten.
Eine Vorschau speichert nichts. Mit der Live-Vorschau und dem Testlauf prüfen Sie das Layout mit Beispiel- oder echten Daten, sie legen aber nichts an einer Tour, einer Order oder einem Shipment ab. Um eine Datei zu behalten, erzeugen Sie sie als Teil Ihres Ablaufs.
Ein leeres Feld ist normal. Hat ein Platzhalter für den Datensatz, gegen den Sie erzeugt haben, keinen Wert, bleibt er einfach leer. Das ist so gewollt und kein Fehler im Template.
Wie erzeugte Dateien gespeichert und an Orders, Shipments und Touren geheftet werden und wie der Abliefernachweis erfasst wird, lesen Sie im Artikel Dokumente und Abliefernachweis.
PDFs werden mit einem ausgewählten Satz an Schriften erzeugt, der mit der Plattform ausgeliefert wird. Nichts wird vom Gerät des Lesers geladen. Ein Dokument sieht also überall gleich aus, wo es geöffnet oder gedruckt wird.
Websichere Schriftnamen werden auf metrisch kompatible Entsprechungen abgebildet. Die klassischen Namen funktionieren weiter: Text in Arial oder Helvetica erscheint als Liberation Sans, Times New Roman als Liberation Serif und Courier New als Liberation Mono. Diese Schriften haben dieselben Zeichenbreiten wie ihre Vorbilder. Layouts, die für die Originale gestaltet wurden, verschieben sich also nicht.
Wert für font-family
Erscheint als
Am besten für
Arial, Helvetica
Liberation Sans
Allgemeinen Text
Times New Roman
Liberation Serif
Serifen- und Briefdokumente
Courier New
Liberation Mono
Referenznummern, Tabellenziffern
Noto Sans
Noto Sans
Moderne Sans mit breiter Zeichenabdeckung
Roboto Condensed
Roboto Condensed
Dichte Tabellen und schmale Spalten
Open Sans
Open Sans
Die klassische Standard-Sans
DejaVu Sans
DejaVu Sans
Breite Abdeckung von Symbolen
sans-serif / serif / monospace
Liberation Sans / Serif / Mono
Allgemeine Ausweichschriften
Normal, fett, kursiv und fett-kursiv sind bei den Familien Liberation und Noto Sans echte Schriftschnitte (Roboto Condensed: normal und fett). Nichts wird künstlich verdickt oder schräg gestellt.
Symbole erscheinen zuverlässig. Zeichen wie ▲ ▼ → ❄ ✓ ● ★ greifen automatisch auf Symbolschriften zurück, statt zu verschwinden. Bewusst nicht enthalten sind CJK-Schriften und farbige Emoji. Braucht ein Dokument sie, laden Sie eine eigene Schrift (siehe unten).
Setzen Sie immer einefont-familyaufbody. Ein Template ohne Angabe erscheint in einer Serifenschrift, wie es Webbrowser standardmäßig tun. Die Beispiele der Anleitung auf dieser Seite beginnen alle mit font-family: Arial, sans-serif.
Firmenschriften müssen nicht vorinstalliert sein. Geben Sie sie mit einer öffentlich erreichbaren URL an; sie werden dann beim Erzeugen des Dokuments heruntergeladen und ins PDF eingebettet:
Die URL muss zum Zeitpunkt des Erzeugens öffentlich und ohne Anmeldung erreichbar sein.
Empfohlen sind TrueType- und OpenType-Dateien.
Behalten Sie eine der mitgelieferten Familien als Ausweichschrift in der Liste. Ist die URL nicht erreichbar, fällt der Text auf sie zurück, statt dass das Erzeugen scheitert.
Geben Sie pro Schnitt (normal, fett, kursiv) ein eigenes @font-face mit passendem font-weight / font-style an. Sonst wird die Auszeichnung nur nachgeahmt.
Tour mit Stopps, Ladungen, Zeiten usw. Jede Ladung trägt zudem eine Zusammenfassung des Shipments, zu dem sie gehört (siehe Shipment-Details auf einer Tour).
Eine Tour trägt viele Shipments. Sie können Shipment also nicht als zweites Datenobjekt hinzufügen und erwarten, dass es zu jeder Ladung passt. Stattdessen trägt jeder Eintrag in tour.loads schon eine Zusammenfassung des Shipments, zu dem die Ladung gehört:
Feld
Beschreibung
load.shipment.shipperName
Name des Shippers, der das Shipment gebucht hat.
load.shipment.extras
Anforderungen an die Handhabung des Shipments, zum Beispiel eine Temperaturklasse.
load.shipment.pickupCompanyName
Firma an der Beladeadresse des Shipments.
load.shipment.dropoffCompanyName
Firma an der Entladeadresse des Shipments.
load.shipment.displayName
Die eigene Bezeichnung des Shipments, wenn eine gesetzt ist.
load.shipment.id
Die Shipment-ID, zum Drucken oder Codieren.
So wird aus einer Ladeliste, die nur Paletten aufzählt, ein Dokument, mit dem ein Fahrer (Driver) und ein Lagerteam arbeiten können: wem die Ware gehört, woher sie kommt, wohin sie geht und wie sie zu behandeln ist.
Diese Felder werden beim Erzeugen des Dokuments gefüllt. Lässt sich ein Shipment nicht auflösen, bleiben die Felder einfach leer. Sichern Sie alles Wichtige deshalb mit einem default-Wert ab, wie oben gezeigt.
Die drei Filter generate…DeepLink machen aus einer ID einen Link, den die Orbit-Fahrer-App beim Scannen öffnet. Leiten Sie das Ergebnis an qrcode weiter, um ihn aufs Blatt zu bringen. Wählen Sie die Ebene, die zur Zeile passt: eine Zeile pro Palette nutzt den Ladungs-Link, eine Zeile pro Shipment den Shipment-Link und die Fußzeile des Dokuments den Tour-Link.
Codieren Sie den Link, keine bloße ID. Eine reine ID enthält keinen Verweis auf ein Objekt. Wer sie scannt, öffnet also nichts. Das ist der häufigste Grund, warum die Codes eines Dokuments ins Leere führen.
Geben Sie dem Code Platz. Ein Link ergibt ein deutlich dichteres QR-Raster als eine kurze ID. Unter etwa 12 mm wird das Muster für Handykameras und Bürodrucker zu fein. Bemessen Sie die Fläche entsprechend und prüfen Sie einen Probedruck, statt der Vorschau am Bildschirm zu trauen.
Das Template setzt keine font-family, deshalb wird die Standard-Serifenschrift verwendet. Setzen Sie ausdrücklich eine auf body, zum Beispiel font-family: Arial, sans-serif;. Siehe Schriften und Typografie oben.