Home Contact Us

Qoppa Software - PDF Tools & Libraries

Home / Contact Us

jPDFSecure™ Developer Guide

English German

Contents

Introduction
Getting Started
Digitally Signing PDF documents
Getting Current Password / Encryption Info
Getting Current Permissions
Change Security (Passwords, Encryption, and Permissions)
Clearing Security (Passwords, Encryption, and Permissions)
Getting Basic Document Information
Distribution and JAR files

Javadoc API
Source Code Samples

Introduction

jPDFSecure is a Java library that integrates seamlessly into your application or applet to update security settings of your PDF documents. jPDFSecure provides the following functions:

  • Sign PDF documents
  • Encrypt / Decrypt PDF documents
  • Set / Remove Permissions
    • Permission to Print At High Resolution
    • Permission to Print
    • Permission to Copy or Extract Content
    • Permission to Extract Content in Support of Accessibility for Disabled Users
    • Permission to Modify
    • Permission to Assemble: Insert, Rotate, Delete Pages
    • Permission to Add / Modify Annotations
    • Permissions to Fill Form Fields and Sign
  • Set / Remove Passwords
    • Password to Open PDF Documents
    • Master Password to Change Permissions

Like all of our libraries, jPDFSecure is built on top of Qoppa's proprietary format and doesn't require any third party programs or drivers.

Getting Started

The starting point for using jPDFSecure is the com.qoppa.pdfSecure.PDFSecure. This class is used to load a pdf document and to update security settings of the pdf document. The class provides three constructors to load PDF files from the file system, a URL or an InputStream. All constructors take an additional parameter, an object that implements IPasswordHandler, that will be queried if the PDF file requires a password to open (called Open or User password). For PDF files that are not currently encrypted, this second parameter can be null:

PDFSecure pdfSecure = new PDFSecure(new URL(http://www.qoppa.com/content.pdf"), null);

Digitally Signing a PDF document

There are 3 steps to add a new digital signature to a PDF document with jPDFSecure: create a new digital signature field, load digital id from a keystore to create a SignatureInformation object and apply the signature:

// Create signature field on the first page
Rectangle2D signBounds = new Rectangle2D.Double (36, 36, 144, 48);
SignatureField signField = pdfSecure.addSignatureField(0, "signature", signBounds);

// Load the keystore that contains the digital id to use in signing
FileInputStream pkcs12Stream = new FileInputStream ("keystore.pfx");
KeyStore store = KeyStore.getInstance("PKCS12");
store.load(pkcs12Stream, "store_pwd".toCharArray());
pkcs12Stream.close();


// Create signing information
SigningInformation signInfo = new SigningInformation (store, "key_alias", "key_pwd");

// Apply digital signature
pdfSecure.signDocument(signField, signInfo);

// Save the document
pdfSecure.saveDocument ("output.pdf");

To sign an existing digital signature field, you would simply replace the first step by:

// Get first signature field
SignatureField signField = (SignatureField) getSignatureFields().get(0);

 

Getting Current Password / Encryption Info

Once a PDFSecure object has been created, the host application can call simple method to get current security settings of the loaded PDF document.

// PDF document is encrypted
System.out.println(pdfSecure.isEncrypted());

// PDF document has an Open (or User) password (password to open the document)
System.out.println(pdfSecure.hasOpenPassword());

// PDF document has a Permissions (or Owner) password (password to update permissions)
System.out.println(pdfSecure.hasPermissionsPassword());

Getting Current Permissions

PDFSecure.getPermissions will return a permission object. From this object, it is easy to get all the distinct permissions.

PDFPermissions perms = pdfSecure.getPermissions();

// permission to print high resolution
System.out.println( perms.isPrintHighResAllowed());

// permission to print
// automatically on if the permission to print high res is on
System.out.println( perms.isPrintAllowed());

// permission to copy text and graphics
System.out.println(perms.isExtractTextGraphicsAllowed());

// permission to copy text and graphics for disabled users
// automatically on of the permissions to copy text and graphics is on
System.out.println(perms.isExtractTextGraphicsForAccessibilityAllowed());

// permission to change the document
System.out.println(perms.isChangeDocumentAllowed()); // permission to assemble document: insert, rotate, delete pages
// automatically on if the permission to change document is on
System.out.println(perms.isAssembleDocumentAllowed());

// permission to add/modify annotations
// automatically on if the permission to change document is on
System.out.println(perms.isModifyAnnotsAllowed());

// permission to fill form fields and sign
// automatically on if the permission to change document is on
// also automatically on if the permission to modify annotations is on
System.out.println(perms.isFillFormFieldsAllowed());

Changing Security Settings (Passwords, Encryption & Permissions

PDFSecure.setSecurity is the method to call to set / update the security settings for this document.

// set new security settings
pdfSecure.setSecurity (newPermPwd, newOpenPwd, permissions, currentPermPwd);

// save pdf document (outputPDFFile is a Java File Object)
pdfSecure.saveDocument(outputPDFFile.getAbsoluteFileName());

- newPermPwd = document's new Permissions password. If null, there is no Permissions (or Owner) password and any user can change the permissions on the document.

- newOpenPwd = document's new Open password. If null, user won't have to enter a password to open the document.

- permissions = a PDFPermissions object. This object can not be null.

To grant all permissions, use new PDFPermissions(true)

To remove all permissions, use new PDFPermissions(false)

To grant only some permissions

PDFPermissions permissons = new PDFPermissions(false);
permissons.setPrintAllowed(true);
permissons.setAssembleDocumentAllowed(true);
permissons.setFillFormsAllowed(true);

Note that there is some hierarchy in permissions:

  1. If the permissions to Print High Res is on then the permission to print is automatically on.
  2. If the permissions to Extract Text and Graphics is on then the permission to Extract Text and Graphics for Accessibility is automaticaly on.
  3. If the permission to Change Document is on then the following 3 permissions are on: Assemble Document, Modify Annotations, Fill Form Fields.
  4. If the permission to Modify Annotations is on then the permissions to Fill Form Fields is automatically on.

- currentPermPwd = current permissions password. This parameter is needed if the document has a permissions password.

Clearing Security (Passwords, Encryption & Permissions

Calling PDFSecure.clearSecurity will clear all security for this document: it will clear open/user password, owner/permissions password, encryption. This means that all permissions will be reset to true. If the PDF document has a permissions password, it will have to be passed on as a parameter (currentPermissionsPwd below), else it can be left null:

// clear all security settings
pdfSecure.clearSecurity(currentPermissionsPwd);

// save pdf document (outputPDFFile is a Java File Object)
pdfSecure.saveDocument(outputPDFFile.getAbsoluteFileName());

Getting Basic Information about the PDF Document (Title, Author, etc...)

To get basic information about the loaded PDF document, you need to get the DocumentInfo class accessible through PDFSecure.getDocumentInfo. From this class, you can get information about the document such as title, author, subject, keywords, etc...

System.out.println(pdfSecure.getDocumentInfo().getTitle());
System.out.println(pdfSecure.getDocumentInfo().getAuthor());
System.out.println(pdfSecure.getDocumentInfo().getKeywords());

Distribution and JAR Files

jPDFSecure is packaged in a single jar file, jPDFSecure.jar that gets installed with the evaluation sample. When distributing an application that contains jPDFSecure, the jPDFSecure.jar file needs to be distributed along with it and needs to be included in the class path when running the application.

Javadoc API
Source Code Samples

Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.