Sign PDF Documents with a Certificate in C#
GdPicture.NET allows you to do the following:
Certifying a PDF Document
To sign a PDF document with a certificate, follow these steps:
-
Create a digital ID or use an already created one.
-
Set the certificate contained in the digital ID stored in the
PCKS#12
file or aStream
object with theSetSignatureCertificateFromP12
method. -
Recommended: Specify the certificate information with the
SetSignatureInfo
method. It requires the following string parameters:-
Name
— The person or authority certifying the document. -
Reason
— The reason for certifying. -
Location
— The physical location where the certificate was added. -
ContactInfo
— The contact information.
-
-
Use the
ApplySignature
method to apply the certificate using the specified settings and save the PDF document to a file or aStream
object. This method requires the following parameters:-
OutputFileName
orOutputStream
— Either the path of the output file or aStream
object. -
SignatureMode
— A member of thePdfSignatureMode
enumeration that specifies the electronic signature technology used in the process. -
Linearization
— A Boolean value that specifies if the output PDF document is linearized.
-
You can only add digital signatures to non-encrypted documents.
To certify 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]"); // 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]") ' Save the output to a file. gdPicturePDF.ApplySignature("C:\temp\output.pdf", PdfSignatureMode.PdfSignatureModeAdobePPKMS, False) End Using
Related Topics
Additional Certificate Settings
The list below contains methods that provide additional settings when using a certificate. Use them after the SetSignatureCertificateFromP12
method and before the ApplySignature
method:
-
The
SetSignatureValidationMark
method adds the validation icon inside the certificate with theSetSignatureValidationMark
method. -
The
SetSignatureCertificationLevel
method specifies the certificate’s certification level. It uses thePdfSignatureCertificationLevel
enumeration as its parameter. This parameter allows you to define the access permissions granted by the certificate. -
The
SetSignatureHash
method sets the hash algorithm used in the signing. It uses thePdfSignatureHash
enumeration as its parameter. -
The
SetSignatureTimestampInfo
method sets the timestamp information.
Getting the Certificate Properties
To get the properties of a certificate inside a PDF document, follow these steps:
-
Use the
GetSignatureCount
method to get the total number of signatures. -
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 theSetMeasurementUnit
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 theSetMeasurementUnit
method. -
StampWidth
— The width of the signature’s bounding box, expressed in the current units defined by theSetMeasurementUnit
method. -
StampHeight
— The height of the signature’s bounding box, expressed in the current units defined by theSetMeasurementUnit
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 thePdfSignatureCertificationLevel
enumeration that represents the level of the signature certification.
-
If you have only one certificate in a PDF document, you can skip the
GetSignatureCount
method and use theGetSignatureProperties
method with the signature index set to0
as its parameter.
To list the properties of all certificates 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 certificates. int signatureCount = gdPicturePDF.GetSignatureCount(); for (int i = 0; i <= signatureCount - 1; i++) { // Get the properties of a certificate. 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 certificate 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 certificates. Dim signatureCount As Integer = gdPicturePDF.GetSignatureCount() For i = 0 To signatureCount - 1 ' Get the properties of a certificate. 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 certificate 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 Certificate from a PDF Document
To remove a certificate, use the RemoveSignature
method. It requires only the signature index as its parameter. Use the GetSignatureCount
method to get the total number of signatures.
If you have only one certificate in a PDF document, you can skip the
GetSignatureCount
method and use theRemoveSignature
method with the signature index set to0
as its parameter.
To delete all certificates, use the following code:
using GdPicturePDF gdPicturePDF = new GdPicturePDF(); gdPicturePDF.LoadFromFile(@"C:\temp\source.pdf"); // Get the total amount of certificates. int signatureCount = gdPicturePDF.GetSignatureCount(); for (int i = 0; i <= signatureCount - 1; i++) { // Remove the certificate. 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 certificates. Dim signatureCount As Integer = gdPicturePDF.GetSignatureCount() For i = 0 To signatureCount - 1 ' Remove the certificate. gdPicturePDF.RemoveSignature(0) Next gdPicturePDF.SaveToFile("C:\temp\output.pdf") End Using
Used Methods
Related Topics
Certifying a PDF Document from Other Sources
To add a certificate from sources other than a PFX file, such as a smart card or a Windows certificate store, use the following methods: