Konfiguration von Druckvorlagen
Mit Klick auf die Schaltfläche
können Agenten ein PDF mit den jeweiligen Objektinformationen generieren und dieses anschließend zur Weiterverwendung herunterladen. Dem Layout dieser PDFs liegt eine objektspezifische Druckvorlage zugrunde.Eine Druckvorlage ist die Blaupause eines PDFs im JSON-Format. Sie dient dazu, die PDFs zu generieren. In der Druckvorlage ist definiert, welche Daten in welcher Form und an welcher Stelle im PDF enthalten sind.
Aktuell stellt KIX für die Kontexte Ticket, Artikel und Asset je eine Druckvorlage als Standard bereit. Sie können zusätzliche Druckvorlagen im System bereitstellen oder im Bedarfsfall die Standard-Druckvorlagen modifizieren.
Warnung
Änderungen an den Standard-Druckvorlagen haben globale Auswirkung! Alle Funktionen, die eine Standard-Druckvorlage nutzen, verwenden dann auch die geänderte Standard-Vorlage.
Für das Erstellen einer Druckvorlage bis zur Bereitstellung des PDF benötigen Sie grundlegendes Wissen über die jeweiligen Objekte (z.B. Ticket, Asset, Artikel, Kontakt usw.) sowie ausreichend Kenntnisse in JSON, SQL und HTML/CSS.
Zum Erstellen (oder Modifizieren) einer Druckvorlage müssen Sie ein valides JSON bereitstellen, welches mit spezifischen Inhaltsbausteinen (Bausteine) befüllt ist. KIX wandelt dieses JSON in mehrere HTML-Dateien um (Header, Content, Footer) und konvertiert diese anschließend in ein PDF. Sie müssen daher genau wissen, WAS, WIE und WO im PDF angezeigt werden soll.
Zum Bereitstellen von Druckvorlagen in KIX On-Premises-Umgebungen benötigen Sie administrative Rechte auf den Server und Zugriff auf die KIX Datenbank. Für KIX.Cloud-Umgebungen übernimmt das unser Support, wenn Sie uns eine entsprechende Druckvorlage bereitstellen (Support-Vertrag vorausgesetzt).
Die im System bereitgestellten Druckvorlagen können in verschiedenen Bereichen von KIX ausgewählt und angewendet werden:
innerhalb der Macro Action "Konvertieren zu PDF" bei Jobs/Aktionen
Sie können zusätzlich aus den importierten Druckvorlagen auswählen, um auf deren Basis die PDFs zu erstellen. Zudem können Sie der Macro Action zusätzliche Parameter mitgeben, um die Ausgabe zu modifizieren.
beim Druck von Assets
Sie können klassenspezifische Druckvorlagen bereitstellen.
Agenten können die zu verwendende Druckvorlage auswählen.
für den Standard Ticketdruck
Für Agenten besteht keine Möglichkeit, die zu verwendende Druckvorlage auszuwählen. Sie können jedoch die Standard-Vorlage mit geändertem Inhalt über die KIX-Datenbank bereitstellen.
Achtung
Änderungen an der Standard-Druckvorlage beeinflussen auch den Sammeldruck von Tickets.
bei Verwendung des Konsolenbefehls Console::Command::Admin::HTMLToPDF::Convert
Eine Druckvorlage besteht aus mehreren Abschnitten, die zusammen den Aufbau des PDF bilden. Der Aufbau wird im JSON-Format abgebildet, um eine klare Struktur zu erhalten, welche gut vom System interpretiert werden kann.
Die einzelnen Abschnitte bestehen aus einer Liste von Eigenschaften und/oder Objektinformationen:
Beispiel: Aufbau einer Druckvorlage
{ "Expand": [ "DynamicField", ], "Page": { "Top": "10", "Left": "15", "Right": "10", "Bottom": "10", "SpacingHeader": "1", "SpacingFooter": "1", "Format": "A5", "Orientation": "Landscape" }, "Header": [ ... ], "Content": [ ... ], "Footer": [ ... ] }
Expands: Ist eine Liste von Erweiterungen, die das Hauptobjekt bereitstellen soll (z. B. Dynamische Felder)
Page: Definiert die Seiteneinstellung des PDF (Randabstände, Format usw.)
Header: Definiert den Seitenkopf, in dem beispielsweise ein Logo enthalten ist.
Ist der Header gesetzt, wird er auf jeder Seite wiederholt angewendet.
Content: Definiert den Inhalt der PDF-Datei über alle Seiten.
Hier ist festgelegt, WAS für Informationen WIE und WO im PDF dargestellt werden sollen.
Hinweis: Positionierungen auf einer bestimmten Seite ist nicht direkt möglich.
Footer: Definiert eine Fußzeile, die beispielsweise Seitenzahl, Kontaktdaten usw. anzeigt.
Ist der Footer gesetzt, wird er auf jeder Seite wiederholt angewendet.
Tipp
Informationen zum Aufbau einer Druckvorlage erhalten Sie im Menü Verwendung der Konsole und Console::Command::Admin::HTMLToPDF::Inspect)
durch Ausführung des Konsolenbefehls Console::Command::Admin::HTMLtoPDF::Inspect (s. auch:Seitenaufbau
Der Aufbau der Seite kann in 4 Kombinationsvarianten erfolgen. Die gewählte Variante gilt für das gesamte PDF. Folgende Kombinationen sind möglich:
Header + Content + Footer (H+C+F)
Seitenkopf + Seiteninhalt + Seitenfuß
Content + Footer (C+F)
Seiteninhalt + Seitenfuß
Header + Content (H+C)
Seitenkopf + Seiteninhalt
nur Content (C)
nur Seiteninhalt
H+C+F | C+F | H+C | C |
---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Header und Footer (blau) sind Abschnitte, die optional gesetzt werden können. Sind sie nicht gesetzt, nimmt der Content diesen Platz ein.
Der Content (grün) ist ein Pflicht-Abschnitt, der gesetzt werden muss. Er liefert den grundlegenden Inhalt des PDF. Im Content ist definiert, welche Objektinformationen an welcher Position auf der Seite angezeigt werden.
Für die Anzeige der Objektinformationen stehen verschiedene Bausteine zur Verfügung. Sie ermöglichen die Darstellung der Inhalte in einer bestimmten Form (Tabellen, Listen, Bilder, Text etc.). Zudem können CSS-Stylings angegeben werden, um die Anzeige ansprechend zu gestalten.
Seiteneinstellung
Damit der Inhalt korrekt auf der Seite platziert wird, müssen Seiteneinstellungen wie Format und Randabstände angegeben werden. Die Einstellungen werden jeweiligen Template im Abschnitt Page
hinterlegt.
Beispiel für die Seiteneinstellung
{ "Expand": [ ... ], "Page": { "Top": "10", "Left": "15", "Right": "10", "Bottom": "10", "SpacingHeader": "1", "SpacingFooter": "1", "Format": "A5", "Orientation": "Landscape" }, "Header": [ ... ], "Content": [ ... ], "Footer": [ ... ] }
Wichtig
Bitte geben Sie die Maßeinheit ausschließlich in Millimeter an!
Parameter | Beschreibung |
---|---|
Format | Legt das Seitenverhältnis fest, z. B. A4 Wird nichts angegeben, dann wird automatisch A4 als Standard verwendet. Hinweis: Nicht alle existierenden DIN-Formate werden unterstützt. Wird ein DIN-Format nicht akzeptiert, sollte Height/Width angegeben werden. |
Orientation | Definiert die Ausrichtung der Seite.
|
Height | Konfigurierbare Seitenhöhe. Wenn definiert, muss Wenn unter |
Width | Konfigurierbare Seitenbreite Wenn definiert, muss Wenn unter |
Top | Definiert den oberen Seitenrand (Abstand zum Seitenrand in Millimeter) |
Bottom | Definiert den unteren Seitenrand (Abstand zum Seitenrand in Millimeter) |
Left | Definiert den linken Seitenrand (Abstand zum Seitenrand in Millimeter) |
Right | Definiert den rechten Seitenrand (Abstand zum Seitenrand in Millimeter) |
SpacingHeader | Abstand der Kopfzeile in Millimeter Je kleiner der Wert, desto weiter ragt die Kopfzeile ins PDF. |
SpacingFooter | Abstand der Fußzeile in Millimeter Je kleiner der Wert, desto weiter ragt die Fußzeile ins PDF. |
Bausteine ermöglichen die Darstellung der Inhalte in einer bestimmten Form (Tabellen, Listen, Bilder, Text etc.). Sie können in den Abschnitten Header, Content und Footer angewendet werden.

Abb.: Baustein unterhalb eines Containers
"Blocks" ist ein Baustein, der andere Bausteine unter sich kombinieren kann und speziellere Daten vererbt. Hierbei sind folgende Varianten möglich:
wiederholende Kombination: Kombination von Bausteinen, die wiederholt nacheinander dargestellt werden sollen. Dabei werden den Bausteinen mit jeder Wiederholung andere Daten bereitgestellt.
einfache Kombination: Kombination aus zwei oder mehreren Bausteinen, die einmalig abgebildet werden, aber spezielle Daten erhalten.
Zum Abbilden wiederholender Kombinationen ist zu beachten:
"Blocks" muss vom Typ "List" sein.
Damit wird gewährleistet, dass sich die darunter liegenden Bausteine wiederholen.
Angegeben werden müssen:
Ein Objekt, welches die neuen Daten aufbereitet
das Data, welches die notwendige ID, Name und Nummer liefert
Filter oder Expands (Datenerweiterung) sind optional.
Filter prüft, ob die geholten Daten zulässig sind.
Soll mit weiteren Daten des Objekts innerhalb des Blocks gearbeitet werden, muss dies angegeben werden.

Abb.: Baustein für ein Objekt
Parameter* | Pflichtfeld | Hinweise |
---|---|---|
Objekt | ja | Objekt, welches in den darunter liegenden Bausteinen genutzt werden soll. |
Expands | Erweiterung der Datenmenge um zusätzliche Angaben des gewählten Objekts. | |
Filters | Einschränkung der Datenliste von Data. | |
Data | ja | Daten aus der Datenerweiterung des darüber liegenden Objekts (Elternobjekt), welche im Baustein angewendet werden sollen. Achtung: Hier sollten nur Array Daten Anwendung finden. |
Type | ja | Angabe des Type "List" |
ID | Kenner des gesamten Blocks (Default: Blocks) |
* siehe auch: Die Parameter und ihre Bedeutung
{ "Type": "List", "Object": "Article", "Expand": "DynamicField", "Data": "Article", "Blocks": [ { "ID": "ArticleHeader", "Type": "Text", "Value": [ "<Font_Bold>Article", "#<Count>" ], "Join": " ", "Break": true, "Translate": true, "Style": { "Size": "1.1em", "Color": "gray" } }, …. ] }
Diese Bausteinvariante kann Bausteine kombiniert darstellen, die gemeinsame Daten beziehen oder beispielsweise nebeneinander dargestellt werden sollen.
Sollen Bausteine nebeneinander dargestellt werden, dann muss ein Style-Width mit 48 bis 50%, sowie ein Style-Float gesetzt sein.

Abb.: Bausteinvariante für eine einfache Kombination
Parameter* | Hinweise |
---|---|
Data | Daten aus der Datenerweiterung, welche in Blocks angewendet werden sollen. Ist kein Data gegeben, werden nur die Hauptdaten des Objekts genutzt Achtung: In diesem Fall sollten die Daten aus einem Expands kommen, welches kein Array ist. |
ID | Kenner des gesamten Blocks (Default: Blocks) |
* siehe auch: Die Parameter und ihre Bedeutung
{ "Data": "LinkObject", "Blocks": [ { "ID": "LinkedHeader", "Type": "Text", "Value": "<Font_Bold>Linked Objects", "Translate": true, "Break": true, "Style": { "Size": "1.1em", "Color": "gray" } }, { "ID": "LinkedTable", "Type": "Table", "Columns": [ "<Font_Bold>Key", "Value" ], "Translate": true, "Join": "<br>" } ] },
Der Baustein "Text" wird für die Darstellung einzeiliger Texte oder Überschriften verwendet. Der Text kann als Hyperlink hinterlegt werden. Die URL dazu muss im Value
angegeben sein.
Parameter* | Pflichtfeld | Hinweise |
---|---|---|
Type | ja | Muss "Text" sein |
ID | ja | Kenner |
AsLink | Bestimmt, ob der Text als Link dargestellt werden soll. | |
Value | ja | Array oder String; Kann Platzhalter auflösen |
Translate | Aktiviert die Übersetzung | |
Style | Benötigt einen ID Zulässige Styles:
| |
Break | Aktiviert die Trennlinie unterhalb des Strukturtyps | |
Join | Wird benötigt, wenn Value als Array genutzt wird. | |
ReplaceAs | Definiert einen Wert, der gesetzt werden soll, wenn der Platzhalter nach dem Ersetzen keinen Wert beinhaltet. Es ist möglich, ein Leerwert zu setzen. Standard: |
* siehe auch: Die Parameter und ihre Bedeutung
{ "ID": "ArticleHeader", "Type": "Text", "Value": [ "<Font_Bold>Article", "#<Count>" ], "Join": " ", "Break": true, "Translate": true, "Style": { "Size": "1.1em", "Color": "gray" } },
Der Baustein "Richtext" ist die HTML-Variante zu "Text". Hiermit können mehrzeilige Texte, aber auch Bilder, Tabellen oder HTML-Code eingefügt und dargestellt werden.
Parameter* | Pflichtfeld | Hinweise |
---|---|---|
Type | ja | Muss "Richtext" sein |
ID | ja | Kenner |
Value | ja | Array oder String Kann Platzhalter auflösen |
Translate | Aktiviert die Übersetzung | |
Style | Benötigt eine ID Zulässige Styles:
| |
Join | Wird benötigt, wenn |
* siehe auch: Die Parameter und ihre Bedeutung
{ "ID": "ArticleBody", "Type": "Richtext", "Value": "<KIX_ARTICLE_BodyRichtext>" }
Mit dem Baustein "Page" können Sie die Seitenzahl angegeben. Die Seitenzahl kann als "Seite x" oder als "Seite x von y" dargestellt werden. Verwenden Sie "Page" vorzugsweise nur im Header oder Footer.
Parameter* | Pflichtfeld | Hinweise |
---|---|---|
Type | ja | Muss "Page" sein |
ID | ja | Kenner |
PageOf | ja | Legt die Darstellungsart fest.
|
Translate | Aktiviert die Übersetzung | |
Style | Benötigt einen ID Zulässige Styles:
|
* siehe auch: Die Parameter und ihre Bedeutung
{ "ID": "Paging", "Type": "Page", "PageOf": 0, "Translate": true, "Style": { "Float": "right" } }
Hinweis
Der Baustein "Page" und der Abschnitt "Page" haben nichts gemeinsam.
Der Baustein "Page" liefert eine Seitennummer, die man auf der Seite beliebig setzen kann.
Der Abschnitt "Page" ist die Einstellung aller Seiten des PDFs hinsichtlich Randabstand, Format, Ausrichtung usw. (s. Seiteneinstellung).
Der Baustein vom Typ "Image" ermöglicht das Einfügen einzelner Bilder, die unabhängig von einem Richtext entstammen, wie z. B. ein Header-Logo. Es gibt folgende Möglichkeiten, wie das Bild ins Dokument gelangen kann:
Aus der KIX Datenbanktabelle (ObjectIcon)
Als Dateipfad vom Server (wo das KIX-Backend liegt)
Als übergebener Base64-Content.
Hinweis
Der ContentType
muss immer image/[Dateityp]
sein (z. B. image/png
).
Parameter | Pflichtfeld | Hinweise |
---|---|---|
Type | ja | Muss "Image" sein |
ID | ja | Kenner |
Value | ja | Abhängig von Typen:
|
TypeOf | ja | Zulässige Typen:
|
Style | Benötigt einen ID Zulässige Styles:
|
* siehe auch: Die Parameter und ihre Bedeutung
{ "ID": "PageLogo", "Type": "Image", "Value": "agent-portal-logo", "TypeOf": "DB", "Style": { "Width": "2.5rem", "Height": "2.5rem", "Float": "left" } },
Mit dem Baustein "Table" können Informationen in Form von Tabellen dargestellt werden.
Als Beispiel dienen die Standard-Druckvorlagen für Ticket oder Artikel. Sie enthalten im Seitenkopf die Metadaten des jeweiligen Objekts (Bearbeiter, Ticketstatus usw.). Zur strukturierten Darstellung dieser Informationen wird der Baustein "Table" verwendet.

Abb.: Beispiel eines Blocks vom Typ "Table" mit SubType "KeyValue"
Beispiel: Code-Struktur für die Tabellendarstellung
{ "Columns": [ "Key", "Value" ], "Type": "Table", "SubType": "KeyValue | DataSet | Custom | XMLStructure", ... },
Hinweis
Da der Platz auf einem Blatt je nach Format und Ausrichtung begrenzt ist, sollten in den Tabellen nur notwendige Attribute angezeigt werden.
Tabellenvarianten (SubTypes)
Tabellen können große Datenmengen abbilden und das in unterschiedlicher Form. Um diese Daten abzubilden, gibt es folgende Varianten, die unter SubType
definiert werden:
Dieser Tabellentyp ist der Standard. Er wird eingesetzt, um die Attribute eines Objekts anzuzeigen. Ist in der Konfiguration kein SubType
angegeben, dann wird "KeyValue" automatisch gesetzt.
Grundsätzlich ist "KeyValue" eine zweispaltige Tabelle, die die Daten des Objekts als Attributname (Key) und Attributwert (Value) gegenübersetzt. Dazu werden im Parameter Columns
die Werte "Key"
und "Value"
hinterlegt. Durch Weglassen eines dieser Werte können Sie eine einspaltige Tabelle erzeugen, in der nur die Attributnamen oder nur die Attributwerte dargestellt werden.
Durch Angabe der Parameter allow
und ignore
können Sie den in der Tabelle anzuzeigenden Inhalt einschränken.
Durch zusätzliche Angabe von Count
, können Sie der Tabelle eine Nummerierungs-Spalte hinzuzufügen.
Key | Value |
---|---|
Attributname | Attributwert |
{ "Columns": [ "Key", "Value" ], "Type": "Table", "SubType": "KeyValue", ... },
Count | Key | Value |
---|---|---|
1 | Attributname | Attributwert |
{ "Columns": [ "Count", "Key", "Value" ], "Type": "Table", "SubType": "KeyValue", ... },
Die Parameter Allow
(Erlaubt) und Ignore
(Ignorieren) dienen dazu, Attribute einzuschränken. Sie beeinflussen somit den Informationsgehalt von Tabellen, die im PDF ausgegeben werden.
Beispiel für "Allow" bei Tabellentyp "KeyValue"
{ "ID": "InfoTableLeft", "Type": "Table", "Include": "DynamicField", "SubType": "KeyValue", "Columns": [ "<Font_Bold>Key", "Value" ], "Allow": { "State": "KEY", "Queue": "KEY", "Lock": "KEY", "CustomerID": "KEY", "Owner": "KEY", "Responsoble": "KEY", "Type": "KEY", "Priority": "KEY" }, },
Allow lässt Attribute zu und definiert somit eine Whitelist.
Es werden nur die benannten Attribute anzeigt.
Alle Attribute, die nicht im
Allow
angegeben sind, werden nicht in der Tabelle angezeigt.Beispiel: Allow - Lässt folgende Attribute zu (Objekt ist Ticket)
[...], "Allow": { "State": "KEY", // lässt Attribut zu - egal was drin steht, da "KEY" gesetzt "Type": "^Prob.*" // lässt Attribut nur zu, wenn der Ausdruck im Attributwert enthalten ist. }
Ignore verweigert Attribute und definiert somit eine Blacklist.
Es werden die Attribute entfernt, welche es durch die Whitelist geschafft haben.
Ist kein
Ignore
gesetzt, entspricht das Endergebnis dem Ergebnis derAllow
-Anwendung.Ignore
kann zusätzlich zuAllow
eingesetzt werden. Der Aufbau entspricht dem vonAllow
, mit dem Unterschied, dass die angegebenen Attribute aus der Tabelle entfernt werden.Zu beachten ist:
Ist ein
Allow
für die Tabelle gesetzt, so wird dasIgnore
auf die Attibute angewendet, die durchAllow
gefiltert wurden.Ist kein
Allow
gesetzt, so gehtIgnore
über alle Attribute und schränkt diese ein.
Beispiel: Ignore - verwirft die folgenden Attribute (Objekt ist Ticket)
[...], "Ignore": { "State": "KEY", // verwirft das Attribut - egal was drin steht, da "KEY" gesetzt "Type": "^Prob.*" // verwirft das Attribut nur, wenn der Ausdruck im Attributwert enthalten ist. }
Sind weder
Allow
nochIgnore
definiert, werden alle Angaben aus den Objekten angezeigt.Die Angabe eines leeren Hashes leert das vom Template vorgegebene
Allow
bzw.Ignore
:{ "ArticleMeta": {} }
Mit dem Tabellentyp "DataSet" können die Datensätze zeilenweise angezeigt werden. Im Gegensatz zu KeyValue muss jedoch bei Columns
festlegt werden, welche Attribute aus den Datensätzen dargestellt werden sollen.
Die angegebenen Attributnamen bilden die Tabellenspalten. Der jeweilige Datensatz befüllt anhand der gesetzte Spalte die Zellen mit den entsprechenden Werten.
Durch Angabe der Parameter allow
und ignore
können Sie den in der Tabelle anzuzeigenden Inhalt einschränken. Dabei werden aber nicht die einzelnen Attribute beeinflusst, sondern der gesamte Datensatz.
Attributname | [Attributname...] |
---|---|
Attributwert | [Attributwert...] |
{ "Columns": [ "AttributeX", "AttributeY", ... ], "Type": "Table", "SubType": "DataSet", ... },
Die Parameter Allow und Ignore
Bei "DataSet" wirkt die Einschränkung auf den gesamten Datensatz und nicht auf einzelne Spalten. Das heißt:
Allow: Der Datensatz wird nur zugelassen, wenn alle zu prüfenden Werte der Attribute übereinstimmen.
Ignore: Der Datensatz wird nur ignoriert, wenn eines der zu prüfenden Werte der Attribute übereinstimmt.
Wichtig
Vermeiden Sie bei "DataSet" die Verwendung von "Key" bei Allow/Ignore. Prüfen Sie ausschließlich mit regulären Ausdrücken.
Allow - Lässt den folgenden Datensatz zu (Objekt ist Ticket)
[...], "Allow": { "Type": "^Prob.*" // lässt den Datensatz nur zu, wenn der Ausdruck für das Attribut im Attributwert enthalten ist. }
Ignore - verwirft den folgenden Datensatz (Objekt ist Ticket)
[...], "Ignore": { "Type": "^Prob.*" // verwirft den Datensatz, wenn der Ausdruck für das Attribut im Attributwert enthalten ist. },
Beispiel Struktur-Code Tabletyp DataSet
{ "ID": "Example", "Type": "Table", "Include": "DynamicField", "SubType": "DataSet", "Columns": [ "AttributeX", "AttributeY" "AttributeZ" ], "Ignore": { "AttributeX": "Prob.*", }, },
Der Tabellentyp "Custom" ist der flexibelste Baustein hinsichtlich der Darstellung von Tabelleninhalten. Es können
mehrere Objektattribute in eine Zelle eingetragen werden
eine beliebige Anzahl an Spalten und Zeilen definiert werden
Hinweis: Zu viele Spalten werden beim Druck abgeschnitten, da diese über den Rand hinaus ragen.
objektbezogene KIX-Platzhalter verwendet werden
Beispiel für Object.Attribute.Value:
Ticket.Status.Value
oderTicket.DynamicField_xyz.Value
Eine Einschränkung mit Allow/Ignore ist nicht möglich, da dieser Tabellentyp frei wählbaren Inhalt besitzt. Somit kann nicht bestimmt werden, was zulässig ist oder ignoriert werden soll.
Tipp
In der von KIX ausgelieferten Druckvorlage wird dieser Tabellentyp für die Anzeige der Daten im Block "Customer Information" verwendet.
Sie können den Aufbau der Tabelle frei gestalten, indem Sie die Tabelle ähnlich einer Tabelle im HTML bilden.
Der Parameter "Columns
" definiert die Spalten der Tabelle. Die Angabe der Spaltenüberschrift ist optional. Ist kein Spaltenname angegeben, muss ein Leerstring für die jeweilige Spalte definiert sein. Mit den Platzhaltern <Class_...>
kann eine CSS Klasse an einer Spalte/Zelle hinterlegt werden, welche im Style unter Angabe der Klasse konfiguriert wird. Sie können auch vordefinierte Platzhalter <Font_...>
anwenden, z. B. <Class_Col1><Font_Bold>
(s. auch: Zusätzliche Hinweise).
Der Parameter Rows
definiert die einzelnen Zeilen in den jeweiligen Spalten und deren Inhalte. Der Parameter Rows
ist eine verschachtelte Liste, wobei der erste Index die Zeile und der zweite Index die jeweilige Spalte ist. Rows
beinhaltet nicht die Spaltenüberschriften, sondern nur den Tabelleninhalt.
Beispiel: Nur Angabe von "Rows"
[...], "Rows": [ [ "Zeile1Spalte1" "Zeile1Spalte2" ], [ "Zeile2Spalte1" "Zeile2Spalte2" ] ]
Beispiel: Gemeinsame Angabe von "Columns" und "Rows"
[...], "Columns": [ "Spalte1", "Spalte2" ], "Rows": [ [ "Zeile1Spalte1" "Zeile1Spalte2" ], [ "Zeile2Spalte1" "Zeile2Spalte2" ] ]
Beispiel: Tabellentyp Custom (komplett)
{ "Type": "List", "Object": "Contact", "Data": "Contact", "Expand": "DynamicField", "Blocks": [ { "ID": "Contact", "Type": "Table", "SubType": "Custom", "Include": "DynamicField", "Columns": [ "<Class_Col1><Font_Bold>", //Spalte 1 in Fettschrift "" //Spalte 2 ], "Rows": [ [ "Contact", "Contact.Fullname.Value" ], [ "Phone", "Contact.Phone.Value" ], [ "Mobile", "Contact.Mobile.Value" ] ], "Translate": true, "Style": { "Class": [ { "Selector": ".Col1", //Formatierung für Spalte 1 (s. "Columns") "CSS": "width: 20%;" } ] } } ] }
Das Beispiel erzeugt folgende Tabelle (Breite 1. Spalte: 20%). Die Werte werden beim Druck durch die reellen Werte ersetzt.
|
|
|
|
|
|
Der Tabellentyp ist "XMLStructure" ist nur in Kombination des Objekts "Asset" nutzbar. Er erzeugt eine Tabelle, die ähnlich der Asset Detailansicht ist.
Zu beachten ist:
Einstellungen mit
Columns
undRows
sind nicht möglich.Im Konfigurationsblock muss als
Data
immerXMLStructure
gesetzt sein.Einschränkungen mittels
allow
oderi gnore
sind nicht möglich.Attribute ohne Werte werden nicht angezeigt.
Einrückungen und Formatierung können anhand von CSS-Klassen beeinflusst werden.
Nur die erste Spalte wird beeinflusst
Die jeweilige Ebene (Nummer) bestimmt die Endung der CSS-Klasse
Attribute mit dem Inputtyp
Dummy
haben als KlassenprefixDL
Alle anderen Attribute haben den Klassenprefix
PL
Wenn kein CSS hinterlegt ist, greift das CSS der Standard-Tabelleneinstellung.
{ "ID": "AssetVersionMeta", "Type": "Table", "SubType": "XMLStructure", "Data": "XMLStructure", "Translate": true, "Style": { "Class": [ { "Selector": " .DL0", "CSS": "padding: 0.625rem 0; font-weight: bold;" }, { "Selector": " .DL1", "CSS": "font-weight: bold; padding: 0.625rem 0 0.625rem 0.313rem; color: gray;" }, { "Selector": " .DL2", "CSS": "font-weight: bold; padding-left: 0.625rem 0 0.625rem 0.625rem; color: gray;" }, { "Selector": " .DL3", "CSS": "font-weight: bold; padding-left: 0.625rem 0 0.625rem 0.938rem; color: gray;" }, { "Selector": " .DL4", "CSS": "font-weight: bold; padding-left: 0.625rem 0 0.625rem 1.25rem; color: gray;" }, { "Selector": " .DL5", "CSS": "font-weight: bold; padding-left: 0.625rem 0 0.625rem 1.563rem; color: gray;" }, { "Selector": " .PL1", "CSS": "padding-left: 0.313rem;" }, { "Selector": " .PL2", "CSS": "padding-left: 0.625rem;" }, { "Selector": " .PL3", "CSS": "padding-left: 0.938rem;" }, { "Selector": " .PL4", "CSS": "padding-left: 1.25rem;" }, { "Selector": " .PL5", "CSS": "padding-left: 1.563rem;" } ] } }
Parameter* | Pflichtfeld | Hinweise |
---|---|---|
ID | ja | Kenner der Tabelle |
Type | ja | Angabe des Blocktyps. Muss |
SubType | ja | Definiert den konkreten Tabellen-Typ Mögliche Tabellen-Typen:
Je nach gewähltem SubType stehen unterschiedliche Parameter zur Verfügung (s. auch: Verfügbarkeit der Parameter je SubType |
Allow | Liefert ein Hash mit Attributen die je Variante das Attribute oder den Datensatz in der Tabelle darstellt. (Whitelist) | |
Ignore | Liefert ein Hash mit Attributen die je Variante das Attribute oder den Datensatz nicht in der Tabelle darstellt. (Blacklist) | |
Columns | ja (vom SubType abhängig) | Angaben der Spalten je Variante |
Rows | ja (vom SubType abhängig) | Nur für Tabellentyp "Custom" Definiert den Tabelleninhalt zeilen- und spaltenweise |
Include | Fügt ein Expand in die Hauptdaten nur für diese Tabelle hinzu. Achtung: Der Expand sollte vorher vom Objekt geholt worden sein. | |
Translate | Wenn aktiviert: Übersetzt den Spalteninhalt und den Spaltenkopf | |
Style | Benötigt einen ID Zulässige Styles:
| |
Headline | Aktiviert den Spaltenkopf
| |
ReplaceAs | Definiert einen Wert, der gesetzt werden soll, wenn die Platzhalter nach dem Ersetzen keinen Wert beinhaltet. Standard: Es ist auch möglich, ein Leerwert zu setzen. | |
ReplaceKey | Ändert die internen Schlüsselbezeichnung mit übersetzbaren Anzeigenamen. Nur möglich mit dem Tabellentyp "KeyValue". Die ersetzbaren Schlüsselbezeichnungen sind aktuell fest im System hinterlegt. |
* Siehe auch: Die Parameter und ihre Bedeutung
Parameter | KeyValue | DataSet | Custom | XMLStructure |
---|---|---|---|---|
ID | ✓ | ✓ | ✓ | ✓ |
Type | ✓ | ✓ | ✓ | ✓ |
SubType | ✓ | ✓ | ✓ | ✓ |
Allow | ✓ | ✓ | ||
Ignore | ✓ | ✓ | ||
Columns | ✓ | ✓ | ✓ | |
Rows | ✓ | |||
Include | ✓ | ✓ | ✓ | ✓ |
Translate | ✓ | ✓ | ✓ | ✓ |
Style | ✓ | ✓ | ✓ | ✓ |
Headline | ✓ | ✓ | ✓ | ✓ |
ReplaceAs | ✓ | |||
ReplaceKey | ✓ | ✓ | ✓ |
Mit dem Baustein "List" können Aufzählungen mit oder ohne vorangestellte Aufzählungspunkte abgebildet werden. Die Anzahl der aufzulistenden Daten kann unabhängig der gelieferten Daten eingeschränkt werden.
Abhängig von den anzuzeigenden Daten ist es möglich, dass nicht alle Datensätze belegt sind. Dann wird der Eintrag nicht angezeigt, was in bestimmten Fällen die Darstellung beeinflusst. Daher können Einträge, die keinen Wert haben, auch als Leerzeile angezeigt werden.
Parameter* | Pflichtfeld | Hinweise |
---|---|---|
Type | ja | Muss "List" sein |
ID | ja | Kenner |
Data | ja | Beinhaltet die Daten aus einer Datenerweiterung. So werden bspw. genutzt:
|
Object | (ja) | Objekt, welches in den darunter liegenden Strukturen genutzt werden soll. |
ListObject | (ja) | Objekt welches in den darunter liegenden Strukturen genutzt werden soll. Nur möglich, wenn |
ListData | (ja) | Beinhaltet den Parameternamen, der in
|
ListCount | Definiert eine maximale Anzahl von Listeneinträgen die angezeigt werden sollen. Ist die Anzahl der Datensätze kleiner als die maximale Anzahl, werden diese aufgefüllt, sofern | |
ListStyle | Definiert den Stil der Liste Folgende Typen sind möglich:
| |
ShowEmpty | Zeigt Leerzeilen an, wenn beim Datensatz kein Wert vorhanden ist. Kann kombiniert werden mit | |
Value | ja | Beinhaltet den Wert der pro Datensatz angezeigt werden soll. Erwartet Array oder String Wird dies als Array aufgebaut, werden alle Einträge kombiniert und in einer Zeile dargestellt. Kombinierbar mit „Join“ Kann Platzhalter auflösen |
Join | Definiert, wie die Werte aus | |
ReplaceAs | Definiert einen Wert, der gesetzt werden soll, wenn Platzhalter nach dem Ersetzen keinen Wert beinhalten. Standard: Sie können auch einen Leerwert setzen. | |
Translate | Aktiviert die Übersetzung | |
Style | Benötigt eine ID Zulässige Styles:
|
* siehe auch: Die Parameter und ihre Bedeutung
{ "ID": "Contact", "Type": "List", "Data": "XMLContents", "ListData": "SectionContacts::1::OwnerContact", "ListObject": "Contact", "ListCount": 4, "ShowEmpty": 1, "ListType": "none", "Translate": true, "Value": [ "Contact.Title.Value", "Contact.Fullname.Value" ], "ReplaceAs": "", "Join": " ", "Style": { "Width": "100%", "Float": "left", "Class": [ { "Selector": " ", "CSS": "margin-bottom: 0.5rem;" }, { "Selector": " > li", "CSS": "font-family:arial; font-size:28pt; " } ] } }
Parameter | erwarteter Datentyp | Bedeutung |
---|---|---|
Object | String | Ist das Objekt, welches die Daten aufbereitet und bereitstellt. Für die Aufbereitung wird - abhängig vom Objekt - eine ID, Name oder Nummer benötigt. |
Expands | Array | String | Mit diesem Parameter kann die Datenmenge des Objekts um weitere Daten erweitert werden. Je Objekt sind unterschiedliche Expands möglich. Abhängig des |
Data | String | Wird nur von den Bausteinen Blocks und List unterstützt. Hiermit können explizit nur die Daten genutzt werden, die per Es ist zu beachten, dass das die Daten des übergeordnetem Objekt-Expands sind und nicht des Objekts, welches aufgebaut wird. |
Allow | Hash | Whitelist für den Baustein "Table" vom Typ "KeyValue" und "DataSet". Je nach Tabellentyp werden auch die darin genutzten Daten entsprechend gefiltert. Wird beispielsweise nur ein KeyValue-Typ genutzt, können damit nur bestimmte Attribute zugelassen werden. Wird stattdessen nur der Attribut-Typ genutzt, können nur bestimmte Datensätze zugelassen werden - sofern die Werte der zu prüfenden Attribute stimmen. Es gibt zwei Wertprüfungen die angewendet werden können:
|
Ignore | Hash | Blacklist für den Baustein "Table" vom Typ "KeyValue" und "DataSet". Abhängig von der vorliegenden Tabellenstruktur werden auch die darin genutzten Daten entsprechend gefiltert. Wird beispielsweise nur ein KeyValue-Typ genutzt, können damit bestimmte Attribute ignoriert werden. Wird stattdessen der Attribut-Typ genutzt, können bestimmte Datensätze weggelassen werden - sofern die Werte der zu prüfenden Attribute übereinstimmen. Es gibt zwei Wertprüfungen, die angewendet werden können:
|
Columns | Array | Ein Parameter für den Baustein "Table". Mit diesem Parameter kann festgelegt werden, wie die Tabelle aufgebaut werden soll. Dabei wird unterschieden zwischen den Typen:
Info: "KeyValue" und "Attribute" sind hier nur indirekte Bezeichnungen zum Verdeutlichen. |
Rows | ArrayOfArrays | Ein Parameter für den Baustein "Table" und dem Tabellentyp "Custom". Mit diesem Parameter kann der Inhalt der Tabelle festgelegt werden. Dieser Parameter steht in Kombination mit Columns. 'Rows' => [ [ 'Title', 'Contact.Title.Value', 'Phone', 'Contact.Phone.Value' ], |
Headline | Boolean | Aktiviert die Kopfzeile der Tabelle und zeigt die unter |
ID | String | Ist der Kenner des jeweiligen Bausteins. Sichert ab, dass das gesetzte In Tabellen mit der angegebenen ID kann die Verwendung von |
Translate | Boolean | Aktiviert die Übersetzung. |
Style | Hash | Definiert die Darstellung des jeweiligen Bausteins. Nicht jeder Style-Typ findet in jedem Baustein Anwendung. Achtung: Für eine gute Darstellung, sollten im Style möglichst nur die Maßangaben %, em oder rem angegeben werden.
|
Join | String | Mit |
Break | Boolean | Setzt eine Trennlinie unterhalb des Bausteins "Text". |
Value | Array | String | Werte, die im jeweiligen Baustein angezeigt werden sollen (Platzhalter-Ersetzung möglich). Nicht für Strukturtyp "Table" geeignet. 'Value' => 'Ticket.Title.Value' 'Value' => [ '<Font_Bold>Customer Information' ] Dieser Parameter kann sowohl als Array oder String genutzt werden. Hintergrund für das Array ist, dass nicht immer vollständige Texte übersetzt sind oder in Kombination mit Inhalten aus Platzhaltern diese Inhalte nicht existieren. Dadurch können die einzelnen Passagen mit |
Type | String | Ist der Baustein (wie Table, Text, Richtext usw.) |
SubType | String | Ist der Tabellentyp (wie Custom, KeyValue, DataSet usw.) |
PageOf | Boolean | Ist Teil des Bausteins "Page". Legt fest, ob "Seite X von Y" oder nur die Seitennummer angezeigt werden soll. |
TypeOf | String | Ist Teil des Bausteins "Image". Legt fest, was mit dem Wert aus dem Parameter
Hinweis: Es sollte die HTML-Schreibweise genutzt werden (data:<ContentType>; base64,<base64Content>) |
AsLink | Boolean | Definiert, dass der Baustein als Hyperlink dargestellt wird. Nur für Baustein "Text" anwendbar. Achtung: Wenn angegeben, dann sollte auch eine URL als |
ReplaceKey | Boolean | Ändert die internen Schlüsselbezeichnung mit übersetzbaren Anzeigenamen. Nur möglich mit dem Tabellentyp "KeyValue". Die ersetzbaren Schlüsselbezeichnungen sind aktuell fest im System hinterlegt. |
ReplaceAs | String | Definiert einen Wert, der gesetzt werden soll, wenn ein Platzhalter nach dem Ersetzen keinen Wert beinhaltet. Standard ist: Es ist möglich, einen Leerwert zu setzen. Dies gilt für alle Platzhalter, die im |
ListObject | String | Definiert das Objekt, welches die Daten aufbereitet und bereitstellt. Nur für Baustein "List" anwendbar. Für die Aufbereitung wird - abhängig vom Objekt - eine ID, Name oder Nummer benötigt. |
ListData | String | Hiermit können explizit nur die Daten genutzt werden, die als Bitte beachten Sie: Es handelt sich hierbei um die Daten des übergeordneten Objekt-Expands und nicht um die Daten des Objekts, welches aufgebaut wird. |
ListStyle | String | Definiert den Style der Liste. Nur für Baustein "List" anwendbar. Folgende Styles sind möglich:
|
ListCount | Numeric | Legt eine maximale Anzahl von anzuzeigenden Listeneinträgen fest. Nur für Baustein "List" anwendbar. Ist die Anzahl der Datensätze kleiner der maximalen Anzahl werden diese aufgefüllt - sofern |
ShowEmpty | Boolean | Zeigt Leerzeilen an, wenn beim Datensatz kein Wert vorhanden ist. Nur für Baustein "List" anwendbar. Kann kombiniert werden mit |
Damit die Ausdrucke auch Daten beinhalten, wird pro Vorlage ein Objekt (Ticket, Asset, Artikel o.a.) zu gewiesen, welches die Daten bereitstellt. Pro Vorlage kann immer nur ein Objekt als Hauptobjekt festgelegt werden. Dieses muss in der Datenbank hinterlegt sein.
Unterobjekte
In Vorlagen können auch Unterobjekte gesetzt werden. Diese sind von den Erweiterungen des Hauptobjekts abhängig.
Zum Beispiel bei einem Objekt vom Typ Ticket kann als Erweiterung "Article" gesetzt werden. Diese liefert eine Liste von Artikel-IDs des angefragten Tickets. Diese Liste kann dann als Block-Kombination mit dem Baustein List
genutzt werden.
Erweiterungen (Expands)
Expands sind zusätzliche Daten des Hauptobjekts, die in Relation zu ihm stehen. Durch Angabe von Expand
definieren Sie, welche zusätzlichen Daten des Objekts Sie bereitstellen möchten, z. B. die am Objekt hinterlegten Dynamischen Felder. Damit deren Werte im PDF angezeigt werden können, müssen Sie diese zusätzlich in den Blocks inkludieren:
{ "Type": "List", "Object": "Organisation", "Data": "Organisation", "Expand": "DynamicField", "Blocks":[ { "ID": "Organisation", "Type": "Table", "SubType": "Custom", "Include": "DynamicField", "Columns":[ "<Class_Col1><Font_Bold>", "<Class_Col2>", "<Class_Col1"<Font_Bold>", "Class_Col2" ], "Rows":[ [ "Organisation", "Organisation.Name.Value", "Customer No. / Type", "Organisation.Number.Value / Organisation.DynamicField_Type.Value.0" ], [...] ], "Translate":true, "Style":{ "Class":[{...}] } } ] }
Erweiterung | Beschreibung |
---|---|
Dynamic Field | Fügt den Ticketdaten den Parameter Die Daten werden als HashRef hinterlegt. Dieser beinhaltet den Schlüssel |
Article | Fügt den Ticketdaten den Parameter |
LinkObject | Fügt den Ticketdaten den Parameter Möglichle Verlinkungen sind:
|
Contact | Fügt den Ticketdaten den Parameter |
Organisation | Fügt den Ticketdaten den Parameter |
Erweiterung | Beschreibung |
---|---|
Dynamic Field | Fügt den Artikeldaten den Parameter Die Daten werden als HashRef hinterlegt. Dieser beinhaltet den Schlüssel |
Erweiterung | Beschreibung |
---|---|
Dynamic Field | Fügt den Organisationsdaten den Parameter Die Daten werden als HashRef hinterlegt. Dieser beinhaltet den Schlüssel |
Erweiterung | Beschreibung |
---|---|
Dynamic Field | Fügt den Kontaktdaten den Parameter Die Daten werden als HashRef hinterlegt. Dieser beinhaltet den Schlüssel |
Erweiterung | Beschreibung |
---|---|
Version | Fügt den Assetdaten den Parameter Darin ist ein Hashref mit den Grunddaten der Version. Es werden keine XMLData oder XMLDefinition mit ausgeliefert |
XMLAttributes | Fügt den Assetdaten den Parameter Als Schlüsselwert wird der XML-Pfad des jeweiligen Attributs genutzt und der aufbereitete Wert dazu gesetzt. Beispiel Schlüssel: |
XMLStructure | Fügt den Assetdaten den Parameter Diese Struktur kann nur im Zusammenhang mit dem gleichnamigen Tabellentyp |
XMLContents | Fügt den Assetdaten den Parameter Als Schlüsselwert wird der XML-Pfad des jeweiligen Attributs genutzt und der gespeicherte Inhalt (unaufbereitet) dazu gesetzt. Beispiel Schlüssel: |
Für die Formatierung und für spezifische Angaben können Platzhalter verwendet werden. Dies sind keine KIX-Platzhalter in herkömmlichen Sinn, sondern Platzhalter für die Texte und Tabelleninhalte im PDF.
Platzhalter | Beschreibung |
---|---|
<Font_Bold> | Stellt den Inhalt fett und serifenlos dar. |
<Font_Italic> | Stellt den Inhalt kursiv und serifenlos |
<Font_BoldItalic> | Stellt den Inhalt fett-kursiv und serifenlos dar. |
<Font_Mono> | Stellt den Inhalt in der Schriftart "Mono" dar. |
<Font_MonoBold> | Stellt den Inhalt in der Schriftart "Mono" und fett dar. |
<Font_MonoItalic> | Stellt den Inhalt in der Schriftart "Mono" und kursiv dar. |
<Font_MonoBoldItalic> | Stellt den Inhalt in der Schriftart "Mono" und fett-kursiv dar. |
Platzhalter | Beschreibung |
---|---|
<Current_Time> | Liefert das aktuelle Datum inkl. Zeit |
<Current_User> | Liefert den Namen des Users der die Konvertierung ausgeführt hat. |
<Count> | Count> | Liefert eine vorangestellte Zahl (Anwendung für Tabellen um Datensätze zu markieren). |
<Current_Date> | Liefert das aktuelle Datum ohne Zeit. |
Platzhalter | Beschreibung |
---|---|
<TIME_YYYYMMDD> | Liefert den aktuellen Zeitstempel zurück als "JahrMonatTag" (20250319). |
<TIME_YYYYMMDD_hhmm> | Liefert den aktuellen Zeitstempel zurück als "JahrMonatTagStundenMinuten" (202503191111). |
Syntax: <Object>.<Attribut>.<Key|Value>[.<ValueIndex>]
Attribut | Beschreibung |
---|---|
<Object> | Ist das Objekt, welches die Vorlage nutzt. Wenn ein Block ein "Data" hat, ändert sich das Objekt in das Objekt des "Datas", weil zu diesem Zeitpunkt andere Daten für den Block verwendet werden. |
<Attribute> | Das Attribut, welches Teil des Objekt ist. Mit dem Parameter |
<Key|Value> | Bestimmt, was angezeigt werden soll.
|
<Index> | Optional: Ist das Attribut ein Array, so kann nach dem Value noch der Index angeben werden, um den anzuzeigenden Wert zu bestimmen. Wird kein Index angegeben, werden alle Werte kommasepariert angezeigt. |
Beispiel: Platzhalter für das Objekt Ticket
// TicketNumber // <Object>.<Attribute>.<Key> Ticket.TicketNumber.Key // Dynamisches Feld (nur wenn Include DynamicField gesetzt ist) // <Object>.<Attribute>.<Value> Ticket.DynamicField_XYZ.Value // Multiselect Dynamisches Feld (nur wenn Include DynamicField gesetzt ist) // <Object>.<Attribute>.<Value>.<Index> Ticket.DynamicField_XXY.Value.1
Beispiel: Platzhalter für Objekt Asset
Bei Objekten vom Typ "Asset" können Sie neben den Standard Attributen auch die Attribute der Klassendefinition angewendet werden. Dafür müssen Sie allerdings in der Konfiguration des jeweiligen Blocks XMLAttributes
als Data
setzen, da es sich um Expand-Daten handelt.
Zum Anzeigen der Attributwerte müssen Sie die Struktur der Klassendefinition kennen. Verwenden Sie die gleiche Schreibweise wie in der SysConfig.
Syntax: <Attribut>::<Position>[...<SubAttribut::<Position>]
// Type // <Object>.<Class-Attribute>.<Value> Asset.SectionGeneral::1::Type::1.Value // Assigned Organisation // <Object>.<Class-Attribute>.<Value> Asset.SectionOwner::1::OwnerOrganisation::1.Value
Der Platzhalter <Class_...>
kann in jedem Baustein (außer "Blocks") angewendet werden. Mit ihm kann einer Spalte (unter Columns
) oder einem Text/Richtext (unter Value
) eine Style-Klasse mitgegeben werden, um den Inhalt zu formatieren.
Das Setzen der jeweiligen CSS für eine Klasse erfolgt im Parameter Style
mit dem Key Class
. Class
ist ein ArrayOfHashes, wo jeder Hash eine Klasse inkl. CSS ist. Im Hash gibt es zwei Keys:
Key | Beschreibung |
---|---|
Selector | CSS-Klasse, welche an die BlockID gesetzt wird. Es ist auf die CSS-Regeln der Selectoren zu achten.
|
CSS | Enthält die CSS-Angaben zum Selector. Die Angaben erfolgen als String und werden daher ohne |
Beispiel
{ "Type": "List", "Object": "Organisation", "Data": "Organisation", "Expand": "DynamicField", "Blocks": [ { "ID": "Organisation", "Type": "Table", "SubType": "Custom", "Include": "DynamicField", "Columns": [ "<Class_Col1><Font_Bold>", "<Class_Col2>", "<Class_Col1><Font_Bold>", "<Class_Col2>" ], "Rows": [ [ "Organisation", "Organisation.Name.Value", "Customer No. / Type", "Organisation.Number.Value / Organisation.DynamicField_Type.Value.0" ], [ "Street", "Organisation.Street.Value", "ZIP, City, Country", "Organisation.Zip.Value, Organisation.City.Value, Organisation.Country.Value" ] ], "Translate": true, "Style": { "Class": [ { "Selector": " .Col1", "CSS": "width: 20%;" }, { "Selector": " .Col2", "CSS": "width: 30%;" } ] } } ] },
Aktuell können Sie ein PDF aus einem HTML nur über einen Befehl in der Konsole (Terminal) konvertieren. In Zukunft wird das Konvertieren auch über die GUI möglich sein.
Über die Konsole können nur zwei Befehle ausgeführt werden. Das Hinzufügen einer neuen Vorlage ist vorerst nicht vorgesehen.
Im Menü System > Konsole stehen 2 Konsolenkommandos für HTMLToPDF zur Verfügung:
Mit dem Konsolenkommando Console::Command::Admin::HTMLToPDF::Inspect kann eine bestehende Vorlage eines Objekts eingesehen werden. Angezeigt wird die Struktur der Vorlage im PEARL-Format.
Anhand der angezeigten Struktur können Sie erkennen, wie die Vorlage aufgebaut ist und welche Parameter initial gesetzt sind. Diese Informationen können Sie nutzen, um bspw. in der Konfiguration der Macro Action "Konvertieren zu PDF" (KIX Pro) oder bei Ausführung des Convert-Befehls entsprechende Filter, Expands, Allows oder Ignores zu setzen oder zu ändern.
Nutzer von On-Premises-Installationen können optional in der Konsole (Terminal) folgenden Befehl nutzen:
webuser@system:/<KIX_HOME>$ ./bin/kix.Console.pl Admin::HTMLToPDF::Inspect --allow-root
Parameter
Sie können dem Konsolenbefehl zusätzliche Parameter mitgegeben, um anzugeben, welche Vorlagen Sie einsehen möchten:
Parameter | Pflichtfeld | Beschreibung |
---|---|---|
--name | ja | Name der Vorlage, die eingesehen werden soll. Die Angabe von Beispiele:
|
--id | ja | ID der Vorlage, die eingesehen werden soll (sofern bekannt). Die Angabe von Beispiele:
Hinweis: Je nach Installation kann die ID abweichend sein. Wir empfehlen die Verwendung des Namens. |
Der Konsolenbefehl Console::Command:: Admin::HTMLToPDF::Convert erstellt ein PDF auf Konsolenebene. Mit ihm wird die Konvertierung eingeleitet. Das heißt, es wird das HTML aus der gewählten Vorlage generiert und anschließen zu einem PDF konvertiert.
Nutzer von On-Premises-Installationen können optional in der Konsole (Terminal) folgenden Befehl nutzen:
webuser@system:/<KIX_HOME>$ ./bin/kix.Console.pl Admin::HTMLToPDF::Convert --allow-root
Das Convert-Kommando ist das Pendant zur Macro Action Konvertieren zu PDF
Das Convert-Kommando legt das PDF dort ab, wo das System liegt. Wird kein Dateiname oder Ablageort angegeben, wird der Standard verwendet. Das Standard-Ablageverzeichnis ist aktuell /tmp
. Der Standard-Dateiname wird aus dem Vorlagenname, der gelieferten ID oder Nummer und der aktuellen Zeit gebildet. Zum Beispiel:
<Templatename>_<ID | Number>_<Timestamp> -> Ticket_1_20221008090052
Sie können dem Konsolenbefehl zusätzliche Parameter mitgegeben und damit die PDF-Ausgabe manipulieren.
Parameter | Pflichtfeld | Beschreibung |
---|---|---|
--name | ja | Name der Vorlage die konvertiert werden soll, z. B. Ticket |
--user_id | UserID des Erstellers. Es wird der Name des Benutzers im Dokument als <Current_User> angegeben, wenn dieser gesetzt ist. | |
--filename | Spezifischer Dateiname der PDF (Angabe ohne Datei-Endung) | |
--directory | Ablageort der erstellten PDF | |
--filter | (als JSON-String) Filtert die in der Vorlage gesetzten Objekte | |
--allow | (als JSON-String) Überschreibt die in der Tabelle gesetzten Allows. Dazu ist die ID des jeweiligen Bausteins notwendig (s. Allow und Ignore). | |
--ignore | (als JSON-String) Überschreibt in die in der Tabelle gesetzten Ignores. Dazu ist die ID des jeweiligen Bausteins notwendig (s. Allow und Ignore). | |
--id | ja | Notwendige ID, damit das Objekt die Daten aufbereiten kann (z. B. TicketID oder ArticleID) Was das Objekt erwartet, kann mit |
--number | ja | Notwendige Nummer, damit das Objekt die Daten aufbereiten kann. Was das Objekt erwartet, kann mit |
--help | Liefert Information zu einem Befehl. |
Filter
Mit Filter können in der Vorlage gesetzte Objekte gefiltert werden. Das Hauptobjekt sollte nicht enthalten sein, da sonst das PDF leer sein könnte. Im Befehl muss dies als JSON-String hinterlegt werden.
Struktur Filter Format
{ "Object": { "AND|OR": [ { "Field": "Attribute", "Type": "EQ|CONTAINS", "Value": "some values" } ] } }
Beispiel Filter Format
{ "Article": { "AND": [ { "Field": "ArticleType", "Type": "EQ", "Value": "external" } ] } }
Allow und Ignore
Die Struktur der Parameter Allow
und Ignore
ist ein Hash-Wert im JSON-Format. Key
ist der Attributname. Mit dem dazugehörigen Wert
kann bestimmt werden, was mit dem Attribut zu tun ist.
Um die jeweilige Tabelle anzusprechen, wird deren Referenz-ID benötigt. Diese kann der Template-Struktur entnommen werden. Nutzen Sie dazu im Menü Console::Command::Admin::HTMLToPDF::Inspect.
den Konsolen-Befehl
Abb.: Ermitteln der Referenz-ID für Tickets anhand der Template-Struktur in der Konsole
Ist die ID bekannt, kann ein JSON aufgebaut werden, welches die einzuschränkenden Attribute enthält. Bei der Einschränkung gibt es zwei Möglichkeiten:
Wird dem Attribut der Wert
KEY
gesetzt, dann wird das gesamte Attribut ohne weitere Prüfung entweder angezeigt (Allow) oder wird ignoriert (Ignore).Wird dem Attribut anstelle des
KEY
ein regulärer Ausdruck gesetzt, dann wird dieser reguläre Ausdruck auf den Wert des Attributes angewendet.Durch Nutzung eines RegEx können die Werte eines Attributes geprüft werden. Trifft der jeweilige Wert zu, wird das Attribut ignoriert bzw. angezeigt.
Das RegEx ist frei wählbar. Es darf jedoch nicht
KEY
enthalten, daKEY
das Schlüsselwort für das gesamte Attribut ist.Syntax:
{ "Referenz-ID": { "Attribut": "KEY", "Attribut": "regex" } }
Beispiel:
{ "ArticleMeta": { "Channel": "KEY", "From": "kixdesk.com" } }
Bei
Allow
bedeutet dies, dass der Channel angezeigt wird.From wird aber nur angezeigt, wenn "kixdesk.com" am Ende enthalten ist. Alle anderen möglichen Attribute werden nicht angezeigt.
Bei
Ignore
bedeutet dies, dass der Channel direkt ignoriert wird.From wird jedoch nur ignoriert, wenn "kixdesk.com" am Ende enthalten ist. Alle anderen Attribute werden angezeigt.
In den ausgelieferten Vorlagen ist vordefiniert, welche Informationen das PDF enthält. Da diese Informationen ausreichend oder zu umfangreich sein können, können diese mit --allow
oder --ignore
temporär beeinflusst werden. Diese Beeinflussung gilt nur für die aktuelle Ausführung des Konsolenbefehls bzw. nur bei Ausführung der Macro Action "Konvertieren zu PDF" (KIX Pro).
Es ist vorher abzuwägen, was einfacher abzubilden ist. Mitunter ist die Anwendung einer Whitelist (allow
) einfacher als die Anwendung einer Blacklist (ignore
) - oder umgekehrt. Es kommt immer darauf an, was angezeigt werden soll.
Wichtig
Sind beide Optionen (allow
und ignore
) angegeben und beide Optionen enthalten eine ID, so wird die ID aus allow
verwendet.
In diesem Beispiel wird ignore
verwendet. Die Struktur des JSON ist die gleiche wie bei allow
. Der Unterschied ist, dass ignore
als Blacklist und allow
als Whitelist gehandelt wird. Da ignore
verwendet wird, werden auch alle Informationen zum Artikel angezeigt. Das betrifft auch die Dynamischen Felder, sofern beim Strukturtyp ein Include
gesetzt ist. Im Standard ist dies nicht der Fall.
Zunächst wird die ID des Strukturtyps "Table" benötigt. Damit wird angegeben, auf welche Tabelle die Einschränkung der anzuzeigenden Informationen gilt. In beiden Vorlagen enthält die ID "ArticleMeta" die Artikelinformationen.
Im Beispiel sollen alle Artikelinformationen angezeigt werden, außer den Angaben zu CustomerVisible, MessageID, TicketID, ChannelID, Body, Cc und Bcc. Der Channel soll jedoch nur angezeigt werden, wenn dieser nicht "note" ist.
Hinweis
KEY ist ein Trigger dafür, dass das gesamte Attribut entweder zu- oder weggelassen wird
Beispiel
{ "ArticleMeta": { "CustomerVisible": "KEY", "MessageID": "KEY", "TicketID": "KEY", "ChannelID": "KEY", "Body": "KEY", "Cc": "KEY", "Bcc": "KEY", "Channel": "note" } }
Minimieren Sie den JSON-String, um ihn anschließend in den Konsolenbefehl einzufügen (Klick auf "minify" im JSON-Editor). Nach dem Absenden des Konsolenbefehls wird das PDF erstellt.
webuser@system:/<KIX_HOME>$ ./bin/kix.Console.pl Admin::HTMLToPDF::Convert --allow-root --id 1 --name Ticket --ignore '{"ArticleMeta":{"CustomerVisible":"KEY","MessageID":"KEY","TicketID":"KEY","ChannelID":"KEY","Body":"KEY","Cc":"KEY","Bcc":"KEY","Channel":"note"}}'
Die Macro Action "Konvertieren zu PDF" erwartet die Angaben im Parameter Allows
bzw. Ignores
ebenfalls als JSON-String. Hier ist es nicht nötig, den JSON-String zu minimieren.
Es soll nur ein bestimmter Artikel mit Angabe zusätzlicher Ticketinformationen gedruckt werden. Grundsätzlich könnte dazu die Vorlage "Article" genutzt werden. Diese enthält jedoch keine Ticketinformationen, weshalb die Vorlage "Ticket" zu verwenden ist. Die Vorlage "Ticket" wiederum druckt aber alle Artikel des Tickets. Daher muss dem Befehl ein Filter hinzugefügt werden, welcher den gewünschten Artikel selektiert. In diesem Beispiel wird der Filter über die Artikelnummer eingeschränkt.
Hinweis
Die Artikelnummer ist kein Parameter des Artikels, sondern ein externer Zähler. Dieser kann nur mit der Vorlage "Ticket" angewendet werden.
Ein über den Konsolenbefehl gesetzter Filter muss ein JSON-String sein. Verwenden Sie dazu ggf. einen JSON-Editor (z. B. jsonformatter.io). Für dieses Beispiel sieht der Filter folgendermaßen aus:
Artikelfilter auf den 4. Artikel des Tickets
{ "Article": { "AND": [ { "Field": "ArticleNumber", "Type": "EQ", "Value": "4" } ] } }
Minimieren Sie den JSON-String, um ihn anschließend in den Konsolenbefehl einzufügen (Klick auf
im JSON-Editor). Nach dem Absenden des Konsolenbefehls wird das PDF erstellt. Es enthält die Ticketinformationen und den gewählten Artikel.webuser@system:/<KIX_HOME>$ ./bin/kix.Console.pl Admin::HTMLToPDF::Convert --allow-root --id 1 --name Ticket --filter '{"Article":{"AND":[{"Field":"ArticleNumber","Type":"EQ","Value":"4"}]}}'
Die Macro Action "Konvertieren zu PDF" erwartet den Filter ebenfalls als JSON-String. Hier ist es nicht nötig, den JSON-String zu minimieren.
In KIX Pro steht Ihnen eine Macro Action zur Verfügung, mit der Sie den PDF-Druck eines Artikels oder Tickets via Job oder Aktion auslösen können.
Die Macro Action konvertiert Informationen eines Objekts (wie bspw. Artikel, Ticket oder Asset) entsprechend der gewählten Druckvorlage in eine PDF-Datei. Sie ist das Pendant zum Konsolen-Befehl Console::Command:: Admin::HTMLToPDF::Convert.
Sie ermöglicht
die Ausgabe von Objekt-Informationen mittels Job oder Aktion in einer PDF-Datei.
die Bereitstellung von Artikel- oder Ticket-Inhalten in automatisiert erstellten Tickets oder in E-Mails (z. B. Erstellen und Versenden von Abrechnungen oder Serviceberichten).
die Bereitstellung des erstellten PDFs an einem Dynamischen Feld vom Typ Attachment (z. B. als Artikel-Anhang).
in Verbindung mit Webhooks auch das Archivieren von Ticketvorgängen als PDF in ein Dokumentenmanagementsystem
die kombinierte Verwendung mit den Macro Actions Artikel Anhang hinzufügen und Objekt zusammenstellen.
Die Macro Action nutzt die im System hinterlegten Druckvorlagen für den PDF-Druck. In der Konfiguration der Macro Action müssen Sie angeben, welche der zur Auswahl stehenden Druckvorlagen genutzt werden soll und von welchem Objekt (basierend auf der Angabe der Druckvorlage) die Informationen für das PDF bezogen werden sollen.
Zusätzlich zu den Pflichtangaben können Sie Dateiname, Filter, Allow und Ignore angeben und so die zu druckenden Informationen beeinflussen. Hierbei werden bestimmte Informationen der gewählten Druckvorlage überschrieben, sofern diese enthalten sind. Die Vorgaben der Druckvorlage werden dabei nur temporär für die PDF-Ausgabe geändert.
Als Rückgabewert liefert die Macro Action einen Dateianhang im JSON-Format, in dem Content
, Filename
, FileSize
und ContentType
enthalten ist. Auf diesen Rückgabewert kann bspw. in der Macro Action Article Attachment Add referenziert werden, um das erzeugte PDF als Anhang an einen Artikel zu setzen.

Abb.: Verwendungsbeispiel Macro Action "Konvertieren zu PDF"
Verwendung/Jobtyp: Ticket
Parameter | Beschreibung |
---|---|
Datei | Name der Ergebnisvariable Gibt einen Dateianhang als JSON zurück, in dem Sie können bspw. in der Macro Action "Artikel Anhang hinzufügen" auf die Variable referenzieren, um das erzeugte PDF als Anhang an einen Artikel zu setzen. |
Vorlage | Auswahl der Vorlage, welche für den PDF-Druck verwendet werden soll. Zur Auswahl stehen die im System hinterlegten Vorlagen für den PDF-Druck. |
Identifier Type | Bestimmt den internen Parameter des Objekts (Objekttyp der gewählten Druckvorlage), z. B. ArticleID Definiert, von welchem Objekt die Daten bezogen werden. |
Identifikator | Wertangabe, die aufgrund des Identifikator-Typs gesetzt werden muss, damit die Daten für die Druckvorlage gewonnen werden können. Z. B.<KIX_ARTICLE_ArticleID> oder |
Dateiname | Optionaler Dateiname, der anstatt des Standardnamens verwendet werden soll Z. B.: Article_<KIX_ARTICLE_ArticleID>_<TIME_YYMMDD>. Sie können den Platzhalter <TIME_YYMMDD> verwenden, um dem Dateinamen die Erstellungszeit der PDF-Datei hinzuzufügen. |
Erweitert | Optional: Definiert, welche zusätzlichen Daten (Expands) für den Druck herangezogen werden sollen, z. B.: Dynamisches Feld. Die zur Auswahl stehenden Erweiterungen hängen von der gewählten Vorlage ab. |
Filter | Optional: Sie können Filter angeben, um bestimmte Erweiterungen einzuschränken (Format als JSON) Möglich nur bei ID-Listen. Gilt überall dort, wo das gleiche Objekt genutzt wird. Beispiel: Von einem Ticket sollen nur die für den Kunden sichtbaren Artikelberücksichtigt werden: { "Article": { "AND": [{ "Field": "CustomerVisible", "Type": "EQ", "Value": "1" }] } } |
Erlaubt (Whitelist) | Optionale Einschränkung des Tabelleninhalts. Nur möglich bei Tabellentyp "KeyValue" oder "DataSet" Überschreibt/manipuliert das, was in der Druckvorlage für die jeweilige Tabelle gespeichert ist. Die Verwendung von Regulären Ausdrücken (RegEx) ist möglich. { "InfoTableLeft": { "AccountedTime": "KEY", "DynamicField_DFChecklist": "KEY", "DynamicField_DFDropdown": "^regex$", "Created": "KEY", "CreateBy": "KEY", "ContactID": "KEY", "PendingTime": "KEY" } } Ausführliche Hinweise zum Parameter: Die Parameter Allow und Ignore |
Ignorieren (Blacklist) | Optionale Einschränkung des Tabelleninhalts. Nur möglich bei Tabellentyp "KeyValue" oder "DataSet" Überschreibt/manipuliert das, was in der Druckvorlage für die jeweilige Tabelle gespeichert ist. Der Aufbau ist analog Ausführliche Hinweise zum Parameter: Die Parameter Allow und Ignore |