PDFBox - Inserting Image



In the previous chapter, we have seen how to extract text from an existing PDF document. In this chapter, we will discuss how to insert image to a PDF document.

Inserting Image to a PDF Document

You can insert an image into a PDF document using the createFromFile() and drawImage() methods of the classes PDImageXObject and PDPageContentStream respectively.

Following are the steps to extract text from an existing PDF document.

Step 1: Loading an Existing PDF Document

Load an existing PDF document using the static method loadPDF() of the Loader class. This method accepts a RandomAccessReadBufferedFile object as a parameter, since this is a static method you can invoke it using class name as shown below.

// Loading an existing document 
PDDocument document = Loader.loadPDF(
   new RandomAccessReadBufferedFile("D:/Projects/PDFBox/PdfBox_Examples/sample.pdf"));

Step 2: Retrieving a Page

Select a page in the PDF document and retrieve its page object using the getPage() method as shown below.

PDPage page = doc.getPage(0);

Step 3: Creating PDImageXObject object

The class PDImageXObject in PDFBox library represents an image. It provides all the required methods to perform operations related to an image, such as, inserting an image, setting its height, setting its width etc.

We can create an object of this class using the method createFromFile(). To this method, we need to pass the path of the image which we want to add in the form of a string and the document object to which the image needs to be added.

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

Step 4: Preparing the Content Stream

You can insert various kinds of data elements using the object of the class named PDPageContentStream. You need to pass the document object and the page object to the constructor of this class therefore, instantiate this class by passing these two objects created in the previous steps as shown below.

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

Step 5: Drawing the Image in the PDF Document

You can insert an image in the PDF document using the drawImage() method. To this method, you need to add the image object created in the above step and the required dimensions of the image (width and height) as shown below.

contentstream.drawImage(pdImage, 70, 250);

Step 6: Closing the PDPageContentStream

Close the PDPageContentStream object using the close() method as shown below.

contentstream.close();

Step 7: Saving the Document

After adding the required content, save the PDF document using the save() method of the PDDocument class as shown in the following code block.

doc.save("Path");

Step 8: Closing the Document

Finally, close the document using the close() method of the PDDocument class as shown below.

doc.close();

Example - Inserting Image into PDF Document

Suppose we have a PDF document named sample.pdf, in the path D:/Projects/PDFBox/PdfBox_Examples with empty pages as shown below.

Sample document

This example demonstrates how to add image to a blank page of the above mentioned PDF document. Here, we will load the PDF document named sample.pdf and add image to it. Save this code in a file with name PDFBoxDemo.java.

PDFBoxDemo.java

package com.tutorialspoint.pdfbox;

import java.io.IOException;

import org.apache.pdfbox.Loader;
import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
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 PDFBoxDemo {
   public static void main(String args[]) throws IOException {
      
      // Loading an existing document 
      PDDocument document = Loader.loadPDF(
         new RandomAccessReadBufferedFile("D:/Projects/PDFBox/PdfBox_Examples/sample.pdf")); 
       
      //Retrieving the page
      PDPage page = document.getPage(0);
       
      //Creating PDImageXObject object
      PDImageXObject pdImage = PDImageXObject.createFromFile("D:/Projects/PDFBox/PdfBox_Examples/logo.png",document);
       
      //creating the PDPageContentStream object
      PDPageContentStream contents = new PDPageContentStream(document, 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
      document.save("D:/Projects/PDFBox/PdfBox_Examples/sample.pdf");
            
      //Closing the document
      document.close();
   }
}

Output

Compile and run the code to verify the following output −

Image inserted

If you verify the document sample.pdf, you can observe that an image is inserted in it as shown below.

Inserting image
Advertisements