PDFBox - Inserimento dell'immagine

Nel capitolo precedente, abbiamo visto come estrarre del testo da un documento PDF esistente. In questo capitolo, discuteremo come inserire un'immagine in un documento PDF.

Inserimento di un'immagine in un documento PDF

È possibile inserire un'immagine in un documento PDF utilizzando il file createFromFile() e drawImage() metodi delle classi PDImageXObject e PDPageContentStream rispettivamente.

Di seguito sono riportati i passaggi per estrarre il testo da un documento PDF esistente.

Passaggio 1: caricamento di un documento PDF esistente

Carica un documento PDF esistente utilizzando il metodo statico load() del PDDocumentclasse. Questo metodo accetta un oggetto file come parametro, poiché si tratta di un metodo statico, è possibile richiamarlo utilizzando il nome della classe come mostrato di seguito.

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

Passaggio 2: recupero di una pagina

Seleziona una pagina nel documento PDF e recupera il suo oggetto pagina utilizzando il file getPage() metodo come mostrato di seguito.

PDPage page = doc.getPage(0);

Passaggio 3: creazione dell'oggetto PDImageXObject

La classe PDImageXObjectnella libreria PDFBox rappresenta un'immagine. Fornisce tutti i metodi necessari per eseguire operazioni relative a un'immagine, come l'inserimento di un'immagine, l'impostazione della sua altezza, l'impostazione della sua larghezza ecc.

Possiamo creare un oggetto di questa classe usando il metodo createFromFile(). A questo metodo, dobbiamo passare il percorso dell'immagine che vogliamo aggiungere sotto forma di stringa e l'oggetto documento a cui deve essere aggiunta l'immagine.

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

Passaggio 4: preparazione del flusso di contenuti

È possibile inserire vari tipi di elementi di dati utilizzando l'oggetto della classe denominata PDPageContentStream. È necessario passare l'oggetto documento e l'oggetto pagina al costruttore di questa classe quindi, istanziare questa classe passando questi due oggetti creati nei passaggi precedenti come mostrato di seguito.

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

Passaggio 5: disegnare l'immagine nel documento PDF

È possibile inserire un'immagine nel documento PDF utilizzando il file drawImage()metodo. A questo metodo, è necessario aggiungere l'oggetto immagine creato nel passaggio precedente e le dimensioni richieste dell'immagine (larghezza e altezza) come mostrato di seguito.

contentstream.drawImage(pdImage, 70, 250);

Passaggio 6: chiusura di PDPageContentStream

Chiudi il PDPageContentStream oggetto utilizzando il close() metodo come mostrato di seguito.

contentstream.close();

Passaggio 7: salvataggio del documento

Dopo aver aggiunto il contenuto richiesto, salva il documento PDF utilizzando il file save() metodo del PDDocument class come mostrato nel seguente blocco di codice.

doc.save("Path");

Passaggio 8: chiusura del documento

Infine, chiudi il documento utilizzando il file close() metodo del PDDocument classe come mostrato di seguito.

doc.close();

Esempio

Supponiamo di avere un documento PDF denominato sample.pdf, nel percorso C:/PdfBox_Examples/ con pagine vuote come mostrato di seguito.

Questo esempio mostra come aggiungere un'immagine a una pagina vuota del documento PDF sopra menzionato. Qui, caricheremo il documento PDF denominatosample.pdfe aggiungi un'immagine. Salva questo codice in un file con nomeInsertingImage.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();
     
   }
}

Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi.

javac InsertingImage.java 
java InsertingImage

Al momento dell'esecuzione, il programma di cui sopra inserisce un'immagine nella pagina specificata del documento PDF dato visualizzando il seguente messaggio.

Image inserted

Se verifichi il documento sample.pdf, puoi osservare che al suo interno viene inserita un'immagine come mostrato di seguito.