Das Erstellen von PDF Dokumenten gehört für viele Anwendungen – gerade im Web – zum „täglich Brot“. Leider stellt das .NET Framework hierfür keine Standard-Implementierung zur Verfügung. Diese Lücke schließt unser PDF Writer – eine .NET Core Bibliothek für das Core Framework 3.1.
Mit diesem kurzen Tutorial möchten wir Ihnen zeigen, wie einfach die Verwendung des PDF-Writers ist.
„Hello World“ und Textausgaben
Sobald das NuGet Package des PDF Writer über die Paketverwaltung in Visual Studio installiert ist, kann es auch schon losgehen mit einem ersten „Hello World“ PDF erstellt in C#:
PDF_Writer.Writer PDF = new PDF_Writer.Writer(); PDF.drawString("Hello World", 20, 50); PDF.save("C:\\PDF_Writer\\test.pdf");
Diese 3 Zeilen reichen bereits. In der ersten Zeile wird ein neues PDF_Writer Objekt erzeugt. In der zweiten wird der Text „Hello World“ an den Koordinaten X=20 und Y=50 auf dem PDF ausgegeben und im letzten Schritt wird das so erstellte Dokument abgespeichert.
Zusätzlich können wir der drawString() Metode aber auch noch zwei weitere Parameter für die Schriftart und die Schriftgröße übergeben:
PDF.drawString("Hello World", "Arial", 24, 20, 50);
Damit wird nun der „Hello World“ Text an der gleichen Stelle wie zuvor ausgegeben – jedoch diesmal mit der Schriftart Arial und mit Schriftgröße 24.
Dabei „merkt“ sich der PDF-Writer die zuletzt ausgewählte Schriftart und -größe, so dass sie diese nicht jedesmal neu angeben müssen:
PDF.drawString("Hello World", "Arial", 24, 20, 50); PDF.drawString("Textinhalt für Zeile 1", "Helvetica", 10, 20, 80); PDF.drawString("Textinhalt für Zeile 2", 20, 50);
In diesem Beispiel wir „Hello World wieder in Arial 24 ausgegeben, während der „Textinhalt für Zeile 1“ in Helvetica 10 dargestellt wird. Der „Textinahlt für Zeile 2“ wird ohne spezifizierte Schriftart und -größe eingefügt. Deshalb übernimmt der PDF-Writer die zuletzt übergebenen Werte und stellt den Text ebenfalls in Helvetica 10 dar. Das verkürzt die Programmierung deutlich, da gleich formatierte Text direkt ohne Angabe der Schriftart und -größe ausgegeben werden können.
Zusätzlich kann die Schriftart / -größe auch explizit gesetzt werden:
PDF.FontName = "Arial"; PDF.FontSize = 10; PDF.drawString("Hello World", 20, 50);
In diesem Beispiel würde „Hello World“ in Arial 10 dargestellt werden. Bitte beachten Sie, dass das Setzen der Schriftart / -größe in der drawString() Methode die expliziten Werte überschreibt. Über die FontName und FontSize Eigenschaften des Writer-Objektes können Sie auch jederzeit die aktuell eingestellte Schriftart und -größe auslesen.
Seitenumbrüche und Seitengröße
Oft bestehen PDF Dokumente aus mehr als einer Seite. In diesem Fall müssen wir dem PDF-Writer mitteilen, dass er eine neue Seite beginnen soll. Dies ist ebenfalls sehr einfach möglich über die addNewPage() Methode:
PDF.drawString("Letzte Zeile der ersten Seite", 20, 800); PDF.addNewPage(); PDF.drawString("Erste Zeile der zweiten Seite", 20, 20);
Die Methode addNewPage() kann aber noch mehr. Man kann Ihr nämlich die Größe der neuen Seite in X und Y Richtung mitgeben:
PDF.addNewPage(595, 841);
Wobei der erste Wert die Breite der Seite festlegt und der zweite ihre Höhe. Wenn der erste Wert kleiner ist als der zweite, resultiert daraus eine Seite im Hochformat und anders herum im Querformat. Somit lässt sich darüber nicht nur die Größe sondern auch die Ausrichtung der Seite festlegen. Dabei kann die Größe / Ausrichtung für jede Seite individuell definiert werden und somit ist auch ein Mix aus Hoch- und Querformat möglich.
Sollte die benötigte Seitengröße beim Anlegen mit addNewPage noch nicht bekannt sein, kann sie auch nachträglich noch über die expliziten Eigenschaften PageWidth und PageHeight geändert werden. Dies ist solange möglich, bis mit addNewPage() eine neue Seite angelegt wird. Anschließend gelten PageWidth und PageHeigt für diese neue Seite.
PDF.addNewPage(); PDF.PageWidth = 841; PDF.PageHeigh = 595;
Grafik-Ausgaben
PDF-Writer stellt auch einfache Grafik-Funktionen zum Zeichnen von Linien und anderen geometrischen Figuren zur Verfügung.
Linie
Mit Hilfe der Methode drawLine() kann eine Linie gezeichnet werden.
PDF.drawLine(100, 200, 100, 300);
Dabei spezifizieren die ersten beiden Zahlen die X und Y Koordinate, an dem die Linie starten soll und die zweiten zwei Zahlen den entsprechenden End-Punkt. Der gezeigte Beispiel-Code würde also eine senkrechte Line zeichnen, die bei X=100/Y=200 beginnt und bei X=100/Y=300 endet.
Zusätzlich zu den Start- und End-Punkten kann man in einem fünften Parameter auch noch die Linienbreite in Punkten angeben.
PDF.drawLine(100, 200, 100, 300, 5);
So würde die gleiche Line wie zuvor gezeichnet werden, allerdings mit einer Breite von 5 Punkten. Das Setzen eines Wertes für die Linienbreite wirkt sich auch auf alle nachfolgenden Linien aus. So würden im nachfolgenden Beispiel beide Linien mit einer Breite von 5 Punkten gezeichnet werden:
PDF.drawLine(100, 200, 100, 300, 5); PDF.drawLine(100, 200, 300, 200);
Zudem kann die Linien-Breite auch explizit als eigene Eigenschaft gelesen und gesetzt werden:
PDF.LineWidth = 3;
Rechteck
Ähnlich dem Zeichnen einer einzelnen Linie, kann auch ein Rechteck sehr einfach gezeichnet werden mit drawRectangle():
PDF.drawRectangle(100, 200, 50, 60);
Hierbei legen die ersten beiden Parameter die linke obere Ecke des Rechteckes fest (X=100/Y=200). Die Parameter 3 und 4 geben hingegen die Breite (50) und Höhe (60) des Rechtecks an.
Ebenfalls ähnlich wie bei drawLine kann auch bei drawRectangle mit einem fünften Parameter die Linien-Breite gesetzt werden:
PDF.drawRectangle(100, 200, 50, 60, 4);
Dies würde das selbe Rechteck mit einer Linienbreite von 4 Punkten zeichnen. Wichtig ist dabei zu beachten, dass das Setzen der Linien-Breite (egal ob implizit als Parameter oder explizit als Eigenschaft) sich nicht nur auf alle nachfolgenden Rechtecke auswirkt, sondern dass für alle Umriss-Funktionen und damit auch für drawLine() gilt:
PDF.drawLine(100, 200, 100, 300, 5); PDF.drawRectangle(100, 200, 50, 60, 4); PDF.drawLine(100, 200, 300, 200);
In diesem Beispiel wird erst eine Linie mit Breite=5 gezeichnet. Das anschließende Rechteck würde deshalb auch mit einer Linienbreite von 5 Punkten gezeichnet werden, wenn dieser Wert durch übergabe eines entsprechenden Parameter nicht ausdrücklich auf eine Breite von 4 Punkten reduziert werden würde. Die abschließende dritte Linie übernimmt diesen Wert und wird ebenfalls mit einer Breite von 4 Punkten gezeichnet.
gefülltes Rechteck
PDF-Writer bietet mit der Methode drawFilledRectangle() auch die Möglichkeit, ein gefülltest Rechteck zu erstellen:
PDF.drawFilledRectangle(100, 200, 50, 60, System.Drawing.Color.Green);
Analog zu drawRectangle() geben die ersten 4 Parameter wieder X und Y Koordinate der linken oberen Ecke sowie Breite und Höhe des Rechteckes an. Der fünfte Parameter vom Typ System.Drawing.Color gibt hingegen die Füll-Farbe des Rechtecks an.