Skip to main content

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

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