VintaSoft Imaging .NET SDK 15.1: 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