Add a Digital Signature to a PDF in C#

GdPicture.NET allows you to do the following:

Adding a Certified Digital Signature to a PDF

To add a certified digital signature, follow these steps:

  1. Create a digital ID or use an already created one.

  2. Set the certificate contained in the digital ID stored in the PCKS#12 file or a Stream object with the SetSignatureCertificateFromP12 method.

  3. Recommended: Specify the signature information with the SetSignatureInfo method. It requires the following string parameters:

    • Name — The person or authority signing the document.

    • Reason — The reason for signing.

    • Location — The physical location where the signing takes place.

    • ContactInfo — The contact information of the signer.

  4. Optional: Set the signature’s location on the currently selected page. If you skip this step, the signature will be invisible.

  5. Optional: Configure the text with the SetSignatureText method. For more information on how to use this method, go to the Signing a Digital Signature with Text section.

  6. Optional: Add an image inside the bounding box of the signature. For more information on how to use this method, go to the Signing a Digital Signature with an Image section.

  7. Apply the signature with the ApplySignature method using the specified settings, and save the PDF document to a file or a Stream object. It requires the following parameters:

    • OutputFileName or OutputStream — Either the path to the output file or a Stream object.

    • SignatureMode — A member of the PdfSignatureMode enumeration that specifies the electronic signature technology used in the signing process.

    • Linearization — Specifies if the output PDF document is linearized.

Information

You can only add digital signatures to non-encrypted documents.

To add a digital signature using text and an image to the last page of a PDF document, use the following code:

using GdPicturePDF gdPicturePDF = new GdPicturePDF();
gdPicturePDF.LoadFromFile(@"C:\temp\source.pdf");
// Set the certificate from a file.
gdPicturePDF.SetSignatureCertificateFromP12(@"C:\temp\certificate.pfx", "pspdfkit");
// Add additional signature information.
gdPicturePDF.SetSignatureInfo("John Smith", "Confidential", "Vienna (Austria)",
    "[email protected]");
// Set the measurement unit to centimeters.
gdPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitCentimeter);
float width = gdPicturePDF.GetPageWidth();
// Select the last page.
gdPicturePDF.SelectPage(gdPicturePDF.GetPageCount());
// Define the signature boundary box position and dimensions.
gdPicturePDF.SetSignaturePos(width - 7, 10, 5, 2);
// Select the text font type.
string fontName = gdPicturePDF.AddTrueTypeFont("Freestyle Script", false, false, false);
// Save the text alignment to center in a variable.
var center = TextAlignment.TextAlignmentCenter;
// Draw the text to the signature boundary box.
gdPicturePDF.SetSignatureText("John Smith", fontName, 12, GdPictureColor.Blue, center, center, true);
// Add an image resource from a file.
string stampImage = gdPicturePDF.AddJpegImageFromFile(@"C:\temp\source.jpg");
// Draw the image resource to the signature boundary box.
gdPicturePDF.SetSignatureStampImage(stampImage);
// Save the output to a file.
gdPicturePDF.ApplySignature(@"C:\temp\output.pdf",
    PdfSignatureMode.PdfSignatureModeAdobePPKMS, false);
Using gdPicturePDF As GdPicturePDF = New GdPicturePDF()
    gdPicturePDF.LoadFromFile("C:\temp\source.pdf")
    ' Set the certificate from a file.
    gdPicturePDF.SetSignatureCertificateFromP12("C:\temp\certificate.pfx", "pspdfkit")
    ' Add additional signature information.
    gdPicturePDF.SetSignatureInfo("John Smith", "Confidential", "Vienna (Austria)", "[email protected]")
    ' Set the measurement unit to centimeters.
    gdPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitCentimeter)
    Dim width As Single = gdPicturePDF.GetPageWidth()
    ' Select the last page.
    gdPicturePDF.SelectPage(gdPicturePDF.GetPageCount())
    ' Define the signature boundary box position and dimensions.
    gdPicturePDF.SetSignaturePos(width - 7, 10, 5, 2)
    ' Select the text font type.
    Dim fontName As String = gdPicturePDF.AddTrueTypeFont("Freestyle Script", False, False, False)
    ' Save the text alignment to center in a variable.
    Dim center = TextAlignment.TextAlignmentCenter
    ' Draw the text to the signature boundary box.
    gdPicturePDF.SetSignatureText("John Smith", fontName, 12, GdPictureColor.Blue, center, center, True)
    ' Add an image resource from a file.
    Dim stampImage As String = gdPicturePDF.AddJpegImageFromFile("C:\temp\source.jpg")
    ' Draw the image resource to the signature boundary box.
    gdPicturePDF.SetSignatureStampImage(stampImage)
    ' Save the output to a file.
    gdPicturePDF.ApplySignature("C:\temp\output.pdf",
        PdfSignatureMode.PdfSignatureModeAdobePPKMS, False)
End Using
Used Methods

Signing a Digital Signature with Text

To sign a PDF document with a digital signature using text, follow these steps:

  1. Create a digital ID or use an already created one.

  2. Set the certificate contained in the digital ID stored in the PCKS#12 file or a Stream object with the SetSignatureCertificateFromP12 method.

  3. Recommended: Specify the signature information with the SetSignatureInfo method. It requires the following string parameters:

    • Name — The person or authority signing the document.

    • Reason — The reason for signing.

    • Location — The physical location where the signing takes place.

    • ContactInfo — The contact information of the signer.

  4. Set the signature’s location on the currently selected page. If you skip this step, the signature will be invisible.

  5. Configure the text with the SetSignatureText method. It uses the following parameters:

    • Text — The text to be displayed. If this parameter is an empty string, the text displays the data from the SetSignatureInfo method.

    • FontResName — The font name used. Use either the AddTrueTypeFont method or the AddStandardFont method. If this parameter is an empty string, the predefined font is used.

    • FontSize — The text font size in points.

    • Font color — The font color can be set with one of the following ways: a Color object, a set of four byte parameters (Cyan, Magenta, Yellow, Black), or a 32-bit signed integer.

    • AlignHorz — The horizontal text alignment within the bounding box. Use the TextAlignment enumeration.

    • AlignVert — The vertical text alignment within the bounding box. Use the TextAlignment enumeration.

    • TextDecorationStyle — Optional: A member of the PdfTextDecorationStyle enumeration. It specifies if the text has an overline, strikethrough, or underline.

    • ShowText — A Boolean value that specifies whether the text is displayed.

  6. Apply the signature with the ApplySignature method using the specified settings, and save the PDF document to a file or a Stream object. It requires the following parameters:

    • OutputFileName or OutputStream — Either the path of the output file or a Stream object.

    • SignatureMode — A member of the PdfSignatureMode enumeration that specifies the electronic signature technology used in the signing process.

    • Linearization — Specifies if the output PDF document is linearized.

To add a digital signature using text to the last page of a PDF document, use the following code:

using GdPicturePDF gdPicturePDF = new GdPicturePDF();
gdPicturePDF.LoadFromFile(@"C:\temp\source.pdf");
// Set the certificate from a file.
gdPicturePDF.SetSignatureCertificateFromP12(@"C:\temp\certificate.pfx", "pspdfkit");
// Add additional signature information.
gdPicturePDF.SetSignatureInfo("John Smith", "Confidential", "Vienna (Austria)",
    "[email protected]");
// Set the measurement unit to centimeters.
gdPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitCentimeter);
float width = gdPicturePDF.GetPageWidth();
// Select the last page.
gdPicturePDF.SelectPage(gdPicturePDF.GetPageCount());
// Define the signature boundary box position and dimensions.
gdPicturePDF.SetSignaturePos(width - 7, 10, 5, 2);
// Select the text font type.
string fontName = gdPicturePDF.AddTrueTypeFont("Freestyle Script", false, false, false);
// Save the text alignment to center in a variable.
var center = TextAlignment.TextAlignmentCenter;
// Draw the text to the signature boundary box.
gdPicturePDF.SetSignatureText("John Smith", fontName, 12, GdPictureColor.Blue, center, center, true);
// Save the output to a file.
gdPicturePDF.ApplySignature(@"C:\temp\output.pdf",
    PdfSignatureMode.PdfSignatureModeAdobePPKMS, false);
Using gdPicturePDF As GdPicturePDF = New GdPicturePDF()
    gdPicturePDF.LoadFromFile("C:\temp\source.pdf")
    ' Set the certificate from a file.
    gdPicturePDF.SetSignatureCertificateFromP12("C:\temp\certificate.pfx", "pspdfkit")
    ' Add additional signature information.
    gdPicturePDF.SetSignatureInfo("John Smith", "Confidential", "Vienna (Austria)", "[email protected]")
    ' Set the measurement unit to centimeters.
    gdPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitCentimeter)
    Dim width As Single = gdPicturePDF.GetPageWidth()
    ' Select the last page.
    gdPicturePDF.SelectPage(gdPicturePDF.GetPageCount())
    ' Define the signature boundary box position and dimensions.
    gdPicturePDF.SetSignaturePos(width - 7, 10, 5, 2)
    ' Select the text font type.
    Dim fontName As String = gdPicturePDF.AddTrueTypeFont("Freestyle Script", False, False, False)
    ' Save the text alignment to center in a variable.
    Dim center = TextAlignment.TextAlignmentCenter
    ' Draw the text to the signature boundary box.
    gdPicturePDF.SetSignatureText("John Smith", fontName, 12, GdPictureColor.Blue, center, center, True)
    gdPicturePDF.ApplySignature("C:\temp\output.pdf",
        PdfSignatureMode.PdfSignatureModeAdobePPKMS, False)
End Using
Used Methods

Signing a Digital Signature with an Image

To sign a PDF document with a digital signature using an image — for example, one containing a scan of a handwritten signature — follow these steps:

  1. Create a digital ID or use an already created one.

  2. Set the certificate contained in the digital ID stored in the PCKS#12 file or a Stream object with the SetSignatureCertificateFromP12 method.

  3. Recommended: Specify the signature information with the SetSignatureInfo method. It requires the following string parameters:

    • Name — The person or authority signing the document.

    • Reason — The reason for signing.

    • Location — The physical location where the signing takes place.

    • ContactInfo — The contact information of the signer.

  4. Set the signature’s location on the currently selected page. If you skip this step, the signature will be invisible.

  5. Add an image inside the bounding box of the signature. If the SetSignatureText method is also used, the image is placed at the right side of the bounding box:

  6. Apply the signature with the ApplySignature method using the specified settings, and save the PDF document to a file or a Stream object. It requires the following parameters:

    • OutputFileName or OutputStream — Either the path of the output file or a Stream object.

    • SignatureMode — A member of the PdfSignatureMode enumeration that specifies the electronic signature technology used in the signing process.

    • Linearization — Specifies if the output PDF document is linearized.

Information

If the SetSignatureText method is also used, the image is placed at the right side of the bounding box.

To add a digital signature with an image to the last page of a PDF document, use the following code:

using GdPicturePDF gdPicturePDF = new GdPicturePDF();
gdPicturePDF.LoadFromFile(@"C:\temp\source.pdf");
// Set the certificate from a file.
gdPicturePDF.SetSignatureCertificateFromP12(@"C:\temp\certificate.pfx", "pspdfkit");
// Add additional signature information.
gdPicturePDF.SetSignatureInfo("John Smith", "Confidential", "Vienna (Austria)",
    "[email protected]");
// Set the measurement unit to centimeters.
gdPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitCentimeter);
float width = gdPicturePDF.GetPageWidth();
// Select the last page.
gdPicturePDF.SelectPage(gdPicturePDF.GetPageCount());
// Define the signature boundary box position and dimensions.
gdPicturePDF.SetSignaturePos(width - 7, 10, 5, 2);
// Select the text font type.
string fontName = gdPicturePDF.AddTrueTypeFont("Freestyle Script", false, false, false);
// Save the text alignment to center in a variable.
var center = TextAlignment.TextAlignmentCenter;
// Draw the text to the signature boundary box.
gdPicturePDF.SetSignatureText("John Smith", fontName, 12, GdPictureColor.Blue, center, center, true);
// Add an image resource from a file.
string stampImage = gdPicturePDF.AddJpegImageFromFile(@"C:\temp\source.jpg");
// Draw the image resource to the signature boundary box.
gdPicturePDF.SetSignatureStampImage(stampImage);
// Save the output to a file.
gdPicturePDF.ApplySignature(@"C:\temp\output.pdf",
    PdfSignatureMode.PdfSignatureModeAdobePPKMS, false);
Using gdPicturePDF As GdPicturePDF = New GdPicturePDF()
    gdPicturePDF.LoadFromFile("C:\temp\source.pdf")
    ' Set the certificate from a file.
    gdPicturePDF.SetSignatureCertificateFromP12("C:\temp\certificate.pfx", "pspdfkit")
    ' Add additional signature information.
    gdPicturePDF.SetSignatureInfo("John Smith", "Confidential", "Vienna (Austria)", "[email protected]")
    ' Set the measurement unit to centimeters.
    gdPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitCentimeter)
    Dim width As Single = gdPicturePDF.GetPageWidth()
    ' Select the last page.
    gdPicturePDF.SelectPage(gdPicturePDF.GetPageCount())
    ' Define the signature boundary box position and dimensions.
    gdPicturePDF.SetSignaturePos(width - 7, 10, 5, 2)
    ' Select the text font type.
    Dim fontName As String = gdPicturePDF.AddTrueTypeFont("Freestyle Script", False, False, False)
    ' Save the text alignment to center in a variable.
    Dim center = TextAlignment.TextAlignmentCenter
    ' Draw the text to the signature boundary box.
    gdPicturePDF.SetSignatureText("John Smith", fontName, 12, GdPictureColor.Blue, center, center, True)
    ' Add an image resource from a file.
    Dim stampImage As String = gdPicturePDF.AddJpegImageFromFile("C:\temp\source.jpg")
    ' Draw the image resource to the signature boundary box.
    gdPicturePDF.SetSignatureStampImage(stampImage)
    ' Save the output to a file.
    gdPicturePDF.ApplySignature("C:\temp\output.pdf",
        PdfSignatureMode.PdfSignatureModeAdobePPKMS, False)
End Using
Used Methods

Related Topics

Additional Digital Signing Settings

The list below contains methods that provide additional settings when using a certified digital signature. Use them after the SetSignatureCertificateFromP12 method and before the ApplySignature method:

Getting Digital Signature Properties

To get the properties of a certified digital signature inside a PDF document, follow these steps:

  1. Use the GetSignatureCount method to get the total number of signatures.

  2. Loop through all signatures and use the GetSignatureProperties method. It requires the signature index and the following list of output reference parameters:

    • SignatureName — The name of the person or authority signing the document.

    • SignatureReason — The reason for signing the document.

    • SignatureLocation — The physical location where the signing took place.

    • SignatureContactInfo — The contact information of the signer.

    • SignatureDate — The time of signing as a string.

    • StampLeft — The horizontal coordinate of the signature’s closest point to the currently defined origin. The returned value is expressed in the units specified by the SetMeasurementUnit method.

    • StampTop — The vertical coordinate of the signature’s closest point to the currently defined origin. The returned value is expressed in the units specified by the SetMeasurementUnit method.

    • StampWidth — The width of the signature’s bounding box, expressed in the current units defined by the SetMeasurementUnit method.

    • StampHeight — The height of the signature’s bounding box, expressed in the current units defined by the SetMeasurementUnit method.

    • StampPage — The page number where the signature is.

    • DocumentValid — A Boolean value that specifies whether the document has been altered or corrupted since it was signed.

    • CertificateValid — A Boolean value that specifies whether the certificate used is verified.

    • CertificateFriendlyName — The name of the certificate’s owner.

    • CertificateIssuer — The name of the authority that issued the certificate.

    • CertificateNotBefore — The earliest time and date when the used certificate was valid.

    • CertificateNotAfter — The time and date after which the used certificate is no longer valid.

    • CertificateSubject — The entity the used certificate belongs to (a person or an organization).

    • CertificateVersion — The version of the used certificate.

    • SigningTime — The date and time when the document was signed. Only use this value when the time of signing isn’t available in the signature.

    • SignatureLevel — A member of the PdfSignatureCertificationLevel enumeration that represents the level of the signature certification.

Information

If you have only one signature in a PDF document, you can skip the GetSignatureCount method and use the GetSignatureProperties method with the signature index set to 0 as its parameter.

To list the properties of all certified digital signatures in a PDF document, use the following code:

using GdPicturePDF gdPicturePDF = new GdPicturePDF();
gdPicturePDF.LoadFromFile(@"C:\temp\source.pdf");
// Initiate all reference parameters.
string SignatureName = "", SignatureReason = "", SignatureLocation = "", SignatureContactInfo = "";
string SignatureDate = "", CertificateFriendlyName = "", CertificateIssuer = "", CertificateSubject = "";
float StampLeft = 0, StampTop = 0, StampWidth = 0, StampHeight = 0;
int StampPage = 0, CertificateVersion = 0;
bool DocumentValid = false, CertificateValid = false;
DateTime CertificateNotBefore = new DateTime();
DateTime CertificateNotAfter = new DateTime();
DateTime SigningTime = new DateTime();
PdfSignatureCertificationLevel SignatureLevel = PdfSignatureCertificationLevel.NotCertified;

// Get the total amount of signatures.
int signatureCount = gdPicturePDF.GetSignatureCount();
for (int i = 0; i <= signatureCount - 1; i++)
{
    // Get the properties of a signature.
    gdPicturePDF.GetSignatureProperties(i,
        ref SignatureName,
        ref SignatureReason,
        ref SignatureLocation,
        ref SignatureContactInfo,
        ref SignatureDate,
        ref StampLeft,
        ref StampTop,
        ref StampWidth,
        ref StampHeight,
        ref StampPage,
        ref DocumentValid,
        ref CertificateValid,
        ref CertificateFriendlyName,
        ref CertificateIssuer,
        ref CertificateNotBefore,
        ref CertificateNotAfter,
        ref CertificateSubject,
        ref CertificateVersion,
        ref SigningTime,
        ref SignatureLevel);
    // Write the signature name, reason, and signing date to the console.
    Console.WriteLine("Signature nr {0}:\n- Name: {1}\n- Reason: {2}\n- Date Signed: {3}",
       i, SignatureName, SignatureReason, SignatureDate);
}
Using gdPicturePDF As GdPicturePDF = New GdPicturePDF()
    gdPicturePDF.LoadFromFile("C:\temp\source.pdf")
    ' Initiate all reference parameters.
    Dim SignatureName = "", SignatureReason = "", SignatureLocation = "", SignatureContactInfo = ""
    Dim SignatureDate = "", CertificateFriendlyName = "", CertificateIssuer = "", CertificateSubject = ""
    Dim StampLeft As Single = 0, StampTop As Single = 0, StampWidth As Single = 0, StampHeight As Single = 0
    Dim StampPage = 0, CertificateVersion = 0
    Dim DocumentValid = False, CertificateValid = False
    Dim CertificateNotBefore As Date = New DateTime()
    Dim CertificateNotAfter As Date = New DateTime()
    Dim SigningTime As Date = New DateTime()
    Dim SignatureLevel As PdfSignatureCertificationLevel = PdfSignatureCertificationLevel.NotCertified

    ' Get the total amount of signatures.
    Dim signatureCount As Integer = gdPicturePDF.GetSignatureCount()
    For i = 0 To signatureCount - 1
        ' Get the properties of a signature.
        gdPicturePDF.GetSignatureProperties(i,
            SignatureName,
            SignatureReason,
            SignatureLocation,
            SignatureContactInfo,
            SignatureDate,
            StampLeft,
            StampTop,
            StampWidth,
            StampHeight,
            StampPage,
            DocumentValid,
            CertificateValid,
            CertificateFriendlyName,
            CertificateIssuer,
            CertificateNotBefore,
            CertificateNotAfter,
            CertificateSubject,
            CertificateVersion,
            SigningTime,
            SignatureLevel)
        ' Write the signature name, reason, and signing date to the console.
        Console.WriteLine("Signature nr {0}:" & vbLf & "- Name: {1}" & vbLf & "- Reason: {2}" & vbLf & "- Date Signed: {3}",
            i, SignatureName, SignatureReason, SignatureDate)
    Next
End Using
Used Methods

Related Topics

Removing a Certified Digital Signature

To remove a certified digital signature, use the RemoveSignature method. It requires only the signature index as its parameter. Use the GetSignatureCount method to get the total number of signatures.

Information

If you have only one signature in a PDF document, you can skip the GetSignatureCount method and use the RemoveSignature method with the signature index set to 0 as its parameter.

To delete all certified digital signatures, use the following code:

using GdPicturePDF gdPicturePDF = new GdPicturePDF();
gdPicturePDF.LoadFromFile(@"C:\temp\source.pdf");
// Get the total amount of signatures.
int signatureCount = gdPicturePDF.GetSignatureCount();
for (int i = 0; i <= signatureCount - 1; i++)
{
    // Remove the signature.
    gdPicturePDF.RemoveSignature(0);
}
gdPicturePDF.SaveToFile(@"C:\temp\output.pdf");
Using gdPicturePDF As GdPicturePDF = New GdPicturePDF()
    gdPicturePDF.LoadFromFile("C:\temp\source.pdf")
    ' Get the total amount of signatures.
    Dim signatureCount As Integer = gdPicturePDF.GetSignatureCount()
    For i = 0 To signatureCount - 1
        ' Remove the signature.
        gdPicturePDF.RemoveSignature(0)
    Next

    gdPicturePDF.SaveToFile("C:\temp\output.pdf")
End Using
Used Methods

Related Topics

Adding a Certified Digital Signature from Other Sources

To add a certified digital signature from sources other than a PFX file, such as a smart card or a Windows certificate store, use the following methods: