Questa pagina può contenere testo tradotto automaticamente.

Firma i documenti PDF in C# e VB.NET

Le firme digitali vengono usate per autenticare l'identità di un utente e il contenuto del documento PDF. Le firme consentono di dimostrare che il documento PDF:

  • Non è stato modificato da quando è stato firmato.
  • È stato firmato digitalmente da una persona specifica.

Aggiungi una firma digitale al PDF in C# e VB.NET

Libreria .NET per firmare documenti PDF

Usa libreria Docotic.Pdf per firmare documenti PDF in applicazioni .NET Framework e .NET Core. Ottieni la libreria e una chiave di licenza gratuita a tempo limitato nella pagina Scarica la libreria PDF C# .NET.

Docotic.Pdf può creare firme digitali usando diversi algoritmi di digest (SHA-1, SHA-256, SHA-384, SHA-512, RIPEMD-160) e diversi formati di firma (adbe.pkcs7.detached o ETSI.CAdES.detached). La libreria può anche verificare le firme PDF.

Aggiungi una firma digitale al PDF in C#

È necessario un certificato PKCS#12 digitale (.pfx o .p12) emesso da una valida Certificate Authority (CA) per firmare un documento PDF. Ecco un esempio di base che mostra come firmare un documento PDF in C#:

using BitMiracle.Docotic.Pdf;

using var pdf = new PdfDocument("document_to_sign.pdf");
var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
{
    DigestAlgorithm = PdfDigestAlgorithm.Sha256,
    Format = PdfSignatureFormat.Pkcs7Detached,
    Reason = "Testing digital signatures",
    Location = "My workplace",
    ContactInfo = "support@example.com"
};

pdf.SignAndSave(options, "signed.pdf");

Sostituisci "your_cert.p12" e "your_cert_password" con il tuo file di certificato .p12 o .pfx e la password. Su GitHub, puoi scaricare e provare gli esempi completi Firma il documento PDF in C# e VB.NET.

Ci sono casi in cui è necessario firmare un documento già firmato. Oppure più persone devono firmare un modulo una dopo l'altra. Anche questo è possibile. I passaggi sono per lo più gli stessi. Basta assicurarsi di firmare e salvare in modo incrementale. Gli aggiornamenti incrementali non invalidano le firme digitali se si applicano solo le modifiche consentite.

Ci sono Firma un documento PDF già firmato e Firma un modulo PDF con più persone esempi in C# e VB.NET per questi casi.

Il codice sopra aggiunge implicitamente un campo firma invisibile al documento PDF e lo usa per la firma. Vediamo come aggiungere e personalizzare i campi firma nei PDF.

Firma un documento PDF con un'immagine di firma autografa

Spesso devi aggiungere al PDF un'immagine di firma autografa oltre alla firma digitale. Questo esempio mostra come aggiungere una firma digitale con un'immagine associata in C#:

using var pdf = new PdfDocument("document_to_sign.pdf");
var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
{
    DigestAlgorithm = PdfDigestAlgorithm.Sha256,
    Format = PdfSignatureFormat.Pkcs7Detached,
};

PdfSignatureField field = pdf.Pages[0].AddSignatureField(20, 20, 100, 50);
options.Field = field;

PdfImage image = pdf.CreateImage("your_signature.jpg");
options.Appearance.Image = image;
options.Appearance.HideAllText();

pdf.SignAndSave(options, "signed.pdf");

Questo codice aggiunge un campo firma, associa il campo alle opzioni di firma e personalizza l'aspetto del campo. Puoi mostrare testo, immagine o entrambi nei campi firma. Consulta classe PdfSignatureAppearanceOptions e gli esempi Firma un campo firma usando uno stile personalizzato per maggiori dettagli.

Blocca i campi del modulo PDF con un campo firma

Un campo firma può essere usato per bloccare i campi del modulo PDF dopo la firma. Questo esempio mostra come bloccare campi di modulo specifici dopo la firma in C#:

var first = page.AddSignatureField("first", 100, 100, 200, 50);

// quando il primo campo viene firmato, i campi con i nomi "some_text_field" e
// "some_checkbox" verranno bloccati per la modifica
first.Lock = PdfSignatureFieldLock.CreateLockFields("some_text_field", "some_checkbox");

E il seguente codice mostra come bloccare tutti i campi del modulo dopo la firma:

var second = page.AddSignatureField("second", 100, 200, 200, 50);

// quando il secondo campo viene firmato, tutti i campi verranno bloccati per la modifica
second.Lock = PdfSignatureFieldLock.CreateLockAll();

Puoi anche bloccare tutti i campi del modulo nel documento PDF tranne i campi specifici. Usa il metodo PdfSignatureFieldLock.CreateLockAllExceptFields per questo.

Scarica e prova gli esempi completi Firma un campo firma con un blocco in C# e VB.NET da GitHub.

Incorpora un timestamp in una firma digitale

Puoi aggiungere ulteriore sicurezza a una firma digitale incorporando un timestamp. Per farlo, specifica l'URL dell'Autorità Timestamp come una delle opzioni di firma. Puoi anche fornire un nome utente e una password se richiesti.

Quando firma, la libreria otterrà un timestamp dall'Autorità Timestamp e lo incorporerà nella firma.

Per motivi di compatibilità, consigliamo di usare uno degli algoritmi di digest SHA per le firme con timestamp.

// Sostituisci il seguente URL di test con l'URL della tua Autorità Timestamp
options.Timestamp.AuthorityUrl = new Uri("http://tsa.starfieldtech.com/");

// Specifica nome utente e password se la tua Autorità Timestamp richiede l'autenticazione
options.Timestamp.Username = null;
options.Timestamp.Password = null;