Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Im Rahmen unserer Lösung zum Erstellen von DHL-Versandetiketten benötigen wir eine Lösung, mit der wir mehrere PDF-Dokumente zu einem zusammenführen können, um dieses dann in einem Rutsch auszudrucken. Mit Bordmitteln kommen wir nicht weiter, aber es gibt ja eine Reihe von Bibliotheken, die man sich etwa als NuGet-Paket ins Projekt holen kann. In diesem Fall nutzen wir die Bibliothek iTextSharp. Diese kann noch einiges mehr, aber wir wollen erst einmal nur PDF-Dokumente zusammenführen.
iTextSharp
iTextSharp ist eine C#-Portierung des Projekts iText 5, für das Sie unter dem folgenden Link eine Reihe von Beispielen in der Programmiersprache Java finden: http://developers.itextpdf.com/examples-itext5. Mit iText 5 können Sie eine ganze Menge Aufgaben rund um die Erstellung und Bearbeitung von PDF-Dokumenten erledigen. Aktuell wollen wir jedoch nur zwei oder mehrere PDF-Dokumente zusammenführen.
Beispielanwendung
Um die Bibliothek iTextSharp in ein Projekt zu integrieren, nutzen Sie den NuGet-Manager. Ausgehend von einem geöffneten Projekt klicken Sie dann mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer. Aus dem Kontextmenü wählen Sie dann den Eintrag NuGet-Pakete verwalten … aus. Im nun erscheinenden NuGet-Paket-Manager wechseln Sie zum Bereich Durchsuchen und geben als Suchbegriff iTextSharp ein. Ganz oben in der Liste erscheint nun der Eintrag iTextSharp, den Sie auswählen. Klicken Sie dann auf Installieren, um das Paket zum Projekt hinzuzufügen (siehe Bild 1).
Bild 1: Installieren des NuGet-Pakets iTextSharp
Unserem WPF-Beispielprojekt fügen wir nun auf der Seite MainWindow.xaml eine einfache Schaltfläche hinzu, mit der wir einen ersten Test starten wollen.
Wir gehen vereinfachend davon aus, dass wir einfach zwei Dokumente namens 1.pdf und 2.pdf zusammenführen wollen.
Dazu fügen wir diese zum Projekt hinzu und stellen in den Eigenschaften dieser beiden Elemente den Wert Immer kopieren für die Eigenschaft In Ausgabeverzeichnis kopieren ein. So können wir das Verzeichnis für diese beiden Dokumente gleich direkt über die Funktion AppDomain.CurrentDomain.BaseDirectory ermitteln (dies liefert das Verzeichnis, in dem sich auch die .exe-Datei der Lösung befindet).
Dokumente zusammenführen
Wir wollen nun eine Methode programmieren, welche diese beiden Dokumente zusammenführt und als neues PDF-Dokument abspeichert. Das geht mit der iTextSharp-Bibliothek wirklich sehr einfach. Für die Schaltfläche hinterlegen wir die folgende Methode, die zunächst drei Pfade in den Variablen document1, document2 und target hinterlegt – jeweils mit dem aktuellen Anwendungsverzeichnis und den Namen 1.pdf, 2.pdf und 12.pdf:
private void btnTestZweiDokumente_Click(object sender, RoutedEventArgs e) { string document1 = AppDomain.CurrentDomain.BaseDirectory + "1.pdf"; string document2 = AppDomain.CurrentDomain.BaseDirectory + "2.pdf"; string target = AppDomain.CurrentDomain.BaseDirectory + "12.pdf";
Dann erstellt die Methode ein neues Objekt des Typs Document und eines vom Typ FileStream. Letzteres wird auf Basis des Pfades zur Zieldatei als neue Datei angelegt:
Document document = new Document(); FileStream stream = new FileStream(target, FileMode.Create);
Das Objekt pdf mit dem Typ PdfCopy führt das Document– und das FileStream-Objekt zusammen. Ein Objekt des Typs Pdf-Reader, das später die Ausgangsdokumente aufnimmt, wird mit dem Wert null initialisiert. Dann wird das Document-Objekt mit der open-Methode geöffnet:
PdfCopy pdf = new PdfCopy(document, stream); PdfReader reader = null; document.Open();
Nun folgen die beiden Einlesevorgänge der zusammenzuführenden Dokumente. Dabei wird reader jeweils mit einem neuen PdfReader-Objekt mit dem Dokumentpfad als Konstruktor-Parameter initialisiert und für die Anwendung innerhalb des using-Konstrukts vorbereitet. Darin wird das Dokument aus der Objektvariablen reader zum pdfCopy-Objekt hinzugefügt: