PDF-Generierung
Syntax
pdfFile(html: $htmlContent, name: $filename,
pageSize: $size, landscape: $landscape,
pageWidth: $width, pageHeight: $height,
marginLeft: $ml, marginRight: $mr,
marginTop: $mt, marginBottom: $mb,
resolution: $dpi
)
Beschreibung
Konvertiert HTML-Inhalte in ein PDF-Dokument. Das HTML wird als PDF gerendert, wobei die Flying Saucer-Bibliothek verwendet wird, die hochwertige PDF-Ausgaben aus wohlgeformtem XHTML erzeugt.
Diese Funktion akzeptiert vier Arten von Eingaben:
- Zeichenkette: Einfaches HTML als mehrzeiliges String-Literal (mit dreifachen Anführungszeichen
"""...""") - HTML: HTML mit eingebetteten TLScript-Ausdrücken (mit HTML-Literal-Syntax mit dreifachen geschweiften Klammern
{{{...}}}) - Strukturierter Text: Rich-Text-Inhalte aus WYSIWYG-Editor-Feldern mit eingebetteten Bildern. Bilder werden automatisch in BASE64-Daten-URIs für das PDF-Rendering konvertiert
- Binärdaten: Binärdaten mit Content-Type
text/htmlodertext/plain, die HTML-Markup enthalten
Diese Funktion ist besonders nützlich für die Erstellung von Berichten, Rechnungen oder anderen Dokumenten, die dynamisch aus HTML-Vorlagen generiert und als PDF exportiert werden müssen.
Wichtig: Das HTML muss wohlgeformtes XHTML sein. Alle Tags müssen ordnungsgemäß geschlossen werden, und selbstschließende Tags sollten die XHTML-Syntax verwenden (z.B. <br/> statt <br>).
Parameter
| Bezeichnung | Typ | Beschreibung | Pflicht | Standard |
|---|---|---|---|---|
| html | String, HTMLFragment, StructuredText oder Binärdaten | Der HTML-Inhalt, der in PDF konvertiert werden soll. Kann ein einfacher String (mit dreifachen Anführungszeichen """..."""), ein HTMLFragment (mit dreifachen geschweiften Klammern {{{...}}} Syntax mit eingebetteten TLScript-Ausdrücken), ein StructuredText aus WYSIWYG-Editor-Feldern (mit automatisch eingebetteten BASE64-Bildern) oder eine Binärdaten mit Content-Type text/html oder text/plain sein. Muss wohlgeformtes XHTML sein, bei dem alle Tags ordnungsgemäß geschlossen sind. |
ja | |
| name | Zeichenkette | Der Dateiname für das generierte PDF. Die Erweiterung .pdf wird automatisch hinzugefügt, falls nicht vorhanden. | nein | document.pdf |
| pageSize | Zeichenkette | Standard-Papierformat. Unterstützte Werte: A0, A1, A2, A3, A4, A5, A6, LETTER, LEGAL, TABLOID. Wenn angegeben, werden pageWidth und pageHeight automatisch basierend auf der Auflösung berechnet. Werte sind nicht case-sensitiv. |
nein | A4 (wenn weder pageSize noch pageWidth/pageHeight angegeben) |
| landscape | Boolean | Wenn true, werden Seitenbreite und -höhe für Querformat getauscht. Funktioniert sowohl mit pageSize als auch mit benutzerdefinierten pageWidth/pageHeight-Werten. |
nein | false |
| pageWidth | Zahl/Zeichenkette | Überschreibung der Seitenbreite in Pixeln oder Größenangabe wie "15cm", "150mm", "7.5in". Wenn angegeben, hat dies Vorrang vor der pageSize-Breite. |
nein | null |
| pageHeight | Zahl/Zeichenkette | Überschreibung der Seitenhöhe in Pixeln oder Größenangabe wie "15cm", "150mm", "7.5in". Wenn angegeben, hat dies Vorrang vor der pageHeight-Höhe. |
nein | null |
| margin | Zahl/Zeichenkette | Der linke Rand in Pixeln oder Größenangabe wie "1cm", "15mm", ".5in". | nein | "15mm" |
| marginLeft | Zahl/Zeichenkette | Der linke Rand in Pixeln oder Größenangabe wie "1cm", "15mm", ".5in". | nein | null |
| marginRight | Zahl/Zeichenkette | Der rechte Rand in Pixeln oder Größenangabe wie "1cm", "15mm", ".5in". | nein | null |
| marginTop | Number | Der obere Rand in Pixeln oder Größenangabe wie "1cm", "15mm", ".5in". | nein | null |
| marginBottom | Number | Der untere Rand in Pixeln oder Größenangabe wie "1cm", "15mm", ".5in". | nein | null |
| resolution | Number | Die Rendering-Auflösung in DPI (Punkte pro Zoll). Höhere Werte erzeugen bessere Qualität, aber größere Dateien. Dies beeinflusst auch, wie pageSize-Dimensionen berechnet werden (z.B. A4 bei 150 DPI = 1240x1754 px, A4 bei 300 DPI = 2480x3508 px). |
nein | 150 |
Rückgabewert
Typ: BinaryData
Gibt ein Binärdaten-Objekt zurück, das das generierte PDF mit dem Content-Type application/pdf enthält. Gibt null zurück, wenn die HTML-Eingabe null oder leer ist.
Wenn die PDF-Generierung fehlschlägt, wird eine RuntimeException mit Details zum Fehler ausgelöst.
Beispiele
Einfaches PDF mit aus Text
pdfFile("""
<html>
<body>
<h1>Hallo Welt</h1>
<p>Dies ist ein aus HTML generiertes PDF.</p>
</body>
</html>
""")
Ausgabe: Ein PDF-Dokument mit dem Namen "document.pdf", das "Hallo Welt" als Überschrift und einen Textabsatz enthält.
PDF mit HTMLFragment und dynamischem Inhalt
pdfFile({{{
<html>
<body>
<h1>Rechnung für {$customer.get(`my.module:Customer#name`)}</h1>
<p>Datum: {dateFormat('yyyy-MM-dd').format(now())}</p>
<p>Betrag: {$invoice.get(`my.module:Invoice#amount`)}</p>
</body>
</html>
}}}, "rechnung-" + $invoice.get(`my.module:Invoice#number`))
Ausgabe: Ein PDF mit dynamisch generiertem Inhalt. Die {{{...}}} Syntax ermöglicht das Einbetten von TLScript-Ausdrücken direkt im HTML, die vor der PDF-Generierung ausgewertet und sicher HTML-kodiert werden.
PDF mit benutzerdefiniertem Dateinamen
pdfFile("""
<html>
<body>
<h1>Rechnung</h1>
<p>Rechnung #12345</p>
</body>
</html>
""", "rechnung-12345")
Ausgabe: Ein PDF-Dokument mit dem Namen "rechnung-12345.pdf". Die Erweiterung .pdf wird automatisch hinzugefügt.
Gestalteter Bericht mit dynamischem Dateinamen
pdfFile({{{
<html>
<head>
<style>
body \{ font-family: Arial, sans-serif; \}
h1 \{ color: #333366; \}
table \{ border-collapse: collapse; width: 100%; \}
th, td \{ border: 1px solid #ddd; padding: 8px; \}
th \{ background-color: #4CAF50; color: white; \}
</style>
</head>
<body>
<h1>Verkaufsbericht</h1>
<p>Erstellt am: {dateFormat('yyyy-MM-dd').format(now())}</p>
<table>
<tr>
<th>Produkt</th>
<th>Menge</th>
</tr>
<tr>
<td>Widget A</td>
<td>150</td>
</tr>
</table>
</body>
</html>
}}}, "verkaufsbericht-" + dateFormat('yyyy-MM-dd').format(now()))
Ausgabe: Ein gestalteter PDF-Bericht mit dem Namen "verkaufsbericht-2025-10-22.pdf", einschließlich Tabelle, eingebetteter CSS-Stile und dynamischem Datum.
Dynamischer Inhalt mit Iteration
pdfFile({{{
<html>
<body>
<h1>Rechnungspositionen</h1>
<ul>
{$items.map(item -> {{{
<li>{item.get(`my.module:Item#name`)} - {item.get(`my.module:Item#price`)}</li>
}}})}
</ul>
</body>
</html>
}}})
Ausgabe: Ein PDF mit einer dynamisch generierten Liste von Rechnungspositionen.
PDF aus StructuredText (WYSIWYG-Inhalt)
// WYSIWYG-Editor-Inhalt in PDF konvertieren
pdfFile($object.get(`my.module:Article#content`), name: "artikel.pdf")
Ausgabe: Ein PDF, das aus StructuredText-Inhalt generiert wurde. Alle eingebetteten Bilder im WYSIWYG-Feld werden automatisch in BASE64-Daten-URIs konvertiert und in das PDF eingefügt.
Verwendung von Standardpapierformaten
// US Letter Papierformat
pdfFile("""
<html>
<body>
<h1>US Letter Dokument</h1>
<p>Dieses Dokument verwendet das US Letter Papierformat.</p>
</body>
</html>
""", name: "letter-doc.pdf", pageSize: "LETTER")
Ausgabe: Ein PDF mit US Letter-Papierformat (216 x 279 mm) bei der Standard-Auflösung von 150 DPI.
Querformat
// A4 Querformat für breite Inhalte
pdfFile({{{
<html>
<body>
<h1>Breiter Bericht</h1>
<table style="width: 100%">
<tr>
<th>Spalte 1</th>
<th>Spalte 2</th>
<th>Spalte 3</th>
<th>Spalte 4</th>
<th>Spalte 5</th>
</tr>
</table>
</body>
</html>
}}}, name: "breiter-bericht.pdf", pageSize: "A4", landscape: true)
Ausgabe: Ein PDF im A4-Querformat (297 x 210 mm), ideal für breite Tabellen oder Diagramme.
Benutzerdefinierte Seitengröße und Auflösung
// US Letter-Format bei 200 DPI mit benutzerdefinierten Rändern
pdfFile("""
<html>
<body>
<h1>Hochqualitativer Bericht</h1>
<p>Dieses Dokument wird mit höherer Auflösung gerendert.</p>
</body>
</html>
""", name: "bericht.pdf", pageSize: "LETTER", resolution: 200,
marginLeft: 100, marginRight: 100, marginTop: 100, marginBottom: 100)
Ausgabe: Ein PDF mit US Letter-Seitengröße bei 200 DPI und 100-Pixel-Rändern auf allen Seiten.
Minimale Ränder für maximalen Inhalt
// A4 mit minimalen Rändern
pdfFile({{{
<html>
<body>
<h1>Ganzseitiger Inhalt</h1>
<p>Dies verwendet minimale Ränder, um den Inhaltsbereich zu maximieren.</p>
</body>
</html>
}}}, name: "vollseite.pdf", pageSize: "A4",
marginLeft: 20, marginRight: 20, marginTop: 20, marginBottom: 20)
Ausgabe: Ein PDF mit A4-Seitengröße und minimalen 20-Pixel-Rändern (ca. 3,4mm bei 150 DPI).
Großformate mit A3
// A3 für große Diagramme
pdfFile({{{
<html>
<body>
<h1>Architekturdiagramm</h1>
<!-- Großer Diagramminhalt -->
</body>
</html>
}}}, name: "diagramm.pdf", pageSize: "A3")
Ausgabe: Ein PDF mit A3-Seitengröße (297 x 420 mm), geeignet für große Diagramme oder Poster.
Technische Hinweise
- Standardeinstellungen: Standard-Seitengröße ist A4 (1240x1754 Pixel bei 150 DPI = 210mm x 297mm)
- Standardpapierformate: Der
pageSize-Parameter unterstützt A0 bis A6 sowie LETTER, LEGAL und TABLOID. Dimensionen werden automatisch basierend auf der Auflösung berechnet - Querformat: Bei
landscape: truewerden Breite und Höhe getauscht. Dies funktioniert unabhängig davon, obpageSizeoder benutzerdefinierte Dimensionen verwendet werden - Auflösung: Standardauflösung ist 150 DPI, geeignet für die meisten Druck- und Bildschirmansichten. Höhere Werte (z.B. 300 DPI) erzeugen bessere Qualität, aber größere Dateien
- Ränder: Standardränder sind 15mm (links, rechts, oben) und 10mm (unten). Ränder werden in Pixeln bei der gewählten Auflösung angegeben
- Seitengrößenberechnungen:
- A4 bei 150 DPI: 1240 x 1754 Pixel
- US Letter bei 150 DPI: 1275 x 1650 Pixel
- A4 bei 300 DPI: 2480 x 3508 Pixel
- Formel: Pixel = (Millimeter / 25,4) × DPI
- CSS-Unterstützung: Grundlegende CSS2-Stile werden unterstützt. Komplexe CSS3-Features werden möglicherweise nicht korrekt gerendert
- Bilder: Externe Bilder benötigen zugängliche URLs. Base64-kodierte Bilder werden unterstützt
- Schriftarten: Standardschriftarten sind verfügbar. Benutzerdefinierte Schriftarten erfordern möglicherweise zusätzliche Konfiguration
- Benannte Parameter: Verwenden Sie benannte Parameter für mehr Klarheit (z.B.
pageSize: "A4", landscape: true). Dies vermeidet das Angeben von null für ungenutzte Positionsparameter