Skip navigation links

Oracle Fusion Middleware Java API Reference for Oracle Business Intelligence Publisher
11g Release 1 (11.1.1)

E17789-02


oracle.xdo.common.pdf.signature
Class PDFSignature

java.lang.Object
  extended by oracle.xdo.common.pdf.signature.PDFSignature


public class PDFSignature
extends java.lang.Object

This provides an API to sign a PDF document. This API requires PrivateKey and X509 RSA Certificates. The PrivateKey is used to sign and the X509 Certificates are used to be embed so that PDF reader can verify if the PDF document is signed properly. DSA certificates are not supported.

 [How to sign a PDF document]
    String inPDF = "/tmp/PDFDigitalSignatureTest_1.pdf";
    String outPDF = "/tmp/PDFDigitalSignatureTest_1_signed.pdf";
    String pkcs12File = "/tmp/sample.pfx";

    try
    {
      PDFSignature pdfSignature = new PDFSignature(inPDF, outPDF);
      Properties props = new Properties();
      // adds some properties to props
      pdfSignature.setConfig(props);
      pdfSignature.setLocale("en");
      pdfSignature.init("password4PKCS12", pkcs12File);
      // pdfSignature.addSignatureField(1, new float[]{550, 780, 620, 800}, "Signature1");
      pdfSignature.sign("Signature1", "I'm the author of this document");
      // Once it's signed, the cleanup() method must be called. 
      // Otherwise, some resources will not be released.
      pdfSignature.cleanup();
    }
    catch(Throwable t)
    {
      t.printStackTrace();
    }

 [How to verify a PDF document]
   String trustedCertPath = "/tmp/trustedRoot.cer";
   String inPDF = "/tmp/PDFDocumentToBeVerified.pdf";
    try
    {
      Vector trustedCerts = new Vector();
      trustedCerts.addElement(new File(trustedCertPath));
      PDFSignature pdfSignature = new PDFSignature(inPDF);

      Properties props = new Properties();
      // adds some properties to props
      pdfSignature.setConfig(props);
      pdfSignature.init();

      SignatureFields signFields = pdfSignature.getSignatureFields();
      Vector signedFieldNames = signFields.getSignatureFieldNames();
      int size = signedFieldNames.size();
      for(int i = 0 ; i < size ; i++)
      {
        String signFieldName = (String)signedFieldNames.elementAt(i);
        SignatureField signField = signFields.getSignatureField(signFieldName);
        boolean isValid = signField.verifyDocument();

        StringBuffer logBuffer = new StringBuffer();
        logBuffer.append("++++++++++ ").append(signFieldName).append(" ++++++++++\n");
        logBuffer.append("Revision : ").append(signField.getRevision());
        logBuffer.append(" of ").append(signFields.getTotalRevisions()).append('\n');
        logBuffer.append("PDF document portion after signing is ");
        if(isValid)
        {
          logBuffer.append("not ");
        }
        else
        {
          ;
        }
        logBuffer.append("modified.\n");

        logBuffer.append("The certificate is ");
        boolean isCertValid = false;
        try
        {
          isCertValid = signField.verifyCertificates(trustedCerts, null);
        }
        catch(XDORuntimeException xdore)
        {
          xdore.printStackTrace();
        }
        if(isCertValid)
        {
          ;
        }
        else
        {
          logBuffer.append("not ");
        }
        logBuffer.append("verified against the root certificate.");
        System.out.println(logBuffer.toString());

        if(extractRevision)
        {
          StringBuffer revFile = new StringBuffer();
          revFile.append(inPDF).append(".rev.").append(i).append(".pdf");
          FileOutputStream outputStream = new FileOutputStream(revFile.toString());
          outputStream.write(signField.extractRevision());
          outputStream.close();
        }
      }

      pdfSignature.cleanup();
    }
    catch(Throwable t)
    {
      System.err.println("What's wrong !!!");
      t.printStackTrace();
    }
 
 

Field Summary
static int PDF_SIGNFIELD_UPPER_CENTER
           
static int PDF_SIGNFIELD_UPPER_LEFT
           
static int PDF_SIGNFIELD_UPPER_RIGHT
           

 

Constructor Summary
PDFSignature(java.io.InputStream inPDF)
           
PDFSignature(java.lang.String inPDF)
           
PDFSignature(java.lang.String inPDF, java.lang.String outPDF)
           

 

Method Summary
 boolean addSignatureField(int pageIndex, float[] coords, java.lang.String signatureFieldName)
          Creates a signature field and appends it to a PDF document.
 boolean addSignatureField(int pageIndex, int location, java.lang.String signatureFieldName, float fieldLength, float fieldHeight)
          If the fieldLength and fieldHeight value is less than 0, a default value is used.
 void cleanup()
          Cleans up any resources allocated after doing sign() or verify()
 SignatureFields getSignatureFields()
          Returns a SignatureFields instance which can verify signature in a PDF document.
 void init()
          This method is called before verifying signatures in a PDF document.
 void init(java.lang.String password, java.lang.String pkcs12File)
          This method is called before signing a PDF document.
 void setConfig(java.util.Properties props)
           
 void setConfig(java.lang.String propName, java.lang.String propValue)
          Sets property and value.
 void setLocale(java.lang.String locale)
           
 boolean sign(java.lang.String signatureFieldName)
           
 boolean sign(java.lang.String signatureFieldName, java.lang.String reason)
          Signs the signatureFieldName.

 

Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

 

Field Detail

PDF_SIGNFIELD_UPPER_LEFT

public static final int PDF_SIGNFIELD_UPPER_LEFT

PDF_SIGNFIELD_UPPER_CENTER

public static final int PDF_SIGNFIELD_UPPER_CENTER

PDF_SIGNFIELD_UPPER_RIGHT

public static final int PDF_SIGNFIELD_UPPER_RIGHT

Constructor Detail

PDFSignature

public PDFSignature(java.lang.String inPDF)
Parameters:
inPDF -

PDFSignature

public PDFSignature(java.io.InputStream inPDF)

PDFSignature

public PDFSignature(java.lang.String inPDF,
                    java.lang.String outPDF)

Method Detail

setLocale

public void setLocale(java.lang.String locale)

getSignatureFields

public SignatureFields getSignatureFields()
Returns a SignatureFields instance which can verify signature in a PDF document. This method needs to be called right after constructing the PDFSignature instance. How to use this API.
 PDFSignature pdfSignature = new PDFSignature(inPDF, outPDF);
 SignatureFields signFields = pdfSignature.getSignatureFields();
 
Returns:

setConfig

public void setConfig(java.lang.String propName,
                      java.lang.String propValue)
Sets property and value. A temporary directory information needs to be set. For example,
 pdfSig.setConfig("system-temp-dir", "/tmp");
 
Parameters:
propValue -
propName -

setConfig

public void setConfig(java.util.Properties props)

init

public void init(java.lang.String password,
                 java.lang.String pkcs12File)
          throws java.lang.IllegalArgumentException,
                 CertificateExpiredException,
                 CertificateNotYetValidException,
                 java.io.IOException
This method is called before signing a PDF document.
Parameters:
pkcs12File -
password -
Throws:
java.lang.IllegalArgumentException
CertificateExpiredException
CertificateNotYetValidException
java.io.IOException

init

public void init()
          throws java.io.IOException
This method is called before verifying signatures in a PDF document.
Throws:
java.io.IOException

addSignatureField

public boolean addSignatureField(int pageIndex,
                                 float[] coords,
                                 java.lang.String signatureFieldName)
                          throws java.io.IOException
Creates a signature field and appends it to a PDF document.
Parameters:
signatureFieldName -
coords -
pageIndex - it starts with 1. It means that 1 indicates the first page.
Returns:
true if a signature field is created successfully, false otherwise.
Throws:
java.io.IOException

addSignatureField

public boolean addSignatureField(int pageIndex,
                                 int location,
                                 java.lang.String signatureFieldName,
                                 float fieldLength,
                                 float fieldHeight)
                          throws java.io.IOException
If the fieldLength and fieldHeight value is less than 0, a default value is used. Please use one of following for a location value.
Parameters:
fieldHeight -
fieldLength -
signatureFieldName -
location -
pageIndex -
Returns:
Throws:
java.io.IOException - thrown when a PDF is not accessible or file io problem happens.

sign

public boolean sign(java.lang.String signatureFieldName)

sign

public boolean sign(java.lang.String signatureFieldName,
                    java.lang.String reason)
Signs the signatureFieldName.
Parameters:
signatureFieldName -
reason -
create -
Returns:
true if signed properly.

cleanup

public void cleanup()
Cleans up any resources allocated after doing sign() or verify()

Skip navigation links

Oracle Fusion Middleware Java API Reference for Oracle Business Intelligence Publisher
11g Release 1 (11.1.1)

E17789-02


Copyright © 2010, 2011, Oracle. All rights reserved.