Skip to main content

How to: Use PdfDocumentProcessor to Add a Visual Signature to a Document

  • 4 minutes to read

Important

You need a license for the DevExpress Office File API Subscription or DevExpress Universal Subscription to use these examples in production code.

The PdfDocumentProcessor allows you to apply a signature with the CMS/PKCS #7 message and adbe.pkcs7.detached signature value encoding.

Note that you can sign a document only once. Use the PdfDocumentSigner and PdfSignatureBuilder classes to apply multiple signatures. Refer to the Sign Documents article for more information.

Important

The PdfDocumentProcessor removes existing signatures from a document when it is saved. However, if you use PdfDocumentProcessor to apply a signature, it is retained. Use the PdfSignatureBuilder to apply multiple signatures to the document.

Use the API from the table below to create a visual signature and specify the signer information.

Member Description
PdfSignature Represents a signature. You can use the X509Certificate2 certificate. Pass the Pkcs7Signer object to the constructor to use the PKCS#7 signature.
PdfSignature.Name Gets or sets the name of the person or authority signing the document.
PdfSignature.Location Gets or sets the signing location.
PdfSignature.Reason Gets or sets the reason for a document signature.
PdfSignature.ContactInfo Specifies the contact information which helps a recipient to verify the signature provided by the signer.
PdfSignature.SigningTime Gets the time the document was signed.

The code sample below shows how to create a signature with the X509 certificate:

View Example

using System.IO;
using System.Security.Cryptography.X509Certificates;
using DevExpress.Pdf;


//Provide a signature certificate:
X509Certificate2 certificate = new X509Certificate2(@"..\..\SignDemo.pfx", "dxdemo");

//Specify the signature's image data and location parameters:
byte[] imageData = File.ReadAllBytes("..\\..\\Signature.png");
int pageNumber = 1;
int angleInDegrees = 45;
double angleInRadians = angleInDegrees * (Math.PI / 180);
PdfOrientedRectangle signatureBounds = new PdfOrientedRectangle(new PdfPoint(0, 460), 250, 90, angleInRadians);

//Pass all instances created above to the PdfSignature constructor:
PdfSignature signature = new PdfSignature(certificate, imageData, pageNumber, signatureBounds);

//Specify the signing information:
signature.Location = "USA";
signature.ContactInfo = "john.smith@example.com";
signature.Reason = "Approved";

//Save a signed document:
documentProcessor.SaveDocument(@"..\..\SignedDocument.pdf", new PdfSaveOptions()
{ Signature = signature });

The code sample below shows how to use the Pkcs7Signer object to create a signature:

using System;
using DevExpress.Pdf;
using System.IO;

using (PdfDocumentProcessor processor = new PdfDocumentProcessor())
{
    processor.LoadDocument("Document.pdf");

    //Create a PKCS#7 signature
    Pkcs7Signer pkcs7Signature = new Pkcs7Signer("Signing Documents//certificate.pfx", "123", PdfHashAlgorithm.SHA256);

    //Specify the signature's image data and location parameters:
    byte[] imageData = File.ReadAllBytes("Signing Documents//JohnSmith.jpg");
    int pageNumber = 1;
    int angleInDegrees = 45;
    double angleInRadians = angleInDegrees * (Math.PI / 180);
    PdfOrientedRectangle signatureBounds = new PdfOrientedRectangle(new PdfPoint(0, 460), 250, 90, angleInRadians);

    //Pass all instances created above to the PdfSignature constructor:
    PdfSignature signature = new PdfSignature(pkcs7Signature, imageData, pageNumber, signatureBounds);

    //Specify the signing information:
    signature.Location = "USA";
    signature.ContactInfo = "john.smith@example.com";
    signature.Reason = "Approved";

    //Save a signed document:
    processor.SaveDocument("SignedDocument.pdf", new PdfSaveOptions()
    { Signature = signature });
}
See Also