PDF Dokumente mit .NET generieren Teil 1: Einführung in itextsharp

Von Mario Meir-Huber Autor Feed 1. December 2010 11:48

Oft muss man in einer Webanwendung Dokumente generieren und diese dem Benutzer “irgendwie” ausdruckbar machen. Mit HTML ist dies zwar grundsätzlich möglich, jedoch bietet eine PDF Version eines Dokumentes oft Vorteile.

PDF Dokumente kann man in .NET auf vielfältigste Weise erstellen. Es gibt eine ganze Reihe an kommerziell verfügbaren Tools welche dies ermöglichen. In diesem Beispiel wollen wir uns ansehen wie man Dokumente mit dem frei verfügbaren “itextsharp” erstellen kann. ITextSharp kann man über http://sourceforge.net/projects/itextsharp/ beziehen. Hierbei handelt es sich um eine low-level API da man Dokumente – ähnlich wie bei OpenXML – sehr nahe am Dateilevel erstellt. Für komplexe Berichte muss man unter umständen auf andere Tools zurückgreifen.

Ein itextsharp-Dokument heißt “Document”. Die Seitenränder kann man über die Methode “SetMargins” einstellen. In unserem Beispiel verwenden wir jeweils 50. Standardgemäß wird A4 für unser Beispiel als Formatvorlage verwendet.

private static Document pdfdoc;

static void Main(string[] args)
{
    pdfdoc = new Document();
    pdfdoc.SetMargins(50, 50, 50, 50);

    CreatePDF();
}

Im oben bezeigten Beispiel wird die Methode “CreatePDF” aufgerufen. Hierbei erstellen wir die PDF Datei an sich. Zuerst brauchen wir einen Speicherort. In unserem Fall ist dies einfach der lokale Pfad mit einem GUID (ich liebe diese Art von Dateinamen Smiley). Für den zweiten Teil der Serie benötigen wir noch den PdfWriter – dieser ist vor allem für Bilder und dergleichen notwendig. Dies wird jedoch erst später benötigt. Damit wir “in das Dokument” schreiben können müssen wir dieses noch öffnen.

private static void CreatePDF()
{
    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format(@"Chunk\{0}.pdf", Guid.NewGuid()));

    PdfWriter writer = PdfWriter.GetInstance(pdfdoc, new FileStream(path, FileMode.Create));
    pdfdoc.Open();

    PdfContentByte pdfcontent = writer.DirectContent;

Bevor wir Text schreiben wollen wir noch verschiedene Schriftarten erstellen. Eine Schriftart wird in itextsharp mit der FontFactory erstellt. Für unser Beispiel verwenden wir 5 Schriften. Die letzten 2 Schriften werden mit den Attributen “Fett” und “Kursiv” versehen.

iTextSharp.text.Font title = iTextSharp.text.FontFactory.GetFont("Arial", 18);
iTextSharp.text.Font standard = iTextSharp.text.FontFactory.GetFont("Arial", 10);
iTextSharp.text.Font small = iTextSharp.text.FontFactory.GetFont("Arial", 8);

iTextSharp.text.Font standardbold = iTextSharp.text.FontFactory.GetFont("Arial", 10, Font.BOLD);
iTextSharp.text.Font smallitalic = iTextSharp.text.FontFactory.GetFont("Arial", 8, Font.ITALIC);

Im nächsten Schritt schreiben wir uns 2 Hilfsmethoden welche uns diverse Elemente, welche häufig vorkommen, abnehmen werden. Dies ist die Methode um einen neuen Paragrafen zu erstellen.

public static Paragraph CreateParagraph(string text, Font font)
{
    return new iTextSharp.text.Paragraph(new iTextSharp.text.Chunk(text, font));
} 

Außerdem erstellen wir uns eine Methode, welche einen leeren Paragraphen einfügt. Es gibt auch andere (und elegantere) Methoden wie dies gelöst werden kann. In unserem Fall verwenden wir jedoch dies als “schnelle” Hilfsmethode.

public static Paragraph AddEmptyParagraph()
{
    iTextSharp.text.Font standard = iTextSharp.text.FontFactory.GetFont("Tahoma", 10);

    return CreateParagraph(Environment.NewLine, standard);
}

Nun müssen wir nur noch Text einfügen. Dies erledigen wir durch die “Add” Methode am Webservice.

Paragraph headline = CreateParagraph("Ticket für Event \"CloudVision\"", title);
pdfdoc.Add(headline);
pdfdoc.Add(AddEmptyParagraph());
pdfdoc.Add(AddEmptyParagraph());
pdfdoc.Add(CreateParagraph("Ausgestellt für: Mario Meir-Huber", standard));
pdfdoc.Add(CreateParagraph("Gültig am: " + DateTime.Now.ToLongDateString(), standard));
pdfdoc.Add(AddEmptyParagraph());
pdfdoc.Add(AddEmptyParagraph());

pdfdoc.Add(CreateParagraph("Ihr Ticket für die Veranstaltung", standardbold));

pdfdoc.Add(AddEmptyParagraph());
pdfdoc.Add(CreateParagraph("Platzhalter für Tabelle", standard));
pdfdoc.Add(AddEmptyParagraph());
pdfdoc.Add(CreateParagraph("Platzhalter für Barcode", standard));

pdfdoc.Add(AddEmptyParagraph());
pdfdoc.Add(AddEmptyParagraph());

pdfdoc.Close();

Nachdem dies aufgerufen ist kann man das neu erstellte Dokument bereits verarbeiten. Im nächsten Beitrag werde ich erklären wie man Bilder, Tabellen und Barcodes einfügt.

Comments (2) -

>

12/20/2010 2:09:28 PM #

Ich hätte da mal eine Frage wie rufe ich die Main auf wenn ich für die Methode Main eine
extrige Sub benutzt habe, nach Möglichkeit für VB.net da ich nur diese Programmiersprache gerade lerne und ich schon ein Zeitchen zum übersetzen gebraucht habe.
Ich frage deshalb weil der Übergabeparameter für mich in C# nicht klar ersichtlich ist.
Danke im Voraus

Fabian

Fabian Österreich

>

11/16/2011 3:55:08 PM #

Sehr schöner und verständlicher Beitrag.
Mich würde interessieren wie ich neuen Text in ein schon bestehendes PDF Dokument einfügen kann.
Bisher habe ich dazu noch nichts gefunden.

Andree Germany

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

www.microsoft.com/austria | © 2009 Microsoft Corporation. Alle Rechte vorbehalten.
BlogEngine.NET 2.5.0.6 powered by atwork