Skip to content
Snippets Groups Projects
Sebastian Drenckberg's avatar
Sebastian Drenckberg authored
From integration/sprint-2025-08 into dev

See merge request pdsllabs-public/qmsl/pdf-generator!300
3bf18276
History

PDFGenerator

Dieses Repository ermöglicht die Generierung von PDF-Dokumenten über einen Microservice via Web API. Zum Testen von Anfragen per Dateneingabe wird eine webbasierte Benutzeroberfläche mit Hilfe des Swagger-Tools bereitgestellt.

Grundsätzlich werden befüllte Datenmodelle über einen Webservice an einen PDFGenerator-Microservice gesendet, der dafür sorgt, PDF-Dateien aus den empfangengen Datenmodellen zu erstellen. Vom Webserver wird dann nach aufgerufenem URI das entsprechende PDF-Dokument generiert und als byte Array zurückgegeben.

Die Microservice Server Web API generiert PDF-Dokumente mit Hilfe der verwendeten iText7-Bibliothek. iText ist eine freie Programmbibliothek zur Erzeugung und Bearbeitung von PDF-Dateien mittels der Programmiersprachen Java oder C#, deren Software unter der GNU Affero General Public License (AGPL) vertrieben wird.

Einstellung

  • TargetFramework: .NET Core 3.1
  • iText7 (7.1.12)
  • Swashbuckle.AspNetCore (5.6.3)
  • NLog (4.7.5)

Datenmodelle

Zu den Bestandteilen eines PDF-Dokuments zählen je nach Datenmodell möglicherweise ein Deckblatt, ein Vorwort, eine Kopf- und/oder Fußzeile, Kapitel, Abschnitte sowie ein Anhang. Im Folgenden wird ein typisches Datenmodell-Muster angezeigt:

public class PDFDocument
{
    public DataType Header { get; set; }
    public DataType Footer { get; set; }
    public DataType Cover { get; set; }
    public DataType Preface { get; set; }
    public DataType Chapters { get; set; }
    // (...)
    public DataType Appendix { get; set; }
}

Die verwendeten Datenmodelle müssen dem PDF-Generator im Verzeichnis bin als dll zur Verfügung gestellt werden.

Generierungsablauf

Zur Generierung des jeweiligen PDF-Dokuments liegt ein Controller vor, in dem sich die vom WebClient aufgerufene Methode befindet. Darin wird ein Renderer mit dem übergebenen befüllten Datenmodell aus dem Request-Body instantiiert, anhand dessen Methode Render() das PDF-Dokument erstellt werden kann. Der Renderer muss dafür das Interface IRenderer implementieren. Dabei wird das Datenmodell-Objekt verwendet, durchiteriert und dadurch jeder Bestandteil ins Dokument geschrieben.

Zuletzt wird das fertige Dokument als byte Array zurückgegeben.