using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
PDFsharp Signieren von PDF-Dokumenten digital vs. IronPDF (Beispielcode)
Jordi Bardia
19. Februar 2025
Teilen Sie:
Einführung
Eine digitale Signatur ist eine mathematische Technik, die die Authentizität und Integrität eines elektronischen Dokuments überprüft. Es wird als elektronische Signatur verwendet, um Dokumente in mehreren Gerichtsbarkeiten digital zu signieren und dabei hohe Sicherheit und rechtliche Gültigkeit zu gewährleisten.
Ein privater Schlüssel, der nur dem Unterzeichner bekannt ist, wird verwendet, um eine einzigartige digitale Signatur zu erstellen und sie mit dem Dokument zu verbinden, wenn es digital signiert wird. Der Name, die E-Mail-Adresse und andere persönliche Informationen des Unterzeichners sind in dieser Signatur enthalten. Die Authentizität eines digital signierten Dokuments kann nur bestätigt werden, wenn der Empfänger Zugriff auf den öffentlichen Schlüssel des Unterzeichners hat. Die Legitimität der Signatur wird durch Entschlüsselung mit öffentlichen Schlüsseln bestätigt.
In diesem Tutorial vergleichen wir, wie man digitale Signaturen zu PDF-Dokumenten hinzufügt mitPDFSharp undIronPDF. Digitale Signaturen sind entscheidend für die Überprüfung der Echtheit von Dokumenten, und PDF-Dateien sind ein beliebtes Format für solche Operationen.
PDFsharp ist eine bekannte Open-Source-Bibliothek zur Erstellung und Bearbeitung von PDFs, während IronPDF eine robuste .NET-PDF-Bibliothek ist, die ähnliche Funktionen mit zusätzlichen erweiterten Funktionalitäten bietet.
Dieser Leitfaden behandelt das Signieren eines PDF-Dokuments mit einem privaten Schlüssel und das Überprüfen der Signatur sowie Beispiele für Quellcodes für beide Bibliotheken.
Warum sind digitale Signaturen wichtig?
Digitale Signaturen gewährleisten die Integrität von Dokumenten und bieten robuste Sicherheit. Sie werden häufig für Verträge, Vereinbarungen und andere juristische Dokumente verwendet.
Wichtige Vorteile:
Sicherer und manipulationssicherer als herkömmliche Unterschriften.
Elektronisch verifiziert, wodurch manuelle Überprüfungsaufwände reduziert werden.
Ermöglichen Sie die Remote-Signatur von Dokumenten weltweit.
Bieten Sie mehr Sicherheit als herkömmliche Signaturen.
PDFsharp Übersicht
PDFSharp ist eine Open-Source C#-Bibliothek, die hauptsächlich für das Erstellen und Bearbeiten von PDF-Dokumenten entwickelt wurde. Es wird häufig für grundlegende PDF-Aufgaben verwendet, wie das Erstellen einfacher PDF-Dateien, das Bearbeiten vorhandener Dokumente und das Rendern von Grafiken. Allerdings ist die native Unterstützung für fortgeschrittene Funktionen wie digitale Signaturen begrenzt, und Entwickler müssen häufig auf Drittanbieterbibliotheken, wie zum Beispiel BouncyCastle, zurückgreifen, um solche Funktionalitäten zu integrieren. PDFsharp ist Open-Source und steht unter der MIT-Lizenz, was es zu einer guten Wahl für Projekte macht, bei denen Kosten und Flexibilität Priorität haben.
Wesentliche Merkmale
Open-Source und kostenlos unter der MIT-Lizenz.
Grundlegende PDF-Erstellung und -Bearbeitung.
Kann mit externen Bibliotheken wie BouncyCastle für digitale Signaturen erweitert werden.
Fehlt eine sofort einsatzbereite Unterstützung für erweiterte PDF-Funktionen wie HTML-zu-PDF-Konvertierung und komplexe Formularverarbeitung.
IronPDF Überblick
IronPDF ist eine robuste .NET PDF-Bibliothek, die eine einfache und leistungsstarke API zum Erstellen, Bearbeiten und Verarbeiten von PDFs bietet. Eine seiner herausragenden Funktionen ist die einfache Implementierung digitaler Signaturen durch Entwickler, die für die Überprüfung der Dokumentenauthentizität unerlässlich sind. Neben digitalen Signaturen unterstützt IronPDF erweiterte Funktionen wie HTML-zu-PDF-Konvertierung, Wasserzeichen und Formularbearbeitung. Es ist besonders wertvoll für Entwickler, die an kommerziellen Projekten arbeiten, bei denen schnelle Implementierung und robuste Funktionen eine Priorität sind.
Wesentliche Merkmale
Kommerzielle Lizenz mit bezahltem Support und eine kostenlose Testversion verfügbar.
Benutzerfreundliche API mit modernen Funktionen fürDigitales Signierenund Dokumentenmanipulation.
Beinhaltet integrierte Unterstützung für die Umwandlung von HTML in PDF-Format,FormularverarbeitungundPDF-Anmerkungen (wie Anhangsbemerkungen).
N nahtlose Integration mit erweiterten Funktionen wie Zeitstempelung, visuellen Signaturbildern undverschlüsselung.
Hinzufügen einer digitalen Signatur programmgesteuert mit PDFsharp
PDFsharp ist eine Open-Source-Bibliothek, die zur Erstellung und Bearbeitung von PDFs in C# entwickelt wurde. Allerdings, obwohl es Unterstützung zum Hinzufügen einer Signatur bietet, müssen Sie ein Drittanbieter-Tool wie BouncyCastle integrieren, um eine sichere, präzise digitale Signierung von PDF-Dokumenten zu gewährleisten.
Schritte zum Hinzufügen einer digitalen Signatur mit PDFsharp
Installieren Sie PDFsharp und BouncyCastle über NuGet.
Erstellen Sie ein digitales Zertifikat mit X509Certificate2.
Signieren Sie das PDF mit BouncyCastle.
Beispiel Code
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf.Signatures;
using BouncyCastleSigner;
using PdfSharp.Quality;
class Program
{
static void Main(string[] args)
{
var font = new XFont("Verdana", 10.0, XFontStyleEx.Regular);
var document = new PdfSharp.Pdf.PdfDocument();
var pdfPage = document.AddPage();
var xGraphics = XGraphics.FromPdfPage(pdfPage);
var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);
xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);
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()
};
var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);
document.Save("PdfSharpSignature.pdf");
}
static (X509Certificate2, X509Certificate2Collection) GetCertificate()
{
var certFolder = IOUtility.GetAssetsPath("C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security");
var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
var rawData = File.ReadAllBytes(pfxFile);
// This code is for demonstration only. Do not use password literals for real certificates in source code.
var certificatePassword = "Passw0rd";
var certificate = new X509Certificate2(rawData,
certificatePassword,
X509KeyStorageFlags.MachineKeySet
X509KeyStorageFlags.PersistKeySet
X509KeyStorageFlags.Exportable);
var collection = new X509Certificate2Collection();
collection.Import(rawData, certificatePassword,
X509KeyStorageFlags.MachineKeySet
X509KeyStorageFlags.PersistKeySet
X509KeyStorageFlags.Exportable);
return (certificate, collection);
}
}
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf.Signatures;
using BouncyCastleSigner;
using PdfSharp.Quality;
class Program
{
static void Main(string[] args)
{
var font = new XFont("Verdana", 10.0, XFontStyleEx.Regular);
var document = new PdfSharp.Pdf.PdfDocument();
var pdfPage = document.AddPage();
var xGraphics = XGraphics.FromPdfPage(pdfPage);
var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);
xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);
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()
};
var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);
document.Save("PdfSharpSignature.pdf");
}
static (X509Certificate2, X509Certificate2Collection) GetCertificate()
{
var certFolder = IOUtility.GetAssetsPath("C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security");
var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
var rawData = File.ReadAllBytes(pfxFile);
// This code is for demonstration only. Do not use password literals for real certificates in source code.
var certificatePassword = "Passw0rd";
var certificate = new X509Certificate2(rawData,
certificatePassword,
X509KeyStorageFlags.MachineKeySet
X509KeyStorageFlags.PersistKeySet
X509KeyStorageFlags.Exportable);
var collection = new X509Certificate2Collection();
collection.Import(rawData, certificatePassword,
X509KeyStorageFlags.MachineKeySet
X509KeyStorageFlags.PersistKeySet
X509KeyStorageFlags.Exportable);
return (certificate, collection);
}
}
Imports System.Security.Cryptography.X509Certificates
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf.Signatures
Imports BouncyCastleSigner
Imports PdfSharp.Quality
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim font = New XFont("Verdana", 10.0, XFontStyleEx.Regular)
Dim document = New PdfSharp.Pdf.PdfDocument()
Dim pdfPage = document.AddPage()
Dim xGraphics = XGraphics.FromPdfPage(pdfPage)
Dim layoutRectangle = New XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point)
xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter)
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()
}
Dim pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document, New PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options)
document.Save("PdfSharpSignature.pdf")
End Sub
Private Shared Function GetCertificate() As (X509Certificate2, X509Certificate2Collection)
Dim certFolder = IOUtility.GetAssetsPath("C:\Users\kyess\AppData\Roaming\Adobe\Acrobat\DC\Security")
Dim pfxFile = Path.Combine(certFolder, "IronSoftware.pfx")
Dim rawData = File.ReadAllBytes(pfxFile)
' This code is for demonstration only. Do not use password literals for real certificates in source code.
Dim certificatePassword = "Passw0rd"
Dim certificate = New X509Certificate2(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet X509KeyStorageFlags.PersistKeySet X509KeyStorageFlags.Exportable)
Dim collection = New X509Certificate2Collection()
collection.Import(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet X509KeyStorageFlags.PersistKeySet X509KeyStorageFlags.Exportable)
Return (certificate, collection)
End Function
End Class
Ausgabe
Wie Sie hier sehen können, obwohl es möglich war, ein digitales Signaturfeld zu erstellen und das Zertifikat auf unser neues Dokument anzuwenden, ist der Prozess umfangreich, manuell und im Vergleich zu Bibliotheken wie IronPDF nicht besonders effizient zu implementieren.
Hinzufügen einer digitalen Signatur mit IronPDF
IronPDF bietet Entwicklern eine prägnante Methode fürdigital signieren PDF-Dokumente.
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
public class Program
{
static void Main(string[] args)
{
// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "your-password");
// Add granular information
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 PDF document
sig.SignPdfFile("output.pdf");
}
}
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
public class Program
{
static void Main(string[] args)
{
// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "your-password");
// Add granular information
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 PDF document
sig.SignPdfFile("output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates
Public Class Program
Shared Sub Main(ByVal args() As String)
' Create PdfSignature object
Dim sig = New PdfSignature("IronSoftware.pfx", "your-password")
' Add granular information
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 PDF document
sig.SignPdfFile("output.pdf")
End Sub
End Class
Ausgabe
Dieser Code zeigt, wie man ein PDF-Dokument mit der PdfSignature-Klasse von IronPDF signiert. Das Programm erstellt zuerst ein PdfSignature-Objekt, indem es den Speicherort einer .pfx-Zertifikatsdatei und deren Passwort angibt. Dann werden weitere Signatur-Eigenschaften festgelegt, wie zum Beispiel der Hash-Algorithmus(SHA256), timestamp URL (http://timestamp.digicert.com)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 es als output.pdf zu speichern. Dieser Prozess gewährleistet die Integrität und Authentizität des PDFs, indem die digitale Signatur zusammen mit einem Zeitstempel und einem visuellen Bild eingebettet wird.
PDFSharp
Open-Source unter MIT-Lizenz.
Benötigt externe Bibliotheken(z.B. BouncyCastle)für erweiterte Funktionen wie das digitale Signieren.
IronPDF:
Kommerzielle Lizenzmit Preisen, die auf Entwicklern und Bereitstellungsinstanzen basieren.
Fazit: IronPDF vs PDFsharp für digitale Signaturen in C
Beim Vergleich von IronPDF und PDFsharp für das Hinzufügendigitale Signaturenin 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 die eine einfache, benutzerfreundliche API zur Anwendung digitaler Signaturen auf PDFs suchen. Es bietet moderne Funktionen. Nahtlose Integration mit der digitalen Signaturanwendung,HTML-zu-PDF-Konvertierungund andere PDF-Funktionen machen es zu einer hervorragenden Wahl für kommerzielle Projekte, die Benutzerfreundlichkeit und schnelle Implementierung priorisieren. Mit bezahltem Support und einer klaren kommerziellen Lizenzstruktur ist IronPDF gut geeignet für Unternehmen, die eine einfache und zuverlässige Lösung benötigen.
PDFsharp glänzt bei der grundlegenden Erstellung und Bearbeitung von PDFs, verfügt jedoch nicht über die erweiterten Funktionen und die direkte Unterstützung für digitale Signaturen, die IronPDF bietet. Obwohl PDFsharp quelloffen und frei 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 Drittanbieter-Bibliotheken einsetzen, um diese Funktionen zu handhaben.
Zusammengefasst,IronPDFist die beste Wahl für Entwickler, die eine einfache, schnelle Lösung für digitale Signaturen und verwandte PDF-Aufgaben suchen, insbesondere in kommerziellen Umgebungen. PDFsharpist besser für grundlegende PDF-Aufgaben geeignet, bietet aber nicht die gleiche Benutzerfreundlichkeit und den gleichen Funktionsumfang für digitale Signaturen, was es eher für einfachere Projekte oder solche mit zusätzlichen Anpassungsbedarfen geeignet macht.
Jordi beherrscht vor allem Python, C# und C++. Wenn er seine Fähigkeiten bei Iron Software nicht einsetzt, programmiert er Spiele. Durch seine Mitverantwortung für Produkttests, Produktentwicklung und Forschung trägt Jordi wesentlich zur kontinuierlichen Produktverbesserung bei. Die vielseitigen Erfahrungen, die er sammelt, bieten ihm immer wieder neue Herausforderungen, und er sagt, dass dies einer seiner Lieblingsaspekte bei Iron Software ist. Jordi wuchs in Miami, Florida, auf und studierte Informatik und Statistik an der University of Florida.
< PREVIOUS IronPDF vs. PDFsharp PDF-zu-Bild-Konvertierung (Code-Beispiel)
NÄCHSTES > PDFsharp Text aus PDF extrahieren vs. IronPDF (Beispiel)