PDFBox - Insertion d'une image

Dans le chapitre précédent, nous avons vu comment extraire du texte d'un document PDF existant. Dans ce chapitre, nous verrons comment insérer une image dans un document PDF.

Insertion d'une image dans un document PDF

Vous pouvez insérer une image dans un document PDF à l'aide du createFromFile() et drawImage() méthodes des classes PDImageXObject et PDPageContentStream respectivement.

Voici les étapes pour extraire le texte d'un document PDF existant.

Étape 1: chargement d'un document PDF existant

Charger un document PDF existant en utilisant la méthode statique load() du PDDocumentclasse. Cette méthode accepte un objet fichier en tant que paramètre, puisqu'il s'agit d'une méthode statique, vous pouvez l'appeler en utilisant le nom de classe comme indiqué ci-dessous.

File file = new File("path of the document")
PDDocument doc = PDDocument.load(file);

Étape 2: Récupération d'une page

Sélectionnez une page dans le document PDF et récupérez son objet page à l'aide du getPage() méthode comme indiqué ci-dessous.

PDPage page = doc.getPage(0);

Étape 3: Création de l'objet PDImageXObject

La classe PDImageXObjectdans la bibliothèque PDFBox représente une image. Il fournit toutes les méthodes nécessaires pour effectuer des opérations liées à une image, telles que l'insertion d'une image, le réglage de sa hauteur, le réglage de sa largeur, etc.

Nous pouvons créer un objet de cette classe en utilisant la méthode createFromFile(). Pour cette méthode, nous devons passer le chemin de l'image que nous voulons ajouter sous la forme d'une chaîne et l'objet document auquel l'image doit être ajoutée.

PDImageXObject pdImage = PDImageXObject.createFromFile("C:/logo.png", doc);

Étape 4: Préparation du flux de contenu

Vous pouvez insérer différents types d'éléments de données à l'aide de l'objet de la classe nommée PDPageContentStream. Vous devez passer l'objet document et l'objet page au constructeur de cette classe, par conséquent, instancier cette classe en transmettant ces deux objets créés dans les étapes précédentes comme indiqué ci-dessous.

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

Étape 5: Dessiner l'image dans le document PDF

Vous pouvez insérer une image dans le document PDF à l'aide du drawImage()méthode. Pour cette méthode, vous devez ajouter l'objet image créé à l'étape ci-dessus et les dimensions requises de l'image (largeur et hauteur) comme indiqué ci-dessous.

contentstream.drawImage(pdImage, 70, 250);

Étape 6: fermeture de PDPageContentStream

Fermer la PDPageContentStream objet utilisant le close() méthode comme indiqué ci-dessous.

contentstream.close();

Étape 7: enregistrement du document

Après avoir ajouté le contenu requis, enregistrez le document PDF à l'aide du save() méthode de la PDDocument class comme indiqué dans le bloc de code suivant.

doc.save("Path");

Étape 8: fermeture du document

Enfin, fermez le document à l'aide du close() méthode de la PDDocument classe comme indiqué ci-dessous.

doc.close();

Exemple

Supposons que nous ayons un document PDF nommé sample.pdf, Sur le chemin C:/PdfBox_Examples/ avec des pages vides comme indiqué ci-dessous.

Cet exemple montre comment ajouter une image à une page vierge du document PDF mentionné ci-dessus. Ici, nous allons charger le document PDF nommésample.pdfet ajoutez-y une image. Enregistrez ce code dans un fichier avec un nomInsertingImage.java.

import java.io.File;
  
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

public class InsertingImage {

   public static void main(String args[]) throws Exception {
      //Loading an existing document
      File file = new File("C:/PdfBox_Examples/sample.pdf");
      PDDocument doc = PDDocument.load(file);
        
      //Retrieving the page
      PDPage page = doc.getPage(0);
       
      //Creating PDImageXObject object
      PDImageXObject pdImage = PDImageXObject.createFromFile("C:/PdfBox_Examples/logo.png",doc);
       
      //creating the PDPageContentStream object
      PDPageContentStream contents = new PDPageContentStream(doc, page);

      //Drawing the image in the PDF document
      contents.drawImage(pdImage, 70, 250);

      System.out.println("Image inserted");
      
      //Closing the PDPageContentStream object
      contents.close();		
		
      //Saving the document
      doc.save("C:/PdfBox_Examples/sample.pdf");
            
      //Closing the document
      doc.close();
     
   }
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes.

javac InsertingImage.java 
java InsertingImage

Lors de l'exécution, le programme ci-dessus insère une image dans la page spécifiée du document PDF donné affichant le message suivant.

Image inserted

Si vous vérifiez le document sample.pdf, vous pouvez observer qu'une image y est insérée comme indiqué ci-dessous.