Erstellen von PDF-Dateien in Java

Einführung

In diesem kurzen Artikel werden wir uns darauf konzentrieren, PDF-Dokumente von Grund auf zu erstellen, basierend auf der beliebten iText- und PdfBox-Bibliothek.

Maven-Abhängigkeiten

Werfen wir einen Blick auf die Maven-Abhängigkeiten, die in unserem Projekt enthalten sein müssen:

Die neueste Version der Bibliotheken finden Sie hier: iText und PdfBox.

Eine zusätzliche Abhängigkeit muss hinzugefügt werden, falls unsere Datei verschlüsselt werden muss. Das Bounty Castle Provider Paket enthält Implementierungen von kryptographischen Algorithmen und wird von beiden Bibliotheken benötigt:

<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.56</version></dependency>

Die neueste Version der Bibliothek finden Sie hier: The Bounty Castle Provider.

Übersicht

Bei iText und PdfBox handelt es sich um Java-Bibliotheken, die zur Erstellung/Manipulation von PDF-Dateien verwendet werden. Obwohl das Endergebnis der Bibliotheken dasselbe ist, arbeiten sie auf etwas unterschiedliche Weise. Werfen wir einen Blick auf sie.

Pdf in IText erstellen

4.1. Text in Pdf einfügen

Schauen wir uns an, wie eine neue Datei mit „Hello World“-Text in eine pdf-Datei eingefügt wird

Die Erstellung eines pdf mit Hilfe der iText-Bibliothek basiert auf der Manipulation von Objekten, die die Schnittstelle Elements in Document implementieren (in Version 5.5.10 gibt es 45 dieser Implementierungen).

Das kleinste Element, das dem Dokument hinzugefügt und verwendet werden kann, heißt Chunk, das im Grunde eine Zeichenkette mit angewandter Schriftart ist.

Außerdem können Chunks mit anderen Elementen wie Absätzen, Abschnitten usw. kombiniert werden, was zu schön aussehenden Dokumenten führt.

4.2. Einfügen von Bildern

Die iText-Bibliothek bietet eine einfache Möglichkeit, ein Bild in das Dokument einzufügen. Wir müssen lediglich eine Bildinstanz erstellen und sie dem Dokument hinzufügen.

4.3. Einfügen einer Tabelle

Wenn wir eine Tabelle in unser PDF-Dokument einfügen möchten, könnten wir vor einem Problem stehen.

Zuerst müssen wir ein PdfTable-Objekt erstellen und im Konstruktor eine Anzahl von Spalten für unsere Tabelle angeben. Jetzt können wir einfach eine neue Zelle hinzufügen, indem wir die addCell-Methode des neu erstellten Tabellenobjekts aufrufen. iText erstellt Tabellenzeilen, solange alle erforderlichen Zellen definiert sind, was bedeutet, dass, wenn Sie eine Tabelle mit 3 Spalten erstellen und 8 Zellen hinzufügen, nur 2 Zeilen mit jeweils 3 Zellen angezeigt werden.

Schauen wir uns das Beispiel an:

Wir erstellen eine neue Tabelle mit 3 Spalten und 3 Zeilen. Die erste Zeile behandeln wir als Tabellenkopf mit einer geänderten Hintergrundfarbe und Rahmenbreite:

Die zweite Zeile besteht aus drei Zellen, die nur Text enthalten, ohne zusätzliche Formatierung.

private void addRows(PdfPTable table) { table.addCell("row 1, col 1"); table.addCell("row 1, col 2"); table.addCell("row 1, col 3");}

Wir können nicht nur Text in die Zellen einfügen, sondern auch Bilder. Zusätzlich kann jede Zelle individuell formatiert werden, im folgenden Beispiel wird die horizontale und vertikale Ausrichtung angepasst:

4.4. Dateiverschlüsselung

Um die Berechtigung mit der iText-Bibliothek anwenden zu können, müssen wir bereits ein pdf-Dokument erstellt haben. In unserem Beispiel verwenden wir die zuvor erstellte Datei iTextHelloWorld.pdf.

Nach dem Laden der Datei mit PdfReader müssen wir einen PdfStamper erstellen, der dazu dient, zusätzliche Inhalte wie Metadaten, Verschlüsselung usw. auf die Datei anzuwenden:

In unserem Beispiel haben wir die Datei mit zwei Passwörtern verschlüsselt. Das Benutzerkennwort („userpass“), bei dem ein Benutzer nur Leserechte hat und nicht drucken kann, und das Besitzer-Kennwort („ownerpass“), das als Hauptschlüssel verwendet wird und einer Person den vollen Zugriff auf die PDF-Datei ermöglicht.

Wenn wir dem Benutzer erlauben wollen, das pdf zu drucken, können wir anstelle von 0 (dritter Parameter von setEncryption) folgendes übergeben:

PdfWriter.ALLOW_PRINTING

Natürlich können wir verschiedene Berechtigungen mischen, z.B.:

PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY

Denken Sie daran, dass wir, wenn wir iText verwenden, um Zugriffsberechtigungen festzulegen, auch ein temporäres pdf erstellen, das gelöscht werden sollte, und wenn nicht, könnte es für jeden voll zugänglich sein.

Pdf in PdfBox erstellen

5.1. Text in Pdf einfügen

Im Gegensatz zu iText bietet die PdfBox-Bibliothek eine API, die auf Stream-Manipulation basiert. Es gibt keine Klassen wie Chunk/Paragraph usw. Die PDDocument-Klasse ist eine speicherinterne Pdf-Darstellung, in die der Benutzer Daten schreibt, indem er die PDPageContentStream-Klasse manipuliert.

Werfen wir einen Blick auf das Codebeispiel:

5.2. Einfügen eines Bildes

Das Einfügen von Bildern ist einfach.

Zunächst müssen wir eine Datei laden und ein PDImageXObject erstellen, um es dann auf das Dokument zu zeichnen (genaue x,y-Koordinaten müssen angegeben werden).

Das ist alles:

5.3. Einfügen einer Tabelle

Unglücklicherweise bietet PdfBox keine Out-of-Box-Methoden, mit denen man Tabellen erstellen kann. Was wir in einer solchen Situation tun können, ist, sie manuell zu zeichnen – buchstäblich jede Zeile zu zeichnen, bis unsere Zeichnung unserer erträumten Tabelle ähnelt.

5.4. Dateiverschlüsselung

Die PdfBox-Bibliothek bietet die Möglichkeit, Dateien zu verschlüsseln und die Zugriffsrechte für den Benutzer anzupassen. Im Vergleich zu iText ist es nicht erforderlich, eine bereits vorhandene Datei zu verwenden, da wir einfach PDDocument verwenden. Pdf-Dateiberechtigungen werden von der AccessPermission-Klasse gehandhabt, in der wir festlegen können, ob ein Benutzer in der Lage ist, eine Datei zu ändern, den Inhalt zu extrahieren oder zu drucken.

Danach erstellen wir ein StandardProtectionPolicy-Objekt, das dem Dokument einen kennwortbasierten Schutz verleiht. Wir können zwei Arten von Kennwörtern angeben. Das Benutzerkennwort, nach dem eine Person in der Lage ist, eine Datei mit den angewandten Zugriffsrechten zu öffnen, und das Eigentümerkennwort (keine Einschränkungen für die Datei):

Unser Beispiel stellt eine Situation dar, in der die Datei nicht geändert und gedruckt werden kann, wenn ein Benutzer ein Benutzerkennwort angibt.

Schlussfolgerungen

In diesem Tutorial haben wir Möglichkeiten besprochen, eine pdf-Datei in zwei populären Java-Bibliotheken zu erstellen.

Ausführliche Beispiele finden sich in dem Maven-basierten Projekt auf GitHub.

Lernen Sie Spring 5 und Spring Boot 2 mit dem Learn Spring Kurs:

>>CHECK OUT THE COURSE

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.