Zum Fußzeileninhalt springen
PRODUKTVERGLEICHE

PDFsharp PDF-Dokumente digital signieren vs IronPDF (Code-Beispiel)

Eine digitale Signatur ist eine mathematische Technik, die die Authentizität und Integrität eines elektronischen Dokuments überprüft. Sie dient als elektronische Signatur, um Dokumente in mehreren Gerichtsbarkeiten digital zu signieren und so eine hohe Sicherheit und rechtliche Gültigkeit zu gewährleisten.

Digitale Signaturen werden mit einem privaten Schlüssel erstellt, der nur dem Unterzeichner bekannt ist. Dieser private Schlüssel stellt eine eindeutige digitale Signatur her, die mit dem Dokument verknüpft ist, wenn es signiert wird. Die Signatur enthält den Namen, die E-Mail-Adresse und andere persönliche Informationen des Unterzeichners. Um die Authentizität eines digital signierten Dokuments zu bestätigen, benötigt der Empfänger Zugriff auf den öffentlichen Schlüssel des Unterzeichners. Die Legitimität der Signatur wird durch Entschlüsselung mit dem öffentlichen Schlüssel überprüft.

In diesem Tutorial vergleichen wir, wie digitale Signaturen zu PDF-Dokumenten mit PDFsharp und IronPDF hinzugefügt werden. Digitale Signaturen sind essentiell, um die Authentizität von Dokumenten zu überprüfen, und PDF-Dateien sind ein beliebtes Format für solche Vorgänge.

PDFsharp ist eine bekannte Open-Source-Bibliothek zur Erstellung und Bearbeitung von PDF-Dateien, während IronPDF eine robuste .NET-PDF-Bibliothek ist, die ähnliche Funktionen mit zusätzlichen fortgeschrittenen Funktionalitäten bietet.

Diese Anleitung umfasst das Signieren eines PDF-Dokuments mit einem privaten Schlüssel und die Überprüfung der Signatur, zusammen mit Beispielquellcode für beide Bibliotheken.

Warum sind digitale Signaturen wichtig?

Digitale Signaturen gewährleisten die Integrität von Dokumenten und bieten eine hohe Sicherheit. Sie werden häufig für Verträge, Vereinbarungen und andere rechtliche Dokumente verwendet.

Wichtige Vorteile:

  • Sicherer und manipulationssicherer als herkömmliche Signaturen.
  • Elektronisch verifiziert, wodurch der manuelle Verifikationsaufwand reduziert wird.
  • Ermöglichen das Remote-Signieren von Dokumenten weltweit.
  • Bieten eine höhere Sicherheit als herkömmliche Signaturen.

PDFsharp Überblick

PDFSharp ist eine Open-Source-C#-Bibliothek, die hauptsächlich für die Erstellung und Bearbeitung von PDF-Dokumenten entwickelt wurde. Sie wird häufig für grundlegende PDF-Aufgaben verwendet, wie das Erstellen einfacher PDF-Dateien, Bearbeiten bestehender Dokumente und Rendern von Grafiken. Ihre native Unterstützung für fortgeschrittene Funktionen wie digitale Signaturen ist jedoch begrenzt, und Entwickler müssen oft auf Drittanbieterbibliotheken wie BouncyCastle zurückgreifen, um solche Funktionen zu integrieren. PDFsharp ist Open-Source, unter der MIT-Lizenz, was es zu einer guten Wahl für Projekte macht, bei denen Kosten und Flexibilität Priorität haben.

Hauptmerkmale

  • Open-Source und kostenlos unter der MIT-Lizenz.
  • Grundlegende PDF-Erstellung und -Manipulation.
  • Kann mit externen Bibliotheken wie BouncyCastle für digitale Signaturen erweitert werden.
  • Fehlt die native Unterstützung für fortgeschrittene PDF-Funktionen wie HTML-zu-PDF-Konvertierung und komplexe Formularverarbeitung.

IronPDF Überblick

PDFsharp Sign PDF documents Digitally vs IronPDF (Code Example): Figure 1 - image.png

IronPDF ist eine robuste .NET-PDF-Bibliothek, die eine einfache und leistungsstarke API für die Erstellung, Bearbeitung und Manipulation von PDFs bietet. Eine ihrer herausragenden Funktionen ist die leichte Implementierung digitaler Signaturen durch Entwickler, die wesentlich für die Überprüfung der Dokumentenautentizität sind. Zusätzlich zu digitalen Signaturen unterstützt IronPDF fortgeschrittene Funktionalitäten wie HTML-zu-PDF-Konvertierung, Wasserzeichen und Formularverarbeitung. Es ist besonders wertvoll für Entwickler, die an kommerziellen Projekten arbeiten, bei denen schnelle Implementierung und robuste Funktionen Priorität haben.

Hauptmerkmale

  • Kommerzielle Lizenz mit bezahltem Support und eine kostenlose Testversion verfügbar.
  • Einfach zu bedienende API mit modernen Funktionen für digitale Signaturen und Dokumentenmanipulation.
  • Enthält integrierte Unterstützung für die Konvertierung von HTML-zu-PDF-Formaten, Formularverarbeitung und PDF-Anmerkungen (wie Anhangsanmerkungen).
  • Nahtlose Integration mit fortgeschrittenen Funktionen wie Zeitstempelung, visuellen Signaturbildern und Verschlüsselung.

Programmgesteuertes Hinzufügen einer digitalen Signatur mit PDFsharp

PDFsharp ist eine Open-Source-Bibliothek, die für die Erstellung und Bearbeitung von PDFs in C# entwickelt wurde. Zwar bietet sie Unterstützung für das Hinzufügen einer Signatur, aber Sie müssen ein Drittanbietertool wie BouncyCastle integrieren, um eine sichere, präzise digitale Signierung von PDF-Dokumenten sicherzustellen.

Schritte zum Hinzufügen einer digitalen Signatur mit PDFsharp

  1. Installieren Sie PDFsharp und BouncyCastle über NuGet.
  2. Erstellen Sie ein digitales Zertifikat mit X509Certificate2.
  3. Signieren Sie das PDF mit BouncyCastle.

Beispielcode

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using BouncyCastleSigner; // Hypothetical namespace for illustration
// Ensure that you have the appropriate namespaces added

class Program
{
    static void Main(string[] args)
    {
        // Create a font for the appearance of the signature
        var font = new XFont("Verdana", 10.0, XFontStyle.Regular);

        // Create a new PDF document
        var document = new PdfDocument();
        var pdfPage = document.AddPage();

        // Prepare graphics for drawing on the PDF page
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);

        // Add some text to the page
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);

        // Define digital signature appearance options
        var options = new DigitalSignatureOptions
        {
            ContactInfo = "John Doe",
            Location = "Seattle",
            Reason = "License Agreement",
            Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
            AppearanceHandler = new SignatureAppearanceHandler()
        };

        // Sign the document using BouncyCastle signer
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
            new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);

        // Save the signed document
        document.Save("PdfSharpSignature.pdf");
    }

    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        // Locate the certificate file and read its data
        var certFolder = "C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security";
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);

        // Load the certificate using its password (example password)
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

        // Create and return the certificate collection
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using BouncyCastleSigner; // Hypothetical namespace for illustration
// Ensure that you have the appropriate namespaces added

class Program
{
    static void Main(string[] args)
    {
        // Create a font for the appearance of the signature
        var font = new XFont("Verdana", 10.0, XFontStyle.Regular);

        // Create a new PDF document
        var document = new PdfDocument();
        var pdfPage = document.AddPage();

        // Prepare graphics for drawing on the PDF page
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);

        // Add some text to the page
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);

        // Define digital signature appearance options
        var options = new DigitalSignatureOptions
        {
            ContactInfo = "John Doe",
            Location = "Seattle",
            Reason = "License Agreement",
            Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
            AppearanceHandler = new SignatureAppearanceHandler()
        };

        // Sign the document using BouncyCastle signer
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
            new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);

        // Save the signed document
        document.Save("PdfSharpSignature.pdf");
    }

    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        // Locate the certificate file and read its data
        var certFolder = "C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security";
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);

        // Load the certificate using its password (example password)
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

        // Create and return the certificate collection
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
Imports System
Imports System.IO
Imports System.Security.Cryptography.X509Certificates
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf
Imports BouncyCastleSigner ' Hypothetical namespace for illustration
' Ensure that you have the appropriate namespaces added

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a font for the appearance of the signature
		Dim font = New XFont("Verdana", 10.0, XFontStyle.Regular)

		' Create a new PDF document
		Dim document = New PdfDocument()
		Dim pdfPage = document.AddPage()

		' Prepare graphics for drawing on the PDF page
		Dim xGraphics = XGraphics.FromPdfPage(pdfPage)
		Dim layoutRectangle = New XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point)

		' Add some text to the page
		xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter)

		' Define digital signature appearance options
		Dim options = New DigitalSignatureOptions With {
			.ContactInfo = "John Doe",
			.Location = "Seattle",
			.Reason = "License Agreement",
			.Rectangle = New XRect(36.0, 700.0, 400.0, 50.0),
			.AppearanceHandler = New SignatureAppearanceHandler()
		}

		' Sign the document using BouncyCastle signer
		Dim pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document, New PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options)

		' Save the signed document
		document.Save("PdfSharpSignature.pdf")
	End Sub

	Private Shared Function GetCertificate() As (X509Certificate2, X509Certificate2Collection)
		' Locate the certificate file and read its data
		Dim certFolder = "C:\Users\kyess\AppData\Roaming\Adobe\Acrobat\DC\Security"
		Dim pfxFile = Path.Combine(certFolder, "IronSoftware.pfx")
		Dim rawData = File.ReadAllBytes(pfxFile)

		' Load the certificate using its password (example password)
		Dim certificatePassword = "Passw0rd"
		Dim certificate = New X509Certificate2(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)

		' Create and return the certificate collection
		Dim collection = New X509Certificate2Collection()
		collection.Import(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)
		Return (certificate, collection)
	End Function
End Class
$vbLabelText   $csharpLabel

Ausgabe

PDFsharp Sign PDF documents Digitally vs IronPDF (Code Example): Figure 2

Wie Sie hier sehen können, war es zwar möglich, ein digitales Signaturfeld zu erstellen und das Zertifikat auf unser neues Dokument anzuwenden, aber der Prozess ist umfangreich, manuell und nicht besonders effizient im Vergleich zu Bibliotheken wie IronPDF.

Hinzufügen einer digitalen Signatur mit IronPDF

IronPDF bietet Entwicklern eine prägnante Methode zum digitalen Signieren von PDF-Dokumenten.

using IronPdf;
using System.Security.Cryptography.X509Certificates;

public class Program
{
    static void Main(string[] args)
    {
        // Load the certificate with its password
        var sig = new PdfSignature("IronSoftware.pfx", "your-password");

        // Configure additional signature details
        sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
        sig.TimestampUrl = "http://timestamp.digicert.com";
        sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));

        // Sign and save the PDF document
        sig.SignPdfFile("output.pdf");
    }
}
using IronPdf;
using System.Security.Cryptography.X509Certificates;

public class Program
{
    static void Main(string[] args)
    {
        // Load the certificate with its password
        var sig = new PdfSignature("IronSoftware.pfx", "your-password");

        // Configure additional signature details
        sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
        sig.TimestampUrl = "http://timestamp.digicert.com";
        sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));

        // Sign and save the PDF document
        sig.SignPdfFile("output.pdf");
    }
}
Imports IronPdf
Imports System.Security.Cryptography.X509Certificates

Public Class Program
	Shared Sub Main(ByVal args() As String)
		' Load the certificate with its password
		Dim sig = New PdfSignature("IronSoftware.pfx", "your-password")

		' Configure additional signature details
		sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
		sig.TimestampUrl = "http://timestamp.digicert.com"
		sig.SignatureImage = New PdfSignatureImage("IronPdf.png", 0, New Rectangle(150, 100, 200, 200))

		' Sign and save the PDF document
		sig.SignPdfFile("output.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Ausgabe

PDFsharp Sign PDF documents Digitally vs IronPDF (Code Example): Figure 3

Dieser Code zeigt, wie ein PDF-Dokument unter Verwendung der PdfSignature-Klasse von IronPDF signiert wird. Das Programm erstellt zuerst ein PdfSignature-Objekt, wobei die Position einer .pfx-Zertifikatsdatei und deren Passwort angegeben werden. Zusätzlich werden weitere Signaturattribute festgelegt, wie der Hash-Algorithmus (SHA256), die Zeitstempel-URL und ein benutzerdefiniertes Bild für die Signatur (IronPdf.png).

Schließlich wird die Methode SignPdfFile aufgerufen, um die digitale Signatur auf das PDF-Dokument anzuwenden und als output.pdf zu speichern. Dieser Prozess stellt die Integrität und Authentizität des PDFs durch Einbetten der digitalen Signatur zusammen mit einem Zeitstempel und einem visuellen Bild sicher.

PDFSharp:

  • Open-Source unter der MIT-Lizenz.
  • Erfordert externe Bibliotheken (z.B. BouncyCastle) für fortgeschrittene Funktionen wie digitales Signieren.

IronPDF:

Schlussfolgerung: IronPDF vs. PDFsharp für digitale Signaturen in C#

Beim Vergleich von IronPDF und PDFsharp für das Hinzufügen von digitalen Signaturen zu PDFs in C# bieten beide Bibliotheken je nach Projektanforderungen unterschiedliche Vorteile.

  • IronPDF ist ideal für Entwickler, sei es unabhängige freiberufliche Softwareentwickler oder Entwickler, die für ein Unternehmen arbeiten und eine einfache, leicht zu verwendende API zum Anwenden digitaler Signaturen auf PDFs suchen, und bietet moderne Funktionen. Die nahtlose Integration mit der Anwendung digitaler Signaturen, HTML-zu-PDF-Konvertierung und anderen PDF-Funktionalitäten macht es zu einer ausgezeichneten Wahl für kommerzielle Projekte, die Benutzerfreundlichkeit und schnelle Implementierung priorisieren. Mit bezahltem Support und einer klaren kommerziellen Lizenzstruktur eignet sich IronPDF gut für Unternehmen, die eine unkomplizierte, zuverlässige Lösung benötigen.

  • PDFsharp glänzt bei der grundlegenden PDF-Erstellung und -Bearbeitung, fehlt jedoch die fortgeschrittenen Funktionen und die direkte Unterstützung für digitale Signaturen, die IronPDF bietet. Obwohl PDFsharp Open-Source und kostenlos nutzbar ist, ist seine API weniger intuitiv für die Arbeit mit digitalen Signaturen im Vergleich zu IronPDF, und Entwickler müssen möglicherweise zusätzliche Lösungen oder Drittanbieterbibliotheken nutzen, um diese Funktionen zu bewältigen.

Zusammenfassend ist IronPDF die beste Wahl für Entwickler, die nach einer einfachen, schnellen Lösung für digitale Signaturen und damit verbundenen PDF-Aufgaben suchen, insbesondere in kommerziellen Umgebungen. PDFsharp ist eher für grundlegende PDF-Aufgaben geeignet, verfügt jedoch nicht über dieselbe Benutzerfreundlichkeit und Funktionsumfang für digitale Signaturen und ist daher besser für einfachere Projekte oder solche mit zusätzlichen Anpassungsbedarf geeignet.

pDFsharp und BouncyCastle sind eingetragene Warenzeichen ihrer jeweiligen Eigentümer. Diese Seite ist nicht mit PDFsharp oder BouncyCastle verbunden, unterstützt oder gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Die Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich verfügbare Informationen zum Zeitpunkt des Schreibens wider.)}]