Aktualisiert 24. Dezember 2024
Teilen Sie:

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. Um ein PDF-Dokument digital mit einem Zertifikat zu signieren, um sicherzustellen, dass es nicht manipuliert werden kann.

  2. Um ein grafisches handschriftliches Signaturbild aus einer Bilddatei zu einem bestehenden PDF hinzuzufügen.

  3. Um das Bild eines Zertifikats auf ein PDF aufzubringen.

  4. Um ein Signaturformularfeld zu einem PDF hinzuzufügen, das einige Betrachter zur Signierung auffordern 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, eine PDF-Datei mit einem digitalen Signaturzertifikat der Formate .pfx und .p12 zu signieren. In diesem How-To-Leitfaden werden Sie durch alle drei Hauptmethoden geführt, die verwendet werden, um PDF-Dokumente digital zu signieren:

Signing MethodDescription
SignSign a PDF with a PdfSignature object
SignWithFileSign PDF with a digital signature certificate(.pfx or .p12) on disk
SignWithStoreSigns the PDF with digital signature extracted from your computer's signature storage. Based on a thumbprint ID

Unterstützte Zertifikatsdateien für digitale Signaturen

Wir entsprechen offiziell dem X509Certificate2-Standard und unterstützen .pfx- und .p12-Signaturen. Wenn Ihre Signatur nicht direkt in den Signiermethoden von IronPDF angewendet werden kann, müssen Sie ein X509Certificate2-Zertifikat erstellen. Anleitungen dazu finden Sie in der Microsoft-Dokumentation.

Signieren: PdfSignatur aus X509Certificate2 erstellen

Die Signiermethoden von IronPDF akzeptieren X509Certificate2-Objekte mit X509KeyStorageFlags, die auf Exportable gesetzt sind.

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

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

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:

  • Setzen Sie die SignatureImage-Eigenschaft auf ein neues PdfSignatureImage-Objekt.
  • Verwenden Sie die Methode LoadSignatureImageFromFile, um ein Bild aus einer Datei zu laden. Die LoadSignatureImageFromFile unterstützt verschiedene Bildformate.
  • Verwenden Sie die Methode LoadSignatureImageFromStream, um das Bild aus dem 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));

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:

Keine Änderungen 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.

Wir werden dann SaveAsRevision aufrufen, um die Revision in der Historie zu speichern, und anschließend unser neues Dokument auf der Festplatte 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");

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 Document IterationCertificate ACertificate BCertificate CCertificate D
0 (first save)
1
2
3
(form field edits only)

(form field edits only)
4 (only form fields edited)
5
(no further edits allowed)

(no further edits allowed)

(no further edits allowed)

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ültigen Aktionen durchgeführt wurden, erhalten wir beim Ausführen der Signaturmethode von IronPDF true.

Zurück zu einer alten Revision

Um auf eine frühere Revision eines PDFs zurückzugehen, können Sie die GetRevision-Methode 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");

Signaturen entfernen

IronPDF verfügt über eine Methode RemoveSignatures, die alle Signaturen jeder Revision eines PDF-Dokuments entfernen wird. 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();

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. Dies wird ein bool mit dem Wert true zurückgeben, wenn alle gültig sind.

: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();

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, die als .png-Bild vorliegt, auf unser PDF anwenden. 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");

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 im Ziel-PDF-Dokument auf die Form-Eigenschaft zu und übergeben das neu erstellte Signaturobjekt 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");
Nicht signierte Signatur

Sie können mehr über IronPDF und die unterstützten Formulare im Artikel Wie man PDF-Formulare erstellt lesen.

Chaknith Bin

Chaknith Bin

Software-Ingenieur

 LinkedIn

Chaknith arbeitet an IronXL und IronBarcode. Er hat tiefgehende Expertise in C# und .NET und hilft, die Software zu verbessern und Kunden zu unterstützen. Seine Erkenntnisse aus Benutzerinteraktionen tragen zu besseren Produkten, Dokumentation und einem insgesamt besseren Erlebnis bei.