In this post we’ll see how to create a password protected PDF in Java using OpenPDF library and how to read an encrypted PDF in Java using OpenPDF.
OpenPDF is open source software with a LGPL and MPL license. To know more about OpenPDF library and PDF examples check this post- Generating PDF in Java Using OpenPDF Tutorial
Password protected PDF using OpenPDF
In order to create an encrypted PDF following steps are required.
- Get an instance of PDFWriter.
- Using the setEncryption() method of the PDFWriter set the user and owner password, open permissions and encryptionType.
- User and owner password can be null or empty.
- The open permissions for the document can be AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations,AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting. The permissions can be combined by ORing them.
- Encryption type can be one of STANDARD_ENCRYPTION_40, STANDARD_ENCRYPTION_128 or ENCRYPTION_AES128. Optionally DO_NOT_ENCRYPT_METADATA can be ORed to output the metadata in clear text.
- For encrypting PDF you will also need Bouncy Castle Provider. The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. Maven dependency for the same is-
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.61</version> </dependency>
Encrypted PDF using OpenPDF Java Program
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
public class PasswordProtectedPDF {
public static final String ENCRYPTED_PDF = "F://knpcode//result//OpenPDF//PP.pdf";
// User and owner password
final static String USER_PASSWORD = "user";
final static String OWNER_PASSWORD = "owner";
public static void main(String[] args) {
try {
Document doc = new Document();
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(ENCRYPTED_PDF));
// set password, user permissions and encryption
writer.setEncryption(USER_PASSWORD.getBytes(), OWNER_PASSWORD.getBytes(), PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
doc.open();
Paragraph para = new Paragraph("Password protected PDF where only content printing is permitted content can't be copied.");
doc.add(para);
doc.close();
writer.close();
} catch (DocumentException | FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Reading Password protected PDF using OpenPDF
For reading a password protected PDF you need to pass owner password as byte array while creating a PDFReader instance.import java.io.IOException;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.parser.PdfTextExtractor;
public class ReadPDF {
// PDF to be read
public static final String READ_PDF = "F://knpcode//result//OpenPDF//PP.pdf";
final static String OWNER_PASSWORD = "owner";
public static void main(String[] args) {
PdfReader pdfreader = null;
try {
pdfreader = new PdfReader(READ_PDF, OWNER_PASSWORD.getBytes());
// get pages in PDF
int pages = pdfreader.getNumberOfPages();
PdfTextExtractor pdfTextExtractor = new PdfTextExtractor(pdfreader);
// Iterate through pages to read content
for(int i = 1; i <= pages; i++) {
// Extract content of each page
String contentOfPage = pdfTextExtractor.getTextFromPage(i, true);
System.out.println(contentOfPage );
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(pdfreader != null) {
pdfreader.close();
}
}
}
}
That's all for the topic Password Protected PDF Using OpenPDF in Java. If something is missing or you have something to share about the topic please write a comment.
You may also like
- Password Protected PDF Using iText in Java
- Java PDFBox Example - Read Text And Extract Image From PDF
- Compare Dates in Java
- Write a File Asynchronously in Java
- final Vs finally Vs finalize in Java
- final in Java With Examples
- Speculative Execution in Hadoop Framework
- Setter Dependency Injection in Spring
No comments:
Post a Comment