officefileapi-devexpress-dot-office-dot-digitalsignatures-dot-documentsigner-dot-sign-x28-stream-stream-signatureoptions-signatureinfo-x29.md
Signs a file with the specified signature and signature options.
Namespace : DevExpress.Office.DigitalSignatures
Assembly : DevExpress.Docs.v25.2.dll
NuGet Package : DevExpress.Document.Processor
public void Sign(
Stream inputStream,
Stream outputStream,
SignatureOptions options,
SignatureInfo signatureInfo
)
Public Sub Sign(
inputStream As Stream,
outputStream As Stream,
options As SignatureOptions,
signatureInfo As SignatureInfo
)
| Name | Type | Description |
|---|---|---|
| inputStream | Stream |
The stream that contains a file to sign.
| | outputStream | Stream |
The stream to which to save the file.
| | options | SignatureOptions |
An object that contains signature options.
| | signatureInfo | SignatureInfo |
An object that contains the signature information.
|
Use the Sign method to sign documents and save the result. You can use XAdES-BES and XAdES-T signatures with X.509 certificates. Office File API supports signatures in the following document formats:
Microsoft Word
Microsoft Excel
Microsoft PowerPoint
The SignatureOptions class object allows you to specify validation data (certificate, hash algorithm, timestamp, etc.). Pass the SignatureInfo object to define the signer information.
The options and signatureInfo parameters cannot be null.
The code sample below signs and saves a Word and Excel document:
using DevExpress.Office.DigitalSignatures;
using System;
using System.Diagnostics;
using System.Security.Cryptography.X509Certificates;
static void Main(string[] args)
{
//Sign a workbook:
using (Stream stream = new FileStream("Template.xlsx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (Stream outputStream = new FileStream("Workbook_signed.xlsx", FileMode.Create, FileAccess.Write, FileShare.Read))
{
SignDocument(stream, outputStream);
}
}
//Sign a document:
using (Stream stream = new FileStream("Template.docx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (Stream outputStream = new FileStream("Template_signed.docx", FileMode.Create, FileAccess.Write, FileShare.Read))
{
SignDocument(stream, outputStream);
}
}
}
static void SignDocument(Stream path, Stream output)
{
DocumentSigner documentSigner = new DocumentSigner();
documentSigner.Sign(path, output,
CreateSignatureOptions(), CreateSignatureInfo());
}
//Specify a signature certificate and digest method:
static SignatureOptions CreateSignatureOptions()
{
X509Certificate2 certificate = new X509Certificate2("Certificate/SignDemo.pfx", "dxdemo");
Uri tsaServer = new Uri("https://freetsa.org/tsr");
SignatureOptions options = new SignatureOptions();
options.Certificate = certificate;
if (tsaServer != null)
options.TsaClient = new TsaClient(tsaServer, HashAlgorithmType.SHA256);
//In this example, certificate validation is skipped
options.SignatureFlags &= ~SignatureFlags.ValidateCertificate;
options.CertificateKeyUsageFlags = X509KeyUsageFlags.None;
options.DigestMethod = HashAlgorithmType.SHA256;
X509ChainPolicy policy = new X509ChainPolicy();
policy.RevocationMode = X509RevocationMode.NoCheck;
policy.RevocationFlag = X509RevocationFlag.ExcludeRoot;
policy.VerificationFlags |= X509VerificationFlags.AllowUnknownCertificateAuthority |
X509VerificationFlags.IgnoreCertificateAuthorityRevocationUnknown;
options.CertificatePolicy = policy;
options.TimestampCertificatePolicy = policy;
return options;
}
//Specify signer information:
static SignatureInfo CreateSignatureInfo()
{
SignatureInfo signatureInfo = new SignatureInfo();
signatureInfo.CommitmentType = CommitmentType.ProofOfApproval;
signatureInfo.Time = DateTime.UtcNow;
signatureInfo.ClaimedRoles.Clear();
signatureInfo.ClaimedRoles.Add("Sales Representative");
signatureInfo.Comments = "Demo Digital Signature";
return signatureInfo;
}
Imports DevExpress.Office.DigitalSignatures
Imports System
Imports System.Diagnostics
Imports System.Security.Cryptography.X509Certificates
Shared Sub Main(ByVal args() As String)
'Sign a workbook:
Dim workbookOutput As String = "Workbook_signed.xlsx"
SignDocument("Template.xlsx", workbookOutput)
'Sign a document:
Dim documentOutput As String = "Document_signed.docx"
SignDocument("Template.docx", documentOutput)
End Sub
Shared Sub SignDocument(ByVal path As String, ByVal output As String)
Dim documentSigner As New DocumentSigner()
documentSigner.Sign(path, output,
CreateSignatureOptions(), CreateSignatureInfo())
Process.Start(output)
End Sub
' Specify a signature certificate and digest method:
Private Shared Function CreateSignatureOptions() As SignatureOptions
Dim certificate As New X509Certificate2("Certificate/SignDemo.pfx", "dxdemo")
Dim tsaServer As New Uri("https://freetsa.org/tsr")
Dim options As New SignatureOptions()
options.Certificate = certificate
If tsaServer IsNot Nothing Then
options.TsaClient = New TsaClient(tsaServer, HashAlgorithmType.SHA256)
End If
'In this example, certificate validation is skipped
options.SignatureFlags = options.SignatureFlags And Not SignatureFlags.ValidateCertificate
options.CertificateKeyUsageFlags = X509KeyUsageFlags.None
options.DigestMethod = HashAlgorithmType.SHA256
Dim policy As New X509ChainPolicy()
policy.RevocationMode = X509RevocationMode.NoCheck
policy.RevocationFlag = X509RevocationFlag.ExcludeRoot
policy.VerificationFlags = policy.VerificationFlags Or X509VerificationFlags.AllowUnknownCertificateAuthority Or X509VerificationFlags.IgnoreCertificateAuthorityRevocationUnknown
options.CertificatePolicy = policy
options.TimestampCertificatePolicy = policy
Return options
End Function
' Specify signer information:
Shared Function CreateSignatureInfo() As SignatureInfo
Dim signatureInfo As New SignatureInfo()
signatureInfo.CommitmentType = CommitmentType.ProofOfApproval
signatureInfo.Time = Date.UtcNow
signatureInfo.ClaimedRoles.Clear()
signatureInfo.ClaimedRoles.Add("Sales Representative")
signatureInfo.Comments = "Demo Digital Signature"
Return signatureInfo
End Function
See Also