VintaSoft Imaging .NET SDK 15.2: Documentation for .NET developer
In This Topic
PDF: How to add digital signature with custom appearance to a PDF document?
In This Topic
Here is C#/VB.NET code that demonstrates how to add digital signature with custom appearance to a PDF document using PdfPageDigitalSignatureHelper class:
using System.Drawing;
using System.Security.Cryptography.X509Certificates;
using Vintasoft.Imaging.Pdf;
using Vintasoft.Imaging.Pdf.Drawing;
using Vintasoft.Imaging.Pdf.Tree.Fonts;

/// <summary>
/// Adds visible digital signature with custom appearance to a PDF page.
/// </summary>
public class PdfPageDigitalSignatureHelper_CustomAppearance
{
    public static void Run()
    {
        // get the X509 certificate from .pfx-file
        using (X509Certificate2 certificate = new X509Certificate2("TestCertificate.pfx", "test"))
        {
            // create a helper that alows to add digital signature to a PDF document
            MyDigitalSignatureHelper digitalSignatureHelper =
                new MyDigitalSignatureHelper(certificate, new RectangleF(20, 20, 250, 100));

            // set the background color for signature
            digitalSignatureHelper.SignatureBackgoundColor = Color.Green;

            // set the reason for signing
            digitalSignatureHelper.SigningReason = "Approve document";

            // set text for signature appearance
            digitalSignatureHelper.SignatureText =
                string.Format("Digitally signed by\n{0}", digitalSignatureHelper.SignerName);

            // add digital signature to the first PDF page, sign PDF document and save PDF document to the output file
            digitalSignatureHelper.SignDocument("TestDocumentToSign.pdf", "TestDocumentToSign-signed.pdf", 0);
        }
    }

    public class MyDigitalSignatureHelper : PdfPageDigitalSignatureHelper
    {
        public MyDigitalSignatureHelper(X509Certificate2 certificate, RectangleF signatureRect)
            : base(certificate, signatureRect)
        {
        }

        /// <summary>
        /// Draws the text on signature appearance.
        /// </summary>
        /// <param name="graphics">The PDF graphics.</param>
        /// <param name="rect">The rectangle.</param>
        /// <param name="font">The text font.</param>
        /// <param name="text">The text do draw.</param>
        protected override void DrawSignatureAppearanceText(PdfGraphics graphics, RectangleF rect, PdfFont font, string text)
        {
            // create border pen
            PdfPen borderPen = new PdfPen(Color.Orange, 10);

            // draw border
            graphics.DrawRectangle(borderPen, rect);

            // padding
            rect.Inflate(-borderPen.Width * 2, -borderPen.Width * 2);

            // measure font size
            float fontSize = graphics.MeasureFontSize(text, font, rect.Width, rect.Height);

            // draw the signature text
            graphics.DrawString(text, font, fontSize, new PdfBrush(SignatureTextColor), rect, SignatureTextAlignment, false);
        }
    }
}
Imports System.Drawing
Imports System.Security.Cryptography.X509Certificates
Imports Vintasoft.Imaging.Pdf
Imports Vintasoft.Imaging.Pdf.Drawing
Imports Vintasoft.Imaging.Pdf.Tree.Fonts

''' <summary>
''' Adds visible digital signature with custom appearance to a PDF page.
''' </summary>
Public Class PdfPageDigitalSignatureHelper_CustomAppearance
    Public Shared Sub Run()
        ' get the X509 certificate from .pfx-file
        Using certificate As New X509Certificate2("TestCertificate.pfx", "test")
            ' create a helper that alows to add digital signature to a PDF document
            Dim digitalSignatureHelper As New MyDigitalSignatureHelper(certificate, New RectangleF(20, 20, 250, 100))

            ' set the background color for signature
            digitalSignatureHelper.SignatureBackgoundColor = Color.Green

            ' set the reason for signing
            digitalSignatureHelper.SigningReason = "Approve document"

            ' set text for signature appearance
            digitalSignatureHelper.SignatureText = String.Format("Digitally signed by" & vbLf & "{0}", digitalSignatureHelper.SignerName)

            ' add digital signature to the first PDF page, sign PDF document and save PDF document to the output file
            digitalSignatureHelper.SignDocument("TestDocumentToSign.pdf", "TestDocumentToSign-signed.pdf", 0)
        End Using
    End Sub

    Public Class MyDigitalSignatureHelper
        Inherits PdfPageDigitalSignatureHelper
        Public Sub New(certificate As X509Certificate2, signatureRect As RectangleF)
            MyBase.New(certificate, signatureRect)
        End Sub

        ''' <summary>
        ''' Draws the text on signature appearance.
        ''' </summary>
        ''' <param name="graphics">The PDF graphics.</param>
        ''' <param name="rect">The rectangle.</param>
        ''' <param name="font">The text font.</param>
        ''' <param name="text">The text do draw.</param>
        Protected Overrides Sub DrawSignatureAppearanceText(graphics As PdfGraphics, rect As RectangleF, font As PdfFont, text As String)
            ' create border pen
            Dim borderPen As New PdfPen(Color.Orange, 10)

            ' draw border
            graphics.DrawRectangle(borderPen, rect)

            ' padding
            rect.Inflate(-borderPen.Width * 2, -borderPen.Width * 2)

            ' measure font size
            Dim fontSize As Single = graphics.MeasureFontSize(text, font, rect.Width, rect.Height)

            ' draw the signature text
            graphics.DrawString(text, font, fontSize, New PdfBrush(SignatureTextColor), rect, SignatureTextAlignment, _
                False)
        End Sub
    End Class
End Class