Créer et lire un PDF en Java à l'aide de la bibliothèque iText

Mohd Mohtashim Nawaz 16 février 2024
  1. PDF et bibliothèques pour travailler avec des fichiers PDF
  2. Fonctionnalités de la bibliothèque iText
  3. Étapes pour installer la bibliothèque iText dans Eclipse
  4. Étapes pour créer un fichier PDF à l’aide de la bibliothèque iText en Java
  5. Étapes pour lire le fichier PDF à l’aide de la bibliothèque iText en Java
Créer et lire un PDF en Java à l'aide de la bibliothèque iText

La bibliothèque iText est une bibliothèque open-source pour créer, manipuler et lire des fichiers PDF en Java. Cet article traite de la bibliothèque iText, de son installation dans Eclipse, ainsi que de la création et de la lecture de fichiers PDF en Java à l’aide de la bibliothèque iText.

PDF et bibliothèques pour travailler avec des fichiers PDF

Le format de document portable (PDF) est un format d’échange de données largement utilisé à l’aide de fichiers. Le PDF est indépendant du matériel, du système d’exploitation et du logiciel.

Par conséquent, il est très populaire et souvent utilisé pour le texte, les images et d’autres types de données.

De nombreuses bibliothèques sont disponibles pour créer, lire et travailler avec des fichiers PDF. Certaines de ces bibliothèques sont données ci-dessous.

  1. iText - La version communautaire de iText est une bibliothèque open source. Il lit, crée et manipule les fichiers PDF à l’aide de Java.

    Il a une structure hiérarchique et peut exécuter des fichiers PDF arbitrairement complexes pour générer les résultats souhaités. La librairie iText est disponible en Java et .NET.

  2. Bibliothèque Adobe PDF - Adobe a développé cette bibliothèque pour créer, manipuler et lire des fichiers PDF. Nous pouvons également utiliser cette bibliothèque pour imprimer le pdf.

    Cette bibliothèque fonctionne avec différents langages tels que C++, Java et .NET.

  3. PDFBox - Il s’agit d’une autre bibliothèque open source. Apache a développé cette bibliothèque pour créer, éditer et afficher des fichiers PDF, et elle peut être utilisée avec Java.

  4. Rapports Jasper - Cet outil de création de rapports peut générer des rapports dans des fichiers PDF.

Fonctionnalités de la bibliothèque iText

Examinons quelques-unes des fonctionnalités de la bibliothèque iText.

  1. Création de fichiers PDF - Nous pouvons créer des fichiers PDF arbitrairement complexes et interactifs à l’aide de la bibliothèque iText. Nous pouvons également insérer des images dans le fichier PDF.
  2. Nous pouvons créer des signets, ajouter des numéros de page et ajouter des filigranes au fichier PDF à l’aide de la bibliothèque iText.
  3. Nous pouvons effectuer des opérations de fractionnement et de fusion sur les fichiers PDF.
  4. La bibliothèque iText offre une possibilité de travailler avec des formulaires interactifs dans des fichiers PDF.
  5. Nous pouvons enregistrer un fichier PDF en tant qu’image dans différents formats tels que JPG, PNG, etc.

Étapes pour installer la bibliothèque iText dans Eclipse

La bibliothèque iText est un logiciel open source tiers qui doit être installé séparément de votre projet Java avant de l’utiliser. Cet article vous guide à travers les étapes d’installation de iText dans Eclipse.

Eclipse est l’un des IDE les plus populaires utilisés pour le développement d’applications en Java. Cet article suppose que vous avez déjà installé Java et Eclipse.

Même si vous travaillez sur un autre IDE, le processus d’installation est similaire.

Voyons les étapes pour ajouter la bibliothèque iText à votre projet Eclipse.

  • Créez un projet dans Eclipse (“Fichier” -> “Nouveau” -> “Projet Java”).
  • Faites un clic droit sur le projet, un menu déroulant apparaît.
  • Cliquez sur Convertir en projet Maven.
  • Vous remarquerez qu’un nouveau fichier nommé pom.xml apparaît dans votre dossier de projet.
  • Ouvrez le pom.xml et ajoutez les dépendances suivantes dans la balise <project> et après la balise <build>.
    <dependencies>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>barcodes</artifactId>
    	<version>7.2.1</version>
    	<!-- barcodes depends on kernel -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>font-asian</artifactId>
    	<version>7.2.1</version>
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>forms</artifactId>
    	<version>7.2.1</version>
    	<!-- forms depends on kernel and layout -->
      </dependency>
    
      <dependency>
    	  <groupId>com.itextpdf</groupId>
    	  <artifactId>hyph</artifactId>
    	  <version>7.2.1</version>
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>io</artifactId>
    	<version>7.2.1</version>
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>kernel</artifactId>
    	<version>7.2.1</version>
    	<!-- kernel depends on io -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>layout</artifactId>
    	<version>7.2.1</version>
    	<!-- layout depends on kernel -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>pdfa</artifactId>
    	<version>7.2.1</version>
    	<!-- pdfa depends on kernel -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>sign</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
    	<dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>commons</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>styled-xml-parser</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
    <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>svg</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-api</artifactId>
    	<version>2.13.3</version>
    </dependency>
    
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-core</artifactId>
    	<version>2.13.3</version>
    </dependency>
    
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-slf4j-impl</artifactId>
    	<version>2.13.3</version>
    </dependency>
    
    </dependencies>
    

    Notez que le projet utilise la dernière version (7.2.1) de la librairie iText lors de l’écriture. Vous pouvez mettre à niveau vers les versions les plus récentes si elles sont disponibles.

  • Accédez à Fichier dans la barre de menu et cliquez sur Actualiser.

Cela importera les bibliothèques nécessaires dans le projet. Vous devez disposer d’une connexion Internet stable car les bibliothèques sont téléchargées à partir du référentiel maven.

Étapes pour créer un fichier PDF à l’aide de la bibliothèque iText en Java

Une fois les bibliothèques installées, vous pouvez utiliser la bibliothèque iText pour créer des fichiers pdf à l’aide du programme Java.

La bibliothèque iText a une classe nommée PdfWriter qui crée un nouveau fichier pdf à écrire dedans. Une fois le fichier ouvert, vous ajoutez du texte, une image, etc.

Laissez-nous comprendre les étapes pour créer un fichier pdf et y ajouter du texte et une image.

  1. Créez une instance de la classe PdfWriter en passant le nom du fichier en paramètre au constructeur.
  2. Procédez à la création d’une instance de la classe PdfDocument en passant la classe PdfWriter au constructeur. Cette classe est responsable de l’écriture dans le fichier pdf.
  3. Enfin, vous allez créer une instance de classe Document. Il s’attache à l’instance de classe PdfDocument.

Cette classe est utilisée pour joindre des éléments individuels au fichier pdf.

  1. À ce moment, vous êtes prêt à écrire du texte et des images dans le fichier pdf.

Étapes pour écrire le texte dans le fichier PDF en Java à l’aide de la bibliothèque iText

Voyons les étapes pour écrire un texte dans le fichier.

  1. Une classe Paragraphe est utilisée pour écrire le texte dans le pdf. Vous devez donc créer une instance de la classe Paragraphe.
  2. Vous pouvez ajouter le texte en appelant la méthode add().
  3. Vous pouvez modifier l’apparence du texte en appelant différentes méthodes telles que setTextAlignment(), setFont(), etc.
  4. Enfin, vous ajoutez l’instance paragraphe à l’instance Document en appelant la méthode add().

Enfin, lorsque vous avez ajouté toutes les instances au document, vous devez le fermer en appelant la méthode close() de la classe Document.

Exemple de code pour créer un PDF en Java à l’aide de la bibliothèque iText

import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import java.io.IOException;

public class pdfExample {
  public static void main(String[] args) {
    String file = "sample_pdf.pdf";
    try {
      createPdf(file);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private static void createPdf(String file) throws IOException {
    PdfWriter writer = new PdfWriter(file);
    PdfDocument pdfDoc = new PdfDocument(writer);
    Document doc = new Document(pdfDoc);

    PdfFont myFont = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);

    Paragraph p1 = new Paragraph();
    p1.add("Hello, This is Delftstack!");
    p1.setTextAlignment(TextAlignment.CENTER);
    p1.setFont(myFont);
    p1.setFontSize(28);
    doc.add(p1);

    Paragraph p2 = new Paragraph();
    p2.add("We help you understand the concepts.");
    p2.setFontSize(18);
    doc.add(p2);

    doc.close();
  }
}

Le fichier pdf créé à l’aide du code ci-dessus est donné ci-dessous.

Fichier PDF créé

Étapes pour lire le fichier PDF à l’aide de la bibliothèque iText en Java

La bibliothèque iText fournit une classe PdfReader pour lire un fichier pdf. Le fichier pdf peut être lu en suivant les étapes ci-dessous.

  1. Tout d’abord, vous devez créer une instance de la classe PdfReader en passant le chemin du fichier au constructeur.
  2. Créez une instance de classe PdfDocument en passant l’instance de PdfReader au constructeur.
  3. Si votre fichier pdf contient plusieurs pages, vous devrez parcourir chaque page. Pour obtenir le nombre de pages, vous pouvez invoquer la méthode getNumberOfPages() en utilisant l’instance de la classe PdfDocument.
  4. Parcourez chaque page.
    1. Appelez la méthode getTextFromPage() de la classe PdfTextExtractor en passant la page actuelle du document.
    2. Pour obtenir la page courante, vous devez invoquer la méthode getPage() de la classe Document et transmettre le numéro de la page courante.
    3. La méthode getTextFromPage() est statique, vous n’avez donc pas besoin d’une instance de classe.
    4. La méthode renvoie tout le texte de la page en cours. Vous pouvez le stocker dans une variable String.
    5. Traitez le texte (par exemple, affichez-le sur la console).

Exemple de code pour lire un PDF en Java à l’aide de la bibliothèque iText

import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import java.io.IOException;

public class pdfExample {
  public static void main(String[] args) {
    String file = "sample_pdf.pdf";
    try {
      readpdf(file);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private static void readpdf(String file) throws IOException {
    PdfReader pr = new PdfReader(file);
    PdfDocument doc = new PdfDocument(pr);
    int num = doc.getNumberOfPages();

    for (int i = 1; i <= num; i++) {
      String str = PdfTextExtractor.getTextFromPage(doc.getPage(i));
      System.out.println(str);
    }
  }
}

Production:

Hello, This is Delftstack!
We help you understand the concepts.

Conclusion

Cet article aborde les bases de la lecture et de l’écriture du fichier pdf à l’aide de la bibliothèque iText. Cependant, la bibliothèque iText peut effectuer des opérations complexes sur le fichier pdf.

Pour en savoir plus sur la librairie iText et ses fonctionnalités, visitez la documentation.