Création de fichiers PDF en Java

Introduction

Dans ce rapide article, nous nous concentrerons sur la création d’un document PDF à partir de zéro basé sur la bibliothèque populaire iText et PdfBox.

Dépendances Maven

Regardons les dépendances Maven, qui doivent être incluses dans notre projet :

La dernière version des bibliothèques peut être trouvée ici : iText et PdfBox.

Une dépendance supplémentaire est nécessaire à ajouter, au cas où notre fichier devra être crypté. Le paquet Bounty Castle Provider contient des implémentations d’algorithmes cryptographiques et est requis par les deux bibliothèques :

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

La dernière version de la bibliothèque se trouve ici : The Bounty Castle Provider.

Overview

Tous deux, le iText et le PdfBox sont des bibliothèques java utilisées pour la création/manipulation de fichiers pdf. Bien que le résultat final de ces bibliothèques soit le même, elles fonctionnent d’une manière un peu différente. Jetons un coup d’œil sur elles.

Créer un Pdf dans IText

4.1. Insérer du texte dans un Pdf

Regardons, la façon dont un nouveau fichier avec du texte « Hello World » est inséré dans un fichier pdf

Créer un pdf avec une utilisation de la bibliothèque iText est basé sur la manipulation d’objets implémentant l’interface Elements dans Document (dans la version 5.5.10 il y a 45 de ces implémentations).

Le plus petit élément qui peut être ajouté au document et utilisé est appelé Chunk, qui est fondamentalement une chaîne de caractères avec une police appliquée.

En outre, les Chunk peuvent être combinés avec d’autres éléments comme les paragraphes, la section, etc. résultant en des documents de belle apparence.

4.2. Insertion d’une image

La bibliothèque iText offre un moyen facile d’ajouter une image au document. Nous devons simplement créer une instance d’image et l’ajouter au document.

4.3. Insertion d’un tableau

Nous pouvons être confrontés à un problème lorsque nous voudrions ajouter un tableau à notre pdf. Heureusement, iText fournit une telle fonctionnalité prête à l’emploi.

D’abord, ce que nous devons faire est de créer un objet PdfTable et dans le constructeur fournir un certain nombre de colonnes pour notre tableau. Maintenant, nous pouvons simplement ajouter une nouvelle cellule en appelant

Maintenant, nous pouvons simplement ajouter une nouvelle cellule en appelant la méthode addCell sur l’objet de table nouvellement créé. iText créera des lignes de table tant que toutes les cellules nécessaires sont définies, ce qui signifie qu’une fois que vous créez une table avec 3 colonnes et que vous y ajoutez 8 cellules, seules 2 lignes avec 3 cellules dans chacune seront affichées.

Regardons l’exemple:

Nous créons une nouvelle table avec 3 colonnes et 3 lignes. La première ligne, nous allons la traiter comme un en-tête de tableau avec une couleur de fond et une largeur de bordure modifiées:

La deuxième ligne sera composée de trois cellules juste avec du texte, sans formatage supplémentaire.

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

Nous pouvons inclure non seulement du texte dans les cellules mais aussi des images. En outre, chaque cellule pourrait être formatée individuellement, dans l’exemple présenté ci-dessous, nous appliquons des ajustements d’alignement horizontal et vertical :

4.4. Cryptage de fichiers

Pour appliquer la permission en utilisant la bibliothèque iText, nous devons avoir déjà créé un document pdf. Dans notre exemple, nous utiliserons notre fichier iTextHelloWorld.pdf généré précédemment.

Une fois que nous avons chargé le fichier en utilisant PdfReader, nous devons créer un PdfStamper qui est utilisé pour appliquer un contenu supplémentaire au fichier comme les métadonnées, le cryptage etc:

Dans notre exemple, nous avons crypté le fichier avec deux mots de passe. Le mot de passe utilisateur (« userpass ») où un utilisateur n’a que le droit de lecture seule sans possibilité de l’imprimer, et le mot de passe propriétaire (« ownerpass ») qui est utilisé comme clé maîtresse permettant à une personne d’avoir un accès complet au pdf.

Si nous voulons permettre à l’utilisateur d’imprimer le pdf, au lieu de 0 (troisième paramètre de setEncryption) nous pouvons passer :

PdfWriter.ALLOW_PRINTING

Bien sûr, nous pouvons mélanger différentes permissions comme :

PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY

N’oubliez pas qu’en utilisant iText pour définir les permissions d’accès, nous créons également un pdf temporaire qui devrait être supprimé et sinon il pourrait être entièrement accessible à n’importe qui.

Créer un Pdf dans PdfBox

5.1. Insérer du texte dans un Pdf

A l’inverse de l’iText, la bibliothèque PdfBox fournit une API qui est basée sur la manipulation de flux. Il n’y a pas de classes comme Chunk/Paragraph etc. La classe PDDocument est une représentation Pdf en mémoire où l’utilisateur écrit des données en manipulant la classe PDPageContentStream.

Regardons l’exemple de code :

5.2. Insertion d’une image

L’insertion d’images est simple.

D’abord, nous devons charger un fichier et créer un PDImageXObject, par la suite, le dessiner sur le document (il faut fournir des coordonnées x,y exactes).

C’est tout:

5.3. Insertion d’un tableau

Malheureusement, PdfBox ne fournit aucune méthode out-of-box permettant de créer des tableaux. Ce que nous pouvons faire dans une telle situation est de le dessiner manuellement – littéralement, dessiner chaque ligne jusqu’à ce que notre dessin ressemble à notre tableau rêvé.

5.4. Cryptage des fichiers

La bibliothèque PdfBox offre une possibilité de crypter, et d’ajuster la permission des fichiers pour l’utilisateur. Par rapport à iText, elle ne nécessite pas d’utiliser un fichier déjà existant, car nous utilisons simplement PDDocument. Les permissions des fichiers Pdf sont gérées par la classe AccessPermission, où nous pouvons définir si un utilisateur pourra modifier, extraire le contenu ou imprimer un fichier.

Par la suite, nous créons un objet StandardProtectionPolicy qui ajoute une protection par mot de passe au document. Nous pouvons spécifier deux types de mot de passe. Le mot de passe utilisateur, après lequel la personne pourra ouvrir un fichier avec les autorisations d’accès appliquées et le mot de passe propriétaire (aucune limitation au fichier):

Notre exemple présente une situation où si un utilisateur fournit le mot de passe utilisateur, le fichier ne peut pas être modifié et imprimé.

Conclusions

Dans ce tutoriel, nous avons discuté des façons de créer un fichier pdf dans deux bibliothèques Java populaires.

Des exemples complets peuvent être trouvés dans le projet basé sur Maven sur GitHub.

Débutez avec Spring 5 et Spring Boot 2, grâce au cours Learn Spring :

>> VÉRIFIEZ LE COURS

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.