Digitales Signieren eines PDF-Dokuments

This article was translated from English: Does it need improvement?
Translated
View the article in English

Wichtige Disambiguierung: Signieren einer PDF-Datei

Entwickler fragen häufig, wie sie mit IronPDF programmatisch eine Signatur zu einem PDF-Dokument hinzufügen können. Im Allgemeinen bedeutet Signieren für verschiedene Entwickler unterschiedliche Dinge:

  1. Digitales Signieren eines PDF-Dokuments mit einem Zertifikat, um sicherzustellen, dass es nicht verfälscht werden kann.

  2. So fügen Sie einer vorhandenen PDF-Datei eine grafische handschriftliche Unterschrift aus einer Bilddatei hinzu.

  3. So stempeln Sie das Bild eines Zertifikats in eine PDF-Datei.

  4. So fügen Sie ein Unterschriftsformularfeld zu einer PDF-Datei hinzu, die von einigen Betrachtern zum Unterschreiben aufgefordert werden kann.

    Erste Schritte mit IronPDF

    Beginnen Sie noch heute mit der Verwendung von IronPDF in Ihrem Projekt mit einer kostenlosen Testversion.

    Erster Schritt:
    green arrow pointer


Signieren einer PDF-Datei mit einem digitalen Zertifikat

IronPDF unterstützt viele Möglichkeiten, ein PDF mit einem digitalen Signaturzertifikat der Formate .pfx und .p12 zu signieren. In diesem Leitfaden werden Sie durch alle drei Hauptmethoden geführt, die zum digitalen Signieren von PDF-Dokumenten verwendet werden:

Methode der UnterzeichnungBeschreibung
UnterschriftSignieren Sie eine PDF-Datei mit einer PdfSignatur-Objekt
SignWithFilePDF mit einem digitalen Signaturzertifikat (.pfx oder .p12) auf der Festplatte signieren
SignWithStoreSigniert die PDF-Datei mit einer digitalen Signatur, die aus dem Signaturspeicher Ihres Computers extrahiert wird. Basierend auf einer Daumenabdruck-ID

Unterstützte Zertifikatsdateien für digitale Signaturen

Wir halten uns offiziell an den X509Certificate2-Standard und unterstützen .pfx- und .p12-Signaturen. Wenn Ihre Signatur nicht direkt mit den Signiermethoden von IronPDF angewendet werden kann, müssen Sie ein "X509Certificate2"-Zertifikat mit den Anweisungen erstellen, die Sie auf der SeiteMicrosoft-Dokumentation.

Signieren: PdfSignatur aus X509Certificate2 erstellen

Die Signiermethoden von IronPDF akzeptieren "X509Certificate2"-Objekte, bei denen X509KeyStorageFlags auf Exportable gesetzt ist.

Bitte beachten Sie

  • IronPDF unterstützt nur X509KeyStorageFlags.Exportable. Bei einigen Zertifikaten ist KeyStorageFlags standardmäßig auf Exportable gesetzt. Der Versuch, andere KeyStorageFlags zu verwenden, führt zu einer Ausnahme => Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'The requested operation is not supported.'

:path=/static-assets/pdf/content-code-examples/how-to/signing-X509Certificate2-with-privatekey.cs
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature object
var sig = new PdfSignature(cert);

// Sign PDF document
pdf.Sign(sig);

pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates

Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")

' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)

' Create PdfSignature object
Private sig = New PdfSignature(cert)

' Sign PDF document
pdf.Sign(sig)

pdf.SaveAs("signed.pdf")
VB   C#

Unterschreiben: PdfSignature detaillierte Informationen hinzufügen

Während oder nach der Instanziierung von PdfSignature können dem PdfSignature-Objekt nützliche Informationen hinzugefügt werden, wie z. B. Datum, unterzeichnender Kontakt, Ort, Grund für die Unterzeichnung, Zeitstempel und das Hinzufügen eines Bildes als visuelles Erscheinungsbild im PDF-Dokument.

Tipps
Unterstützt Zeitstempel-Server, die SHA256 und SHA512 benötigen

:path=/static-assets/pdf/content-code-examples/how-to/signing-add-granular-information.cs
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");

pdf.SaveAs("signed.pdf");

// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "123456");

// Add granular information
sig.SignatureDate = new DateTime(2000, 12, 02);
sig.SigningContact = "IronSoftware";
sig.SigningLocation = "Chicago";
sig.SigningReason = "How to guide";
sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
sig.TimeStampUrl = "http://timestamp.digicert.com";
sig.SignatureImage = new PdfSignatureImage("IronSoftware.png", 0, new Rectangle(0, 600, 100, 100));

// Sign and save PDF document
sig.SignPdfFile("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Drawing
Imports System

Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")

pdf.SaveAs("signed.pdf")

' Create PdfSignature object
Dim sig = New PdfSignature("IronSoftware.pfx", "123456")

' Add granular information
sig.SignatureDate = New DateTime(2000, 12, 02)
sig.SigningContact = "IronSoftware"
sig.SigningLocation = "Chicago"
sig.SigningReason = "How to guide"
sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
sig.TimeStampUrl = "http://timestamp.digicert.com"
sig.SignatureImage = New PdfSignatureImage("IronSoftware.png", 0, New Rectangle(0, 600, 100, 100))

' Sign and save PDF document
sig.SignPdfFile("signed.pdf")
VB   C#

Demonstration

Möglicherweise sehen Sie ein Ausrufezeichen oder ein Warnzeichen anstelle eines Häkchens. Dies geschieht, weil Adobe die Authentizität und Integrität des Dokuments nicht bestätigen kann, da das Zertifikat nicht vorhanden ist. Um das Häkchen zu erhalten, fügen Sie bitte das Zertifikat zu Adobe hinzu und öffnen Sie das Dokument erneut.

Verschiedene Möglichkeiten zum Hinzufügen von Bildern

Ein Bild kann auf viele Arten einbezogen werden:

  • Die Eigenschaft SignatureImage auf ein neues PdfSignatureImage-Objekt setzen.
  • Verwenden Sie die Methode LoadSignatureImageFromFile, um ein Bild aus einer Datei zu laden. Die LoadSignatureImageFromFile-Methode unterstützt verschiedene Bildformate.
  • Verwenden Sie die Methode "LoadSignatureImageFromStream", um ein Bild aus einem Stream zu laden. Der Bildstrom kann aus anderen Bibliotheken erzeugt werden, solange er die Formate TGA, PBM, TIFF, BMP, GIF, PNG, JPEG, Webp hat.
:path=/static-assets/pdf/content-code-examples/how-to/signing-add-image.cs
using IronPdf.Signing;
using IronSoftware.Drawing;

// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "123456");

// Add image by property
sig.SignatureImage = new PdfSignatureImage("IronSoftware.png", 0, new Rectangle(0, 600, 100, 100));

// Add image by LoadSignatureImageFromFile method
sig.LoadSignatureImageFromFile("IronSoftware.png", 0, new Rectangle(0, 600, 100, 100));

// Import image using IronSoftware.Drawing
AnyBitmap image = AnyBitmap.FromFile("IronSoftware.png");

sig.LoadSignatureImageFromStream(image.ToStream(), 0, new Rectangle(0, 600, 100, 100));
Imports IronPdf.Signing
Imports IronSoftware.Drawing

' Create PdfSignature object
Private sig = New PdfSignature("IronSoftware.pfx", "123456")

' Add image by property
sig.SignatureImage = New PdfSignatureImage("IronSoftware.png", 0, New Rectangle(0, 600, 100, 100))

' Add image by LoadSignatureImageFromFile method
sig.LoadSignatureImageFromFile("IronSoftware.png", 0, New Rectangle(0, 600, 100, 100))

' Import image using IronSoftware.Drawing
Dim image As AnyBitmap = AnyBitmap.FromFile("IronSoftware.png")

sig.LoadSignatureImageFromStream(image.ToStream(), 0, New Rectangle(0, 600, 100, 100))
VB   C#

Unterschriftsberechtigungen

Sie können ausdrücklich Bedingungen angeben, unter denen Ihr Zertifikat gültig bleibt. Wenn Sie möchten, dass Ihre Unterschrift bei jeder Änderung ungültig wird, oder nur Änderungen an Formularfeldern zulassen, usw., verwenden Sie bitte die folgende Tabelle, um die Optionen zu sehen:

PdfDocument.SignaturePermissionsDefinition
NoChangesAllowedEs sind keine Änderungen erlaubt
FormFillingAllowedÄndern von Formularfeldwerten erlaubt
FormFillingAndAnnotationsAllowedÄndern von Formularfeldwerten und Ändern von Anmerkungen erlaubt

Dieser Parameter ist optional und wenn er nicht gesetzt wird, wird eine Signatur angewendet, die eine bestimmte Revision beglaubigt und nicht ungültig gemacht werden kann.

Speichern und Signieren einer PDF-Revisionswiederholung

Im folgenden Beispiel öffnen wir eine PDF-Datei, nehmen verschiedene Bearbeitungen vor und signieren sie, bevor wir sie speichern. Für die Unterschriftsberechtigung werden wir nur das Ausfüllen von Formularen als zukünftige Bearbeitung zulassen; andernfalls wird die Signatur durch eine andere Bearbeitung ungültig.

Dann rufen wir SaveAsRevision auf, um die Revision in der Historie zu speichern und dann unser neues Dokument auf der Festplatte zu speichern.

:path=/static-assets/pdf/content-code-examples/how-to/signing-revision.cs
using IronPdf;
using IronPdf.Rendering;

// Import PDF and enable TrackChanges
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf", TrackChanges: ChangeTrackingModes.EnableChangeTracking);
// ... various edits ...
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, IronPdf.Signing.SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed);

PdfDocument pdfWithRevision = pdf.SaveAsRevision();

pdfWithRevision.SaveAs("annual_census_2.pdf");
Imports IronPdf
Imports IronPdf.Rendering

' Import PDF and enable TrackChanges
Private pdf As PdfDocument = PdfDocument.FromFile("annual_census.pdf", TrackChanges:= ChangeTrackingModes.EnableChangeTracking)
' ... various edits ...
pdf.SignWithFile("/assets/IronSignature.p12", "password", Nothing, IronPdf.Signing.SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed)

Dim pdfWithRevision As PdfDocument = pdf.SaveAsRevision()

pdfWithRevision.SaveAs("annual_census_2.pdf")
VB   C#

Verständnis des inkrementellen Speicherns für Signaturen

Während einige Viewer wie Chrome-Browser nur eine Version anzeigen, haben PDF-Dateien die Möglichkeit, frühere Versionen des Dokuments zu speichern, ähnlich wie ein Git-Commit-Verlauf. Sie sehen dies in fortgeschritteneren PDF-Viewern wie Adobe Acrobat.

Beim Umgang mit PDF-Signaturen ist es wichtig, dies zu wissen, da sich das Signieren einer PDF-Datei auf die aktuelle Iteration der Datei bezieht. Ihre PDF-Datei enthält möglicherweise Signaturen für ältere Versionen oder einige nicht signierte Versionen. Wir können uns ein Beispiel wie folgt vorstellen:

PDF-Dokument IterationZertifikat AZertifikat BZertifikat CZertifikat D
(erste Speicherung)

(nur für die Bearbeitung von Formularfeldern)

(nur für die Bearbeitung von Formularfeldern)
(nur bearbeitete Formularfelder)

(keine weiteren Bearbeitungen erlaubt)

(keine weiteren Bearbeitungen erlaubt)

(keine weiteren Bearbeitungen erlaubt)

Oben haben wir Dokumente, die 6 verschiedene Iterationen durchlaufen haben. Dieses Dokument wird möglicherweise in verschiedenen Abteilungen eines Unternehmens zur Genehmigung weitergereicht, bis es in Iteration 3 fertiggestellt wird. In dieser Iteration haben sowohl Person A als auch Person B das Dokument mit der Berechtigung "Nur Formularfeldbearbeitungen" unterzeichnet. Das bedeutet, dass das Ausfüllen von Formularfeldern im PDF-Dokument erlaubt ist, aber jede andere Änderung des Dokuments macht ihre Unterschrift ungültig.

Im obigen Beispiel können wir davon ausgehen, dass Person C das Formular ausgefüllt und an Person A, B und D zurückgeschickt hat, die alle das Dokument ein letztes Mal mit der Erlaubnis "Keine Änderungen erlaubt" unterzeichnet haben. Da in diesem Dokument keine ungültig machenden Maßnahmen ergriffen wurden, erhalten wir bei der Ausführung der Signaturmethode von IronPDF true.

Zurück zu einer alten Revision

Um zu einer früheren Version einer PDF-Datei zurückzukehren, können Sie die Methode GetRevision verwenden. Dadurch werden alle seit dieser Revision vorgenommenen Änderungen, einschließlich neuerer Signaturen, vergessen. Verwenden Sie dazu:

:path=/static-assets/pdf/content-code-examples/how-to/signing-revert-revision.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("report.pdf");

int versions = pdf.RevisionCount; // total revisions

PdfDocument rolledBackPdf = pdf.GetRevision(2);
rolledBackPdf.SaveAs("report-draft.pdf");
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("report.pdf")

Private versions As Integer = pdf.RevisionCount ' total revisions

Private rolledBackPdf As PdfDocument = pdf.GetRevision(2)
rolledBackPdf.SaveAs("report-draft.pdf")
VB   C#

Signaturen entfernen

IronPDF verfügt über eine Methode RemoveSignatures, die jede Signatur jeder Revision eines PDF-Dokuments entfernt. Die Verwendung ist wie folgt:

:path=/static-assets/pdf/content-code-examples/how-to/signing-remove-signature.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("invoice.pdf");
pdf.RemoveSignatures();
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("invoice.pdf")
pdf.RemoveSignatures()
VB   C#

Alle Signaturen in einer PDF-Datei prüfen

Der Aufruf der Methode verify signatures für ein PDF-Dokument prüft alle Signaturen aus allen Dokument-Iterationen und stellt sicher, dass sie alle noch gültig sind. Wenn sie alle gültig sind, wird ein "bool" von "wahr" zurückgegeben.

:path=/static-assets/pdf/content-code-examples/how-to/signing-verify-signatures.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
bool isValid = pdf.VerifyPdfSignatures();
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("annual_census.pdf")
Private isValid As Boolean = pdf.VerifyPdfSignatures()
VB   C#

Eine Signatur auf eine PDF-Datei stempeln

Zunächst werde ich mit einer PDF-Datei beginnen, die ich unterschreiben möchte. Ich werde diese Beispielrechnung verwenden:

Wir werden eine handschriftliche Unterschrift in Form eines "png"-Bildes auf unsere PDF-Datei aufbringen. Dies kann eine handschriftliche Unterschrift oder das Bild sein, das bei der Erstellung einer Zertifikatsdatei verwendet wurde. Dies ist die Beispielsignatur, die wir verwenden werden:

Signature related to Eine Signatur auf eine PDF-Datei stempeln

Code

Dazu werden wir den folgenden Code verwenden, um die handschriftliche Unterschrift als Wasserzeichen in die PDF-Datei zu stempeln:

:path=/static-assets/pdf/content-code-examples/how-to/signing-handwritten.cs
using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("invoice.pdf");

pdf.ApplyWatermark("<img src='signature.png'/>", 90, VerticalAlignment.Bottom, HorizontalAlignment.Right);

pdf.SaveAs("official_invoice.pdf");
Imports IronPdf
Imports IronPdf.Editing

Private pdf = PdfDocument.FromFile("invoice.pdf")

pdf.ApplyWatermark("<img src='signature.png'/>", 90, VerticalAlignment.Bottom, HorizontalAlignment.Right)

pdf.SaveAs("official_invoice.pdf")
VB   C#

Ausgabe Ergebnis

Nachdem dieser Code ausgeführt wurde, haben wir diese Ausgabedatei, die unten rechts unsere Signatur trägt:


Hinzufügen eines unsignierten Unterschriftsfeldes zu einer PDF-Datei

Um ein unsigniertes oder leeres Signaturfeld hinzuzufügen, müssen Sie zunächst das Signaturfeld erstellen, indem Sie das Signaturobjekt instanziieren. Als Nächstes greifen Sie bei dem Ziel-PDF-Dokument auf die Form-Eigenschaft zu und übergeben das neu erstellte Signatur-Objekt an die Add-Methode. Schließlich exportieren Sie das PDF mit dem leeren Signaturformular.

:path=/static-assets/pdf/content-code-examples/how-to/signing-unsigned-signature.cs
using IronPdf;
using IronSoftware.Forms;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>testing</h1>");

// Configure required parameters
string name = "cert";
uint pageIndex = 0;
double x = 100;
double y = 600;
double width = 300;
double height = 100;

// Create signature
SignatureFormField signature = new SignatureFormField(name, pageIndex, x, y, width, height);

// Add signature
pdf.Form.Add(signature);

pdf.SaveAs("signature.pdf");
Imports IronPdf
Imports IronSoftware.Forms

Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>testing</h1>")

' Configure required parameters
Private name As String = "cert"
Private pageIndex As UInteger = 0
Private x As Double = 100
Private y As Double = 600
Private width As Double = 300
Private height As Double = 100

' Create signature
Private signature As New SignatureFormField(name, pageIndex, x, y, width, height)

' Add signature
pdf.Form.Add(signature)

pdf.SaveAs("signature.pdf")
VB   C#
Nicht signierte Signatur

Weitere Informationen über IronPDF und die unterstützten Formulare finden Sie in derWie man PDF-Formulare erstellt artikel.