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:
beim Druck von Assets
Sie können klassenspezifische Druckvorlagen bereitstellen.
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": [ ... ]
}
ExpandsIst eine Liste von Erweiterungen, die das Hauptobjekt bereitstellen soll (z. B. Dynamische Felder)PageDefiniert die Seiteneinstellung des PDF (Randabstände, Format usw.)HeaderDefiniert den Seitenkopf, in dem beispielsweise ein Logo enthalten ist.Ist der Header gesetzt, wird er auf jeder Seite wiederholt angewendet.
ContentDefiniert 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. FooterDefiniert 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ü → durch Ausführung des Konsolenbefehls Console::Command::Admin::HTMLtoPDF::Inspect (s. auch: Verwendung der Konsole und Console::Command::Admin::HTMLToPDF::Inspect)
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
Seitenkopf + Seiteninhalt + Seitenfuß
Content + Footer
Seiteninhalt + Seitenfuß
Header + Content
Seitenkopf + Seiteninhalt
nur Content
nur Seiteninhalt
Header + Footer + Content | Content + Footer | Header + Content | nur Content |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
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": [ ... ]
}
Parameter für die Seitenkonfiguration
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:
Blocksmuss vom TypListsein.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 |
|---|---|---|
Object | ja | Objekt, welches in den darunter liegenden Bausteinen genutzt werden soll. |
Expands | nein | Erweiterung der Datenmenge um zusätzliche Angaben des gewählten Objekts. |
Filters | nein | 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 |
ID | nein | Kenner des gesamten Blocks (Default: |
| Siehe auch: | Die Parameter und ihre Bedeutung |
| Beispiel: | Struktur für Blocks (wiederholende Kombination) |
{
"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 |
ID | Kenner des gesamten Blocks (Default: |
| Siehe auch: | Die Parameter und ihre Bedeutung |
| Beispiel: | Nebeneinander dargestellte Bausteine |
{
"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 |
ID | ja | Kenner |
AsLink | nein | Bestimmt, ob der Text als Link dargestellt werden soll. |
Value | ja | Array oder String; Kann Platzhalter auflösen |
Translate | nein | Aktiviert die Übersetzung |
Style | nein | Benötigt eine ID Zulässige Styles:
|
Break | nein | Aktiviert die Trennlinie unterhalb des Strukturtyps |
Join | nein | 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 |
| Beispiel: | Struktur-Code für den Baustein Text |
{
"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 |
ID | ja | Kenner |
Value | ja | Array oder String Kann Platzhalter auflösen |
Translate | nein | Aktiviert die Übersetzung |
Style | nein | Benötigt eine ID Zulässige Styles:
|
Join | nein | Wird benötigt, wenn |
| Siehe auch: | Die Parameter und ihre Bedeutung |
| Beispiel: | Struktur-Code für den Baustein Richtext |
{
"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 |
ID | ja | Kenner |
PageOf | ja | Legt die Darstellungsart fest.
|
Translate | nein | Aktiviert die Übersetzung |
Style | nein | Benötigt eine ID Zulässige Styles:
|
| Siehe auch: | Die Parameter und ihre Bedeutung |
| Beispiel: | Struktur-Code für den Baustein Page |
{
"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 | ||
ID | ja | Kenner | ||
Value | ja | Abhängig von Typen:
| ||
TypeOf | ja | Zulässige Typen:
| ||
Style | nein | Benötigt eine ID Zulässige Styles:
|
| Siehe auch: | Die Parameter und ihre Bedeutung |
| Beispiel: | Baustein vom Typ Image |
{
"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.: Mit dem Baustein Table können Informationen in Tabellenform dargestellt werden
| 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.
Bausteinvarianten (SubTypes)
Tabellen können große Datenmengen abbilden und das in unterschiedlicher Form. Um diese Daten abzubilden, gibt es folgende Bausteinvarianten, 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.
| Beispiel: | Standard-Darstellung einer Tabelle (KeyValue ohne Count) |
Key | Value |
|---|---|
Attributname | Attributwert |
{
"Columns": [
"Key",
"Value"
],
"Type": "Table",
"SubType": "KeyValue",
...
},| Beispiel: | Standard-Darstellung einer Tabelle mit Nummerierungsspalte (KeyValue mit Count) |
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: | 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"
},
},Allowlässt Attribute zu und definiert somit eine Whitelist.Es werden nur die benannten Attribute anzeigt.
Alle Attribute, die nicht im
Allowangegeben 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. }Ignoreverweigert Attribute und definiert somit eine Blacklist.Es werden die Attribute entfernt, welche es durch die Whitelist geschafft haben.
Ist kein
Ignoregesetzt, entspricht das Endergebnis dem Ergebnis derAllow-Anwendung.Ignorekann zusätzlich zuAlloweingesetzt werden. Der Aufbau entspricht dem vonAllow, mit dem Unterschied, dass die angegebenen Attribute aus der Tabelle entfernt werden.Zu beachten ist:
Ist ein
Allowfür die Tabelle gesetzt, so wird dasIgnoreauf die Attibute angewendet, die durchAllowgefiltert wurden.Ist kein
Allowgesetzt, 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
AllownochIgnoredefiniert, werden alle Angaben aus den Objekten angezeigt.Die Angabe eines leeren Hashes leert das vom Template vorgegebene
Allowbzw.Ignore:{ "ArticleMeta": {} }
Mit der Bausteinvariante DataSet können die Datensätze zeilenweise in einer Tabelle angezeigt werden. Im Gegensatz zu KeyValue muss jedoch unter 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.
| Beispiel: | Standard-Darstellung einer Tabelle |
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.*",
},
},Die Bausteinvariante Custom ist die flexibelste Variante 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.ValueoderTicket.DynamicField_xyz.Value
Eine Einschränkung mit Allow bzw. 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 Bausteinvariante 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 verschachtelten Liste 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%;"
}
]
}
}
]
} Der Code in diesem Beispiel erzeugt folgende Tabelle. Die Breite der 1. Spalte beträgt 20%. Die Werte werden beim Druck durch die reellen Werte ersetzt.
|
|
|
|
|
|
Die Bausteinvariante XMLStructure ist nur in Kombination mit dem Objekt Asset nutzbar. Sie erzeugt eine Tabelle, die ähnlich der Asset Detailansicht ist.
Zu beachten ist:
Einstellungen mit
ColumnsundRowssind nicht möglich.Im Konfigurationsblock muss als
DataimmerXMLStructuregesetzt sein.Einschränkungen mittels
allowoderi gnoresind 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
Dummyhaben als KlassenprefixDLAlle anderen Attribute haben den Klassenprefix
PLWenn kein CSS hinterlegt ist, greift das CSS der Standard-Tabelleneinstellung.
| Beispiel: | Struktur des Tabellentyps XMLStructure |
{
"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 | nein | Liefert ein Hash mit Attributen die je Variante das Attribute oder den Datensatz in der Tabelle darstellt. (Whitelist) |
Ignore | nein | 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 Definiert den Tabelleninhalt zeilen- und spaltenweise |
Include | nein | Fügt ein Achtung: Der |
Translate | nein | Wenn aktiviert: Übersetzt den Spalteninhalt und den Spaltenkopf |
Style | nein | Benötigt eine ID Zulässige Styles:
|
Headline | nein | Aktiviert den Spaltenkopf
|
ReplaceAs | nein | 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 | nein | Ändert die internen Schlüsselbezeichnung mit übersetzbaren Anzeigenamen. Nur möglich mit dem Tabellentyp 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 |
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 | nein | 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 | nein | Definiert den Stil der Liste Folgende Typen sind möglich:
|
ShowEmpty | nein | 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 Kann Platzhalter auflösen |
Join | nein | Definiert, wie die Werte aus |
ReplaceAs | nein | Definiert einen Wert, der gesetzt werden soll, wenn Platzhalter nach dem Ersetzen keinen Wert beinhalten. Standard: Sie können auch einen Leerwert setzen. |
Translate | nein | Aktiviert die Übersetzung |
Style | nein | Benötigt eine ID Zulässige Styles:
|
| Siehe auch: | Die Parameter und ihre Bedeutung |
| Beispiel: | Struktur-Code für den Baustein List |
{
"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 Je nach Tabellentyp werden auch die darin genutzten Daten entsprechend gefiltert. Wird beispielsweise nur ein 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 Abhängig von der vorliegenden Tabellenstruktur werden auch die darin genutzten Daten entsprechend gefiltert. Wird beispielsweise nur ein 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: | ||
Rows | ArrayOfArrays | Ein Parameter für den Baustein 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 String | 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 | ||
Value | Array | String | Werte, die im jeweiligen Baustein angezeigt werden sollen (Platzhalter-Ersetzung möglich). Nicht für Strukturtyp '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 | ||
TypeOf | String | Ist Teil des Bausteins
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
| ||
ReplaceKey | Boolean | Ändert die internen Schlüsselbezeichnung mit übersetzbaren Anzeigenamen. Nur möglich mit dem Tabellentyp 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: 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 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 Nur für Baustein 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 Folgende Styles sind möglich:
| ||
ListCount | Numeric | Legt eine maximale Anzahl von anzuzeigenden Listeneinträgen fest. Nur für Baustein 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 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":[{...}]
}
}
]
}Ticket
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 |
Article
Erweiterung | Beschreibung |
|---|---|
Dynamic Field | Fügt den Artikeldaten den Parameter Die Daten werden als HashRef hinterlegt. Dieser beinhaltet den Schlüssel |
Organisation
Erweiterung | Beschreibung |
|---|---|
Dynamic Field | Fügt den Organisationsdaten den Parameter Die Daten werden als HashRef hinterlegt. Dieser beinhaltet den Schlüssel |
Contact
Erweiterung | Beschreibung |
|---|---|
Dynamic Field | Fügt den Kontaktdaten den Parameter Die Daten werden als HashRef hinterlegt. Dieser beinhaltet den Schlüssel |
Asset
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 |
<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 das 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ü → 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
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:
|
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 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 | nein | UserID des Erstellers. Es wird der Name des Benutzers im Dokument als |
--filename | nein | Spezifischer Dateiname der PDF (Angabe ohne Datei-Endung) |
--directory | nein | Ablageort der erstellten PDF |
--filter | nein | (als JSON-String) Filtert die in der Vorlage gesetzten Objekte |
--allow | nein | (als JSON-String) Überschreibt die in der Tabelle gesetzten Allows. Dazu ist die ID des jeweiligen Bausteins notwendig (s. Allow und Ignore). |
--ignore | nein | (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 | ja | 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ü → den Konsolen-Befehl Console::Command::Admin::HTMLToPDF::Inspect.

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
KEYgesetzt, dann wird das gesamte Attribut ohne weitere Prüfung entweder angezeigt (Allow) oder wird ignoriert (Ignore).Wird dem Attribut anstelle des
KEYein 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
KEYenthalten, daKEYdas Schlüsselwort für das gesamte Attribut ist.Syntax:
{ "Referenz-ID": { "Attribut": "KEY", "Attribut": "regex" } }Beispiel:
{ "ArticleMeta": { "Channel": "KEY", "From": "kixdesk.com" } }Bei
Allowbedeutet 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
Ignorebedeutet 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 ??? (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. 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"}}'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. 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. 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"}]}}'


