Questa pagina può contenere testo tradotto automaticamente.

Firma documenti PDF in C# e VB.NET

Le firme digitali vengono utilizzate 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 la firma digitale ai PDF in C# e VB.NET

Libreria .NET per firmare documenti PDF

Utilizzare la libreria Docotic.Pdf per firmare documenti PDF nelle applicazioni .NET Framework e .NET Core. È possibile scaricare i binari della libreria o utilizzare il relativo pacchetto NuGet. Per provare la libreria senza restrizioni sulla modalità di valutazione, è possibile ottenere la chiave di licenza gratuita limitata nel tempo qui.

Docotic.Pdf può creare firme digitali utilizzando diversi algoritmi 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 firma digitale al PDF in C#

Per firmare un documento PDF è necessario un certificato digitale PKCS#12 (file .pfx o .p12) emesso da un'autorità di certificazione (CA) valida. Ecco l'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 file del certificato .p12 o .pfx e la password. Su GitHub è possibile scaricare e provare gli esempi completi di Firma documento PDF in C# e VB.NET.

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

Sono disponibili esempi di Firma di un documento PDF già firmato e Firma di un modulo PDF da parte di più persone in C# e VB.NET per questi casi.

Il codice sopra aggiunge implicitamente un campo firma invisibile al documento PDF e lo utilizza per la firma. Diamo un'occhiata a come aggiungere e personalizzare i campi firma in PDF.

Firma un documento PDF con un'immagine della firma scritta a mano

Spesso è necessario aggiungere un'immagine della firma scritta a mano al PDF 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.AddImage("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 della firma. Per ulteriori dettagli, consulta gli esempi di classe PdfSignatureAppearanceOptions e Firma un campo firma utilizzando uno stile personalizzato.

Blocca i campi del modulo PDF con un campo firma

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

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

// quando il campo "first" è 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 codice seguente mostra come bloccare tutti i campi del modulo dopo la firma:

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

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

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

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

Incorpora il timestamp in una firma digitale

Puoi aggiungere ulteriore sicurezza a una firma digitale incorporando un timestamp. A tale scopo, specificare l'URL dell'autorità timestamp come una delle opzioni di firma. Se richiesto, è inoltre possibile fornire un nome utente e una password.

Al momento della firma, la biblioteca riceverà un timestamp dalla Timestamp Authority e lo incorporerà nella firma.

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

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

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