Open In App

Adding Images to a Table in PDF using Java

Last Updated : 24 Nov, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

PDFBox is an open-source library which is written in Java. It helps in the development and conversion of PDF Documents. PDFBox library comes in form of a JAR file. It can create new PDF documents, manipulate existing documents, bookmark the PDF and also extract content from PDF documents. We can use this library for digital signature, print and validate files against the PDF/A-1b standard. It comes with a series of command-line utilities to perform the various operation on PDF documents. Some utilities are encrypting and decrypting PDF, debugging, merging, overlaying, converting text to PDF and PDF to an image. Some components of PDFBox are PDFBox, FontBox, XmpBox, PreFlight. PDFBox is the main part of the PDFBox library. As it contains classes and interfaces for the content extraction and manipulation/modification of files. FontBox holds the classes and interfaces to handle the font information. XmpBox contains the classes and interfaces for handling the XMP metadata. PreFlight is used for verification of the PDF files of PDF/A-1B standard.

iText is an open-source Java library to create and manipulate PDF files in Java and .NET. Initially, the source code was distributed as open-source under the Mozilla Public License or the GNU Library General Public License open source licenses. iText provides support for most advanced PDF features such as PKI-based signatures, 40-bit and 128-bit encryption, color correction, Tagged PDF, PDF forms (AcroForms), PDF/X, color management via ICC profiles and barcodes, and is used by several products and services, including Eclipse BIRT, Jasper Reports, JBoss Seam, Windward Reports, and pdftk. iText provides the user, classes (API’s) to generate interactive PDF documents. By these, we can create maps and books. We can add bookmarks, page numbers, and watermarks. We can split an existing PDF into multiple PDFs and also we can add/concatenate additional pages to it. We can fill interactive forms in a PDF document. We can save PDFs as image files, such as PNG or JPEG (JPG). iText library provides us with a Canvas class using which we can draw various geometrical shapes on a PDF document like rectangle, circle, line, etc.  Using iText, one can create a new PDF file from your Java programs. We can include images and fonts too.

Environment Setup

  • Make a project Using java maven.
  • Go to pdfbox.apache.org and add the dependency into your project. By this, the libraries get imported into your project.
  • Now, make a java class under com.mycompany.<Your Project Name> in Source Packages.
  • Nice, now you can use the libraries.

Understanding Concepts

Create Document

First, we create an instance of PDDocument class which belonging to org.apache.pdfbox.pdmodel package. By getting an instance of PDDocument class, we are able to create an empty PDF document.

PDDocument doc = new PDDocument();   

Create Blank Page

The PDPage class is used for creating a blank page in a PDF document. The following code creates a page in our PDF document.

PDPage blankPage = new PDPage();  

Add Page

The addPage() method is used for adding pages in the PDF document. The following code adds a page in our PDF document.

doc.addPage( blankPage );  

Save Document

When we create a document, we have to save the document to our desired location. So, we use save() method to save the document. The save() method accepts a string value and passes a path of the document as a parameter.

doc.save("Path of Document");  

Close Document

We need to close the PDDocument class object after completing the task, by using the close() method 

doc.close();  

Example: 

Java




// Importing the required library functions
  
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.*;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
  
public class image_insert {
    public static void main(String[] args)
        throws FileNotFoundException, IOException,
               COSVisitorException
    {
        // Create a pdfdocument object
        PDDocument doc = new PDDocument();
  
        // Create a PDPage  object
        PDPage page = new PDPage();
  
        // Add page to document object
        doc.addPage(page);
  
        // Create FileInputStream object for your image
        FileInputStream in
            = new FileInputStream("D:/Downloads/abc1.jpg");
        PDJpeg img = new PDJpeg(doc, in);
        PDPageContentStream stream
            = new PDPageContentStream(doc, page);
  
        // Invoke drawXObject() object to draw image onto
        // pdf file.
        stream.drawXObject(img, 200, 220, 220, 200);
        // First two integers are x and y
        // coordinates(position of image) Second two
        // integers are width and height of the image
  
        stream.close();
        doc.save("D:/My_pdf1");
        doc.close();
    }
}


Output:

cd D:\NetBeansProjects\ImagePdf; “JAVA_HOME=C:\\Program Files\\Java\\jdk-14.0.2” cmd /c “\”C:\\Program Files\\NetBeans-12.0\\netbeans\\java\\maven\\bin\\mvn.cmd\” -Dexec.args=\”-classpath %classpath com.mycompany.imagepdf.image_insert\” -Dexec.executable=\”C:\\Program Files\\Java\\jdk-14.0.2\\bin\\java.exe\” -Dexec.classpathScope=runtime -Dmaven.ext.class.path=\”C:\\Program Files\\NetBeans-12.0\\netbeans\\java\\maven-nblib\\netbeans-eventspy.jar\” -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.5.0:exec”

Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.

Scanning for projects…

———————–< com.mycompany:ImagePdf >———————–

Building ImagePdf 1.0-SNAPSHOT

——————————–[ jar ]———————————

— exec-maven-plugin:1.5.0:exec (default-cli) @ ImagePdf —

————————————————————————

BUILD SUCCESS

————————————————————————

Total time:  1.372 s

Finished at: 2020-10-31T23:31:58+05:30

————————————————————————

If you obtain similar output it means the code has executed successfully.

Insert jpg images to pdf

Note: With the help of the above code you can insert only jpg images into a PDF.

Adding images using PDFBox

1. Make a project Using java maven.

2. Edit the pom.xml file which can be found under the Project Files. You should add the bold part as shown below.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>Itextt</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>14</maven.compiler.source>
        <maven.compiler.target>14</maven.compiler.target>
    </properties>
<dependencies>

    <dependency>

        <groupId>com.itextpdf</groupId>

        <artifactId>itext7-core</artifactId>

        <version>7.1.10</version>

        <type>pom</type>

    </dependency>

</dependencies>

</project>






3. Now just run it and you can observe all the jar files would automatically get installed.

Understanding Concepts

Creating a PdfWriter object

The PdfWriter class represents the DocWriter for a PDF that belongs to the package com.itextpdf.kernel.pdf. The constructor takes a string as input which represents the path of the file where the PDF is to be created. Then initialize the PdfWriter class by passing a string value (representing the path where we need to create a PDF) to its constructor, as shown below.

String destination = "D:/Downloads/My_pdf.pdf";  
PdfWriter writer = new PdfWriter(destination);

When an object of this type is passed to a PdfDocument class, every element added to this document will be written to the file specified.

Creating a PdfDocument object

The PdfDocument class is the class that represents the PDF Document in iText. This class belongs to the package com.itextpdf.kernel.pdf. To initialize this class (in writing mode), we need to pass an object of the class PdfWriter to its constructor.

Initialize the PdfDocument class by passing the above created PdfWriter object to its constructor, as shown below.

PdfDocument pdfdocument= new PdfDocument(writer);  

When a PdfDocument object is created, one can add various elements like a page, file attachment, font, and event handler using the respective methods provided by its class.

Creating the Document object

While creating a self-sufficient PDF the root element is the Document class of the package com.itextpdf.layout. One of the constructors of the class takes an object of the class PdfDocument. Initialize the Document class by passing the object of the class PdfDocument created in the previous steps, as shown below.

Document document = new Document(pdfdocument);  

Creating an Image object

For creating the image object, firstly, we create an ImageData object using the create() method of the ImageDataFactory class. Then, we pass a string parameter representing the path of the image as a parameter of this method.

String imgFile = "D:/img.jpg";  
ImageData data = ImageDataFactory.create(imgFile);

Now, initialize the Image class of the com.itextpdf.layout.element package. When instantiating, we pass the above created ImageData object as a parameter to its constructor, as shown

Image img = new Image(data);  

Adding an image to the document

We can add the image object created in the last step using the add() method of the Document class.

document.add(img);

Closing the Document

We need to close the document using the close() method of the Document class

document.close(); 

Example:

Java




// Adding image to pdf
  
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
  
public class Itext_final {
    public static void main(String args[]) throws Exception
    {
  
        // Creating a PdfWriter
        PdfWriter writer = new PdfWriter("D:/mypdf1.pdf");
  
        // Creating a PdfDocument
        PdfDocument pdf = new PdfDocument(writer);
  
        // Creating a Document
        Document document = new Document(pdf);
  
        // Creating an ImageData object
        ImageData data = ImageDataFactory.create(
            "D:/Downloads/Image.png");
  
        // Creating an Image object
        Image image = new Image(data);
  
        // Adding image to the document
        document.add(image);
  
        // Closing the document
        document.close();
  
        System.out.println("Image added successfully!!");
    }
}


Output

Image added successfully!!

Insert image to a pdf

NOTE: In this method, we can add images of the PNG format, as well as jpg format which is an advantage over PDFBox library.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads