Products
PDFControls.NET 2.0 PDFKit.NET 4.0
Created
7/8/2014
Tags
Digital signatures PDF forms Security

Import a digital signature and sign a PDF.

Digital signatures can be used for many types of documents where traditional hand written signatures were used in the past. This code sample shows you how you can import a digital signature and use it to sign a PDF document in C# or VB.NET.

using (FileStream inFile = new FileStream(@"..\..\../inputdocuments/f1040a.pdf", FileMode.Open, FileAccess.Read))
{
    // open document with signature fioeld
    Document document = new Document(inFile);

    // retrieve signature field
    SignatureField field = document.Fields["SignHere"] as SignatureField;

    // open certicate store.
    Pkcs12Store ks = null;
    using (FileStream file = new FileStream(@"..\..\../inputdocuments/ChrisSharp.pfx", FileMode.Open, FileAccess.Read))
    {
        ks = new Pkcs12Store(file, "Sample");
    }

    // let the SignatureHandler factory decide which type should be used.
    SignatureHandler handler = StandardSignatureHandler.Create(ks);

    field.SignatureHandler = handler;

    // set some optional info.
    field.ContactInfo = "+31 (0)77 4748677";
    field.Location = "The Netherlands";
    field.Reason = "I fully agree!";

    // optional code to set image:
    // enumerate widgets 
    foreach (SignatureWidget widget in field.Widgets)
    {
        SignatureAppearance signedAppearance = new SignatureAppearance();
        signedAppearance.Style = SignatureAppearanceStyle.ImageAndText;
        signedAppearance.Bitmap = new System.Drawing.Bitmap(@"..\..\../inputdocuments/logo_pdfkit.gif");
        widget.SignedAppearance = signedAppearance;
        widget.BackgroundColor = System.Drawing.Color.LightPink;
    }

    // write the modified document to disk
    // note: signing requires read-write file access
    using (FileStream outFile = new FileStream(@"..\..\signed.pdf", FileMode.Create, FileAccess.ReadWrite))
    {
        document.Write(outFile);
    }
}
    Sub Main()

        Using inFile As New FileStream("..\..\../inputdocuments/f1040a.pdf", FileMode.Open, FileAccess.Read)
            ' open document with signature fioeld
            Dim document As New Document(inFile)

            ' retrieve signature field
            Dim field As SignatureField = TryCast(document.Fields("SignHere"), SignatureField)

            ' open certicate store.
            Dim ks As Pkcs12Store = Nothing
            Using file As New FileStream("..\..\../inputdocuments/ChrisSharp.pfx", FileMode.Open, FileAccess.Read)
                ks = New Pkcs12Store(file, "Sample")
            End Using

            ' let the SignatureHandler factory decide which type should be used.
            Dim handler As SignatureHandler = StandardSignatureHandler.Create(ks)

            field.SignatureHandler = handler

            ' set some optional info.
            field.ContactInfo = "+31 (0)77 4748677"
            field.Location = "The Netherlands"
            field.Reason = "I fully agree!"

            ' optional code to set image:
            ' enumerate widgets 
            For Each widget As SignatureWidget In field.Widgets
                Dim signedAppearance As New SignatureAppearance()
                signedAppearance.Style = SignatureAppearanceStyle.ImageAndText
                signedAppearance.Bitmap = New System.Drawing.Bitmap("..\..\../inputdocuments/logo_pdfkit.gif")
                widget.SignedAppearance = signedAppearance
                widget.BackgroundColor = System.Drawing.Color.LightPink
            Next

            ' write the modified document to disk
            ' note: signing requires read-write file access
            Using outFile As New FileStream("..\..\signed.pdf", FileMode.Create, FileAccess.ReadWrite)
                document.Write(outFile)
            End Using
        End Using
    End Sub

The signature field in the PDF now looks like this:

pdf-digital-signature.png