Table of Contents

Digital signing

NetPdf signs documents with a detached PKCS#7 (CMS) signature written as an incremental update, using any X509Certificate2 with a private key.

using System.Security.Cryptography.X509Certificates;
using NetPdf;

var certificate = X509CertificateLoader.LoadPkcs12FromFile("signer.pfx", "pfx-password");

using var doc    = PdfFile.Open("report.pdf");
using var signed = doc.Sign(certificate, new SignatureOptions { Reason = "Approved" });
signed.Save("report-signed.pdf");

SignatureOptions also accepts Location, ContactInfo, Name, and SigningTime.

Verifying signatures

var sigs = signed.GetSignatures();
foreach (var sig in sigs)
{
    Console.WriteLine(sig.SignerSubject);
    Console.WriteLine(sig.IsIntact);              // digest matches the signed bytes
    Console.WriteLine(sig.CoversWholeDocument);   // no content added after signing
}
Note

Signature verification checks integrity only; certificate trust chains are not evaluated.

Sign last

Signing must be the final operation. Any rewrite after signing — including linearization, XMP regeneration, or PDF/A conversion — invalidates the signature:

manipulations → Linearize()WithXmpMetadata() / AsPdfA()Sign() last.