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.
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!!
NOTE: In this method, we can add images of the PNG format, as well as jpg format which is an advantage over PDFBox library.
Similar Reads
Adding Water Marks to the Images in a PDF using Java
In this article, we will learn how to add watermarks to the images in a PDF document using Java. Adding watermarks to the images in a PDF, we will use the iText library. These are the steps that should be followed to add watermarks to the images in a PDF using java. 1. Creating a PdfWriter object Th
4 min read
Create a Table in a PDF Using Java
The creation of a table in a PDF using Java is done by installing the document class. While instantiating this class, pass a PdfDocument object as a parameter to its constructor. Then, to feature a table to the document, instantiate the Table class, and add this object to the document using the add(
1 min read
Adding Nested Tables to a PDF using Java
We can add nested tables to a PDF by installing the document class. While instantiating this class, you would like to pass a PdfDocument object as a parameter, to its constructor. Then, to feature a table to the document, you would like to instantiate the Table class and add this object to the docum
4 min read
Rotating an Image in a PDF Document Using Java
In this article, we will learn how to  Rotating an Image in a PDF document using Java. For  Rotating an Image in a PDF, we will use the iText library. These are the steps that should be followed to  Rotating an Image in a PDF using java. 1. Creating a PdfWriter object The PdfWriter class represents
3 min read
Adding Paragraphs as Text to a PDF using Java
iText is a Java library developed, to access and manipulate PDF files, that is to extract and modify the PDF content. Java allows us to incorporate various fully developed packages and modules in order to work with PDF files. We will see how to create a PDF document and add a paragraph to it using t
4 min read
Formatting the Text in a PDF using Java
We can add nested tables to a PDF by installing the document class. Following are the steps to format the text in a PDF using java. 1. Create a PDF writer object The PdfWriter class here represents the DocWriter for a PDF. This class belongs to the package com.itextpdf.kernel.pdf. The constructor of
3 min read
Adding Pages to a PDF Document using Java
PDDocument class of 'org.apache.pdfbox.pdmodel' package which extends 'java.lang.Object'. is used. Declaration: public class PDDocument extends Object implements Pageable, Closeable Pre-requisite: Constructors PDDocument(): This constructor used to construct a new PDF document with zero pages.PDDocu
4 min read
Converting the Slides of a PPT into Images using Java
To convert PowerPoint slides to images, multiple packages are required like, java.awt because It contains all the classes for creating user interfaces and for painting graphics and images, java.io because It provides a set of input streams and a set of output streams used to read and write data to f
3 min read
Adding List in a PDF using Java
In this article, we will learn how to create a PDF and add a list to that PDF using java. For adding a list in a PDF, we will use the iText library. These are the steps that should be followed to add a list in a PDF using java. 1. Creating a PdfWriter object The PdfWriter class represents the DocWri
3 min read
Formatting the Content of a Cell in a Table of PDF using Java
iText is a Java library developed, to access and manipulate PDF files, that is to extract and modify the PDF content. iText is a Java library originally created by Bruno Lowagie which allows creating, reading, and manipulating PDF files. Java allows incorporating various fully developed packages and
4 min read