Sign PDF Documents with an X.509 Certificate on a Hardware Device
TX Text Control can be used to retrieve certificates from a hardware device (such as the Windows certificate store, smart cards and PIV cards, USB tokens). This article shows how to use an X.509 certificate stored on a Windows machine in the Windows certificate store.

TX Text Control can digitally sign Adobe PDF and PDF/A documents with X.509 certificates. An X.509 certificate is a digital certificate that implements the widely accepted X.509 Public Key Infrastructure (PKI) standard that verifies that a specific public key belongs to a user, computer, or service identity contained in the certificate. The certificate can be assigned in the Save
Document Signing Methods
There are two approaches to signing PDF documents with TX Text Control:
- Sign the whole document with a digital certificate
- Sign individual signature fields with a digital certificate(s)
In both approaches, signatures can be created with PFX, DER Cer, or Base64 CER certificate files, loaded from raw data, or selected from the local certificate store.
Windows Certificate Store
The following method opens a dialog box that allows the user to select the desired certificate from the local Windows certificate store. The selected certificate is returned and can be used to sign the document or the signature fields in a PDF document.
The X509Certificate2UI class provides a user interface for selecting and viewing X.509 certificates. The following code uses the SelectFromCollection method to open a certificate selection dialog. All registered certificates, including smart cards, are listed in the dialog.
static X509Certificate2 RetrieveCertificate() {
// get and open certificate store for current user
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
// retrieve the certificate using the integrated Windows UI
X509Certificate2Collection selectedCertificates =
X509Certificate2UI.SelectFromCollection(
store.Certificates,
"Choose your certificate",
"Please select a certificate that is used to sign the PDF.",
X509SelectionFlag.SingleSelection);
// return the first selected certificate with a private key
foreach (var certificate in selectedCertificates) {
if (certificate.HasPrivateKey)
return certificate;
}
return null;
}
Signing the PDF
The CreateEncryptedPDF method takes the selected certificate and a document in the internal TX Text Control format and creates a PDF document signed with the given certificate.
public byte[] CreateEncryptedPDF(byte[] document, X509Certificate2 certificate) {
byte[] bPDF;
using (TXTextControl.ServerTextControl tx = new TXTextControl.ServerTextControl()) {
tx.Create();
tx.Load(document, TXTextControl.BinaryStreamType.InternalUnicodeFormat);
// apply the first selected certificate
TXTextControl.SaveSettings saveSettings = new TXTextControl.SaveSettings() {
DigitalSignature = new TXTextControl.DigitalSignature(certificate, null)
};
// save the document as PDF
tx.Save(out bPDF, TXTextControl.BinaryStreamType.AdobePDFA, saveSettings);
}
return bPDF;
}
The following code shows how to call this method with the certificate returned from the certificate store.
CreateEncryptedPDF(document, RetrieveCertificate());
The dialog box for selecting the certificate from the local Windows certificate store is shown in the following screenshot.
Related Posts
Back from KCDC 2025 - Some Impressions
In this blog post, we will share our impressions of the KCDC 2025 conference and our key takeaways from it. We showcased our latest features and collected valuable feedback from attendees.
TX Text Control 33.0 SP3 is Now Available: What's New in the Latest Version
TX Text Control 33.0 Service Pack 3 is now available, offering important updates and bug fixes for all platforms. If you use TX Text Control in your document processing applications, this service…
Mining PDFs with Regex in C#: Practical Patterns, Tips, and Ideas
Mining PDFs with Regex in C# can be a powerful technique for extracting information from documents. This article explores practical patterns, tips, and ideas for effectively using regular…
Streamline Data Collection with Embedded Forms in C# .NET
Discover how to enhance your C# .NET applications by embedding forms for data collection. This article explores the benefits of using Text Control's ASP.NET and ASP.NET Core components to create…
ASP.NETASP.NET CoreDocument Viewer
High-Performance Text Replacement in Large DOCX Files using C# .NET
Learn how to efficiently replace text in large DOCX files using C# .NET and the ServerTextControl component from Text Control. This article demonstrates the performance benefits of using the…