Digitales Signieren eines PDF-Dokuments
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:
So stempeln Sie das Bild eines Zertifikats in eine PDF-Datei.
- 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.
Signieren einer PDF-Datei in C#
- Installieren Sie die IronPDF-Bibliothek zum Signieren von PDF-Dokumenten
- Detaillierte Angaben hinzufügen und PDF von
X509Zertifikat2
- Hinzufügen eines visuellen Bildes zur Darstellung der digitalen Signatur auf verschiedene Weise
- Eine handschriftliche Unterschrift in eine PDF-Datei stempeln
- Hinzufügen eines Unterschriftsformularfeldes in C#
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 Unterzeichnung | Beschreibung |
---|---|
Unterschrift | Signieren Sie eine PDF-Datei mit einer PdfSignatur-Objekt |
SignWithFile | PDF mit einem digitalen Signaturzertifikat (.pfx oder .p12) auf der Festplatte signieren |
SignWithStore | Signiert 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")
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
: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")
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))
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.SignaturePermissions | Definition |
---|---|
NoChangesAllowed | Es 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")
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 Iteration | Zertifikat A | Zertifikat B | Zertifikat C | Zertifikat 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")
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()
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()
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:
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")
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")
Weitere Informationen über IronPDF und die unterstützten Formulare finden Sie in derWie man PDF-Formulare erstellt artikel.