Diese Seite kann automatisch übersetzten Text enthalten.

Signieren Sie PDF-Dokumente in C# und VB.NET

Digitale Signaturen werden verwendet, um die Identität eines Benutzers und den Inhalt des PDF-Dokuments zu authentifizieren. Mit Signaturen kann nachgewiesen werden, dass das PDF-Dokument:

  • Wurde seit der Unterzeichnung nicht geändert.
  • Wurde von einer bestimmten Person digital signiert.

Fügen Sie in C# und VB.NET eine digitale Signatur zu PDF hinzu

.NET-Bibliothek zum Signieren von PDF-Dokumenten

Verwenden Sie Docotic.Pdf-Bibliothek, um PDF-Dokumente in .NET Framework- und .NET Core-Anwendungen zu signieren. Holen Sie sich die Bibliothek und einen kostenlosen zeitlich begrenzten Lizenzschlüssel auf der Laden Sie die C# .NET PDF-Bibliothek herunter-Seite.

Docotic.Pdf-Bibliothek 9.5.17615-dev Regressionstests 14,813 bestanden NuGet-Downloads insgesamt 4,924,084

Docotic.Pdf kann digitale Signaturen mit verschiedenen Digest-Algorithmen (SHA-1, SHA-256, SHA-384, SHA-512, RIPEMD-160) und verschiedenen Signaturformaten (adbe.pkcs7.scribed oder ETSI.CAdES.scribed) erstellen. Die Bibliothek kann auch PDF-Signaturen überprüfen.

Fügen Sie in C# eine digitale Signatur zu PDF hinzu

Zum Signieren eines PDF-Dokuments benötigen Sie ein digitales PKCS#12-Zertifikat (.pfx- oder .p12-Datei), das von einer gültigen Zertifizierungsstelle (CA) ausgestellt wurde. Hier ist das grundlegende Beispiel, das zeigt, wie man ein PDF-Dokument in C# signiert:

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");
}

Ersetzen Sie „your_cert.p12“ und „your_cert_password“ durch Ihre eigene .p12- oder .pfx-Zertifikatdatei und Ihr eigenes Passwort. Auf GitHub können Sie die vollständigen Beispiele für PDF-Dokument signieren in C# und VB.NET herunterladen und ausprobieren.

Es gibt Fälle, in denen Sie ein bereits unterzeichnetes Dokument unterschreiben müssen. Oder mehrere Personen sollen nacheinander ein Formular unterschreiben. Auch das ist möglich. Die Schritte sind größtenteils gleich. Stellen Sie einfach sicher, dass Sie schrittweise unterschreiben und speichern. Inkrementelle Aktualisierungen machen digitale Signaturen nicht ungültig, wenn Sie nur zulässige Änderungen anwenden.

Für diese Fälle gibt es Beispiele für Ein bereits signiertes PDF-Dokument signieren und Ein PDF-Formular von mehreren Personen signieren in C# und VB.NET.

Der obige Code fügt dem PDF-Dokument implizit ein unsichtbares Signaturfeld hinzu und verwendet es zum Signieren. Sehen wir uns an, wie Sie Signaturfelder in PDF hinzufügen und anpassen.

Unterschreiben Sie ein PDF-Dokument mit einem handschriftlichen Signaturbild

Neben der digitalen Signatur müssen Sie häufig auch ein handschriftliches Signaturbild zu PDF hinzufügen. Dieses Beispiel zeigt, wie man in C# eine digitale Signatur mit einem zugehörigen Bild hinzufügt:

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");
}

Dieser Code fügt ein Signaturfeld hinzu, verknüpft das Feld mit Signaturoptionen und passt das Erscheinungsbild des Felds an. Sie können Text, Bild oder beides in Signaturfeldern anzeigen. Weitere Einzelheiten finden Sie in den Beispielen PdfSignatureAppearanceOptions-Klasse und Ein Signaturfeld mit einem benutzerdefinierten Stil signieren.

Sperren Sie PDF-Formularfelder mit einem Signaturfeld

Mit einem Signaturfeld können PDF-Formularfelder nach dem Signieren gesperrt werden. Dieses Beispiel zeigt, wie bestimmte Formularfelder nach der Anmeldung in C# gesperrt werden:

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

// Wenn das Feld first signiert ist, werden Felder mit den Namen „some_text_field“
// und „some_checkbox“ für die Bearbeitung gesperrt
first.Lock = PdfSignatureFieldLock.CreateLockFields("some_text_field", "some_checkbox");

Und der folgende Code zeigt, wie man alle Formularfelder nach dem Signieren sperrt:

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

// Wenn das Feld second signiert ist, werden alle Felder für die Bearbeitung gesperrt
second.Lock = PdfSignatureFieldLock.CreateLockAll();

Sie können auch alle Formularfelder im PDF-Dokument mit Ausnahme der spezifischen Felder sperren. Verwenden Sie dazu die PdfSignatureFieldLock.CreateLockAllExceptFields-Methode.

Laden Sie die vollständigen Beispiele zum Signieren eines Signaturfelds mit einer Sperre in C# und VB.NET von GitHub herunter und probieren Sie sie aus.

Zeitstempel in eine digitale Signatur einbetten

Sie können einer digitalen Signatur zusätzliche Sicherheit verleihen, indem Sie einen Zeitstempel einbetten. Geben Sie dazu die URL der Timestamp Authority als eine der Signaturoptionen an. Bei Bedarf können Sie auch einen Benutzernamen und ein Passwort angeben.

Beim Signieren erhält die Bibliothek einen Zeitstempel von der Timestamp Authority und betten diesen in die Signatur ein.

Aus Kompatibilitätsgründen empfehlen wir die Verwendung eines der SHA-Digest-Algorithmen für zeitgestempelte Signaturen.

// Ersetzen Sie die folgende Test-URL durch Ihre Timestamp Authority-URL
options.Timestamp.AuthorityUrl = new Uri("http://tsa.starfieldtech.com/");

// Geben Sie Benutzernamen und Passwort an, wenn Ihre Timestamp Authority eine Authentifizierung erfordert
options.Timestamp.Username = null;
options.Timestamp.Password = null;