Adding Images to a Table in PDF using Java
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.
- 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.
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();
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 );
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");
We need to close the PDDocument class object after completing the task, by using the close() method
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 —
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.
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.
Closing the Document
We need to close the document using the close() method of the Document class
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.