wkhtmltopdf vs IronPDF: Leitfaden für einen technischen Vergleich
Wenn .NET-Entwickler HTML in PDF konvertieren müssen, ist wkhtmltopdf aufgrund seines Open-Source-Charakters und seiner Einfachheit in der Befehlszeile seit jeher eine beliebte Wahl. Die Einstellung des Projekts und kritische Sicherheitslücken haben jedoch viele Teams dazu veranlasst, moderne Alternativen zu prüfen. In diesem technischen Vergleich wird wkhtmltopdf nebenIronPDFuntersucht, um Architekten und Entwicklern zu helfen, die signifikanten Unterschiede in Bezug auf Sicherheit, Rendering-Fähigkeiten und langfristige Lebensfähigkeit zu verstehen.
Verstehen Sie wkhtmltopdf
wkhtmltopdf ist ein Tool zur Konvertierung von HTML in PDF-Dokumente, das direkt von der Kommandozeile aus arbeitet und Qt WebKit zur Verarbeitung von HTML-Inhalten nutzt. In den Jahren ihrer aktiven Entwicklung hat die Bibliothek aufgrund ihrer kostenlosen LGPLv3-Lizenzierung und ihrer plattformübergreifenden Verfügbarkeit an Popularität gewonnen.
Allerdings stellt wkhtmltopdf jetzt kritische Herausforderungen, die nicht ignoriert werden können:
- Projektabbruch: Die letzten bedeutsamen Software-Updates fanden um 2016-2017 statt
- Kritische Sicherheitslücke: CVE-2022-35583 (CVSS 9.8 Schweregrad) ist eine SSRF-Schwachstelle, die noch nicht behoben wurde
- Veraltete Rendering Engine: Setzt auf Qt WebKit von 2015
- Eingeschränkte Unterstützung für modernes Web: Keine CSS-Grid-Unterstützung, fehlerhafte Flexbox-Implementierung, kein ES6+ JavaScript
- Stagnation des Ökosystems: Alle .NET-Wrapper-Bibliotheken (DinkToPdf, Rotativa, TuesPechkin, WkHtmlToPdf-DotNet, NReco.PdfGenerator) erben diese Schwachstellen
Die Sicherheitskrise CVE-2022-35583
Die Server-Side Request Forgery (SSRF)-Schwachstelle in wkhtmltopdf ermöglicht es Angreifern,:
- Zugriff auf interne Dienste: Erreichen Sie interne APIs, Datenbanken und Dienste hinter Firewalls
- Anmeldedaten stehlen: Zugriff auf Cloud-Metadaten-Endpunkte (AWS, GCP, Azure), um IAM-Anmeldedaten zu stehlen
- Port Scanning: Scannen von internen Netzwerken innerhalb der Infrastruktur
- Datenexfiltration: Extrahieren sensibler Daten durch manipuliertes HTML/CSS
Der Angriffsvektor ist einfach: bösartiges HTML, das an einen PDF-Generator übermittelt wird:
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
Wenn wkhtmltopdf dieses HTML rendert, holt es diese URLs aus dem Netzwerkkontext des Servers und umgeht dabei Firewalls und Sicherheitskontrollen. Diese Schwachstelle wird nie gepatcht werden, da das Projekt offiziell aufgegeben wurde.
IronPDFverstehen
IronPDF stellt eine robuste Alternative dar, die die Unzulänglichkeiten von wkhtmltopdf behebt. Mit aktiver Wartung, regelmäßigen Updates und der Verwendung der aktuellen Chromium-Rendering-Engine bietet IronPDF sowohl Sicherheit als auch die Einhaltung moderner Webstandards.
Zu den wichtigsten Merkmalen gehören:
- Moderne Chromium-Engine: Verwendet die aktuelle Chromium-Rendering-Engine mit voller ES2024-JavaScript-Unterstützung
- Keine bekannten CVEs: Keine bekannten Sicherheitslücken
- Aktive Entwicklung: Regelmäßige Veröffentlichungen mit Sicherheitsupdates und Funktionsverbesserungen
- Komplette CSS-Unterstützung: Vollständige CSS-Grid-, Flexbox- und moderne Layout-Systeme
- Umfassende PDF-Funktionen: Digitale Signaturen, PDF/A-Konformität, PDF-Manipulationsmöglichkeiten
- Professioneller Support: Umfassende Dokumentation und spezielle Support-Kanäle
Funktionsvergleich
Die folgende Tabelle zeigt die grundlegenden Unterschiede zwischen wkhtmltopdf und IronPDF:
| Feature | wkhtmltopdf | IronPDF |
|---|---|---|
| Lizenzierung | LGPLv3 (Frei) | Kommerziell |
| Rendering Engine | Qt WebKit (2015) | Aktuelle Chromium-Engine |
| Sicherheitsstatus | CVE-2022-35583 KRITISCH (9.8) UNGEPATCHED | Keine bekannten CVEs |
| Letzte bedeutsame Aktualisierung | 2016-2017 | Aktive Entwicklung |
| CSS Grid | Nicht unterstützt | Unterstützt |
| Flexbox | Gebrochen | Unterstützt |
| ES6+ JavaScript | Nicht unterstützt | Unterstützt |
| Async/Await | Nicht unterstützt | Unterstützt |
| PDF-Bearbeitung | Nicht unterstützt | Unterstützt |
| Digitale Signaturen | Nicht unterstützt | Unterstützt |
| PDF/A-Konformität | Nicht unterstützt | Unterstützt |
| Professionelle Unterstützung | Keine (aufgegeben) | Kommerziell mit SLA |
| C#-Integration | Über Wrapper von Drittanbietern | Direkt, regelmäßig aktualisiert |
Betroffene Wrapper-Bibliotheken
Alle .NET-Wrapper für wkhtmltopdf erben die gleichen Schwachstellen:
| Wrapper-Bibliothek | Status | Sicherheitsrisiko |
|---|---|---|
| DinkToPdf | Aufgegeben | KRITISCH |
| Rotativa | Aufgegeben | KRITISCH |
| TuesPechkin | Aufgegeben | KRITISCH |
| WkHtmlToPdf-DotNet | Aufgegeben | KRITISCH |
| NReco.PdfGenerator | Verwendet wkhtmltopdf | KRITISCH |
Wenn Ihre Anwendung eine dieser Bibliotheken verwendet, ist sie anfällig für CVE-2022-35583.
Unterschiede in der API-Architektur
Die API-Muster zwischen wkhtmltopdf-Wrappern undIronPDFweisen erhebliche Unterschiede in Bezug auf Komplexität und Benutzerfreundlichkeit auf.
wkhtmltopdf Konfigurationsmuster
wkhtmltopdf-Wrapper erfordern die Erstellung von Dokumentobjekten mit verschachtelten Einstellungskonfigurationen:
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4
},
Objects = {
new ObjectSettings()
{
HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4
},
Objects = {
new ObjectSettings()
{
HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
' NuGet: Install-Package WkHtmlToPdf-DotNet
Imports WkHtmlToPdfDotNet
Imports WkHtmlToPdfDotNet.Contracts
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Class
Dieses Muster erfordert die Erstellung eines SynchronizedConvertermit PdfTools, die Konstruktion eines HtmlToPdfDocumentmit GlobalSettings und Objects Sammlungen und das manuelle Schreiben von Byte-Arrays in Dateien.
IronPDFVereinfachtes Muster
IronPDF verwendet einen schlanken Ansatz mit der Klasse ChromePdfRenderer:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Die Klasse ChromePdfRenderer beseitigt die verschachtelten Konfigurationsobjekte und liefert ein PdfDocument mit integrierten Speichermethoden. Eine umfassende Anleitung zur HTML-Konvertierung finden Sie im HTML to PDF tutorial.
URL zu PDF Konvertierung
Die Konvertierung von Webseiten in PDF zeigt den Komplexitätsunterschied zwischen den Ansätzen.
wkhtmltopdf Implementierung
wkhtmltopdf verwendet die Eigenschaft Page innerhalb von ObjectSettings, um URLs anzugeben:
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4
},
Objects = {
new ObjectSettings()
{
Page = "https://www.example.com"
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4
},
Objects = {
new ObjectSettings()
{
Page = "https://www.example.com"
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
' NuGet: Install-Package WkHtmlToPdf-DotNet
Imports WkHtmlToPdfDotNet
Imports WkHtmlToPdfDotNet.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter As New SynchronizedConverter(New PdfTools())
Dim doc As New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = {
New ObjectSettings() With {
.Page = "https://www.example.com"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End Module
IronPDFImplementierung
IronPDF bietet eine eigene RenderUrlAsPdf-Methode:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
Die RenderUrlAsPdf-Methode nutzt die Chromium-Engine, um Seiten mit vollständiger JavaScript-Ausführung und moderner CSS-Unterstützung zu rendern - Fähigkeiten, die durch die 2015er WebKit-Engine von IronPdf eingeschränkt sind.
Benutzerdefinierte PDF-Einstellungen
Die Konfiguration von Seitenabmessungen, Rändern und Ausrichtung zeigt die strukturellen Unterschiede zwischen den APIs.
wkhtmltopdf Benutzerdefinierte Einstellungen
wkhtmltopdf benötigt verschachtelte GlobalSettings mit MarginSettings Objekten:
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings()
{
Page = "input.html",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("custom-output.pdf", pdf);
}
}
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings()
{
Page = "input.html",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("custom-output.pdf", pdf);
}
}
' NuGet: Install-Package WkHtmlToPdf-DotNet
Imports WkHtmlToPdfDotNet
Imports WkHtmlToPdfDotNet.Contracts
Imports System.IO
Class Program
Shared Sub Main()
Dim converter As New SynchronizedConverter(New PdfTools())
Dim doc As New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Landscape,
.PaperSize = PaperKind.A4,
.Margins = New MarginSettings() With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
},
.Objects = {
New ObjectSettings() With {
.Page = "input.html",
.WebSettings = New WebSettings() With {.DefaultEncoding = "utf-8"}
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("custom-output.pdf", pdf)
End Sub
End Class
IronPDFBenutzerdefinierte Einstellungen
IronPDF verwendet RenderingOptions-Eigenschaften für die direkte Konfiguration:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("custom-output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("custom-output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Class Program
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 10
renderer.RenderingOptions.MarginRight = 10
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
pdf.SaveAs("custom-output.pdf")
End Sub
End Class
API-Mapping-Referenz
Teams, die eine Umstellung von wkhtmltopdf aufIronPDFerwägen, werden dieses Mapping hilfreich finden, um Konzeptäquivalenzen zu verstehen:
CLI-zu-C#-API-Zuordnung
| wkhtmltopdf CLI-Option | IronPDF-Äquivalent |
|---|---|
wkhtmltopdf input.html output.pdf |
renderer.RenderHtmlFileAsPdf() |
wkhtmltopdf URL Ausgabe.pdf |
renderer.RenderUrlAsPdf() |
--Seitengröße A4 |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
--Seitengröße Letter |
RenderingOptions.PaperSize = PdfPaperSize.Letter |
--Orientierung Landschaft |
RenderingOptions.PaperOrientation = Querformat |
--margin-top 10mm |
RenderingOptions.MarginTop = 10 |
--margin-bottom 10mm |
RenderingOptions.MarginBottom = 10 |
--margin-left 10mm |
RenderingOptions.MarginLeft = 10 |
--margin-right 10mm |
RenderingOptions.MarginRight = 10 |
--header-html header.html |
RenderingOptions.HtmlHeader |
--footer-html footer.html |
RenderingOptions.HtmlFooter |
--footer-center "[Seite]" |
{Seite} Platzhalter |
--footer-center "[toPage]" |
{Gesamtseiten} Platzhalter |
--javascript einschalten |
Standardmäßig aktiviert |
--javascript-verzögerung 500 |
RenderingOptions.WaitFor.RenderDelay = 500 |
--print-media-type |
RenderingOptions.CssMediaType = Print |
--dpi 300 |
RenderingOptions.Dpi = 300 |
--Graustufen |
RenderingOptions.GrayScale = true |
--zoom 0.8 |
RenderingOptions.Zoom = 80 |
C# Wrapper API Mapping
| wkhtmltopdf Wrapper | IronPDF |
|---|---|
SynchronizedConverter |
ChromePdfRenderer |
HtmlToPdfDocument |
RenderingOptions |
GlobalSettings.Out |
pdf.SaveAs() |
GlobalSettings.PaperSize |
RenderingOptions.PaperSize |
GlobalSettings.Orientation |
RenderingOptions.PaperOrientation |
GlobalSettings.Margins |
RenderingOptions.Margin* |
ObjektEinstellungen.Seite |
RenderHtmlFileAsPdf() |
ObjectSettings.HtmlContent |
RenderHtmlAsPdf() |
HeaderSettings.Center |
TextHeader.CenterText |
FooterSettings.Center |
TextFooter.CenterText |
converter.Convert(doc) |
renderer.RenderHtmlAsPdf() |
Platzhalter-Syntax-Zuordnung
| wkhtmltopdf Platzhalter | IronPDFPlatzhalter |
|---|---|
[Seite] |
{Seite} |
[bisSeite] |
{Gesamtseiten} |
[Datum] |
{Datum} |
[Zeit] |
{Zeit} |
[Titel] |
{html-title} |
[url] |
{url} |
Wenn Teams den Wechsel von wkhtmltopdf zuIronPDFerwägen
Es gibt mehrere Szenarien, die Entwicklerteams häufig dazu veranlassen,IronPDFals Alternative zu wkhtmltopdf zu prüfen:
Anforderungen an die Sicherheit
Organisationen, die Sicherheitsanforderungen erfüllen müssen (SOC 2, PCI DSS, HIPAA), können keine Anwendungen mit bekannten kritischen Schwachstellen akzeptieren. Der Schweregrad 9.8 von CVE-2022-35583 löst in den meisten Sicherheits-Frameworks sofortige Behebungsanforderungen aus.
Moderne CSS-Framework-Übernahme
Teams, die Bootstrap 5, Tailwind CSS oder benutzerdefinierte CSS-Grid-Layouts verwenden, stellen fest, dass wkhtmltopdf diese nicht korrekt darstellen kann. Der WebKit-Engine von 2015 fehlt die Unterstützung für CSS-Gitter vollständig und die Flexbox-Implementierung ist nicht mehr vorhanden.
JavaScript-Anwendungsanforderungen
Anwendungen, die moderne JavaScript-Funktionen verwenden - ES6+-Syntax einschließlich Pfeilfunktionen, async/await, Klassen und Template-Literalen - werden in wkhtmltopdf nicht funktionieren. Die Chromium-Engine vonIronPDFbietet vollständige JavaScript-Unterstützung.
Cloud- und Container-Einsätze
Moderne Bereitstellungsstrategien, die Docker, Kubernetes oder Cloud-Plattformen verwenden, profitieren von der containerfreundlichen Architektur von IronPDF. Sicherheitsscans von wkhtmltopdf-Binärdateien in Containern werden die CVE-Schwachstelle aufzeigen.
Langfristige Wartungsfragen
Da für wkhtmltopdf keine zukünftigen Updates zu erwarten sind, sehen sich die Teams mit zunehmenden technischen Schulden konfrontiert, da sich die Webstandards weiterentwickeln. Die aktive Entwicklung vonIronPDFgewährleistet die kontinuierliche Kompatibilität mit zukünftigen .NET-Versionen, einschließlich .NET 10, das für 2026 erwartet wird.
Zusätzliche IronPDF-Fähigkeiten
Neben der HTML-zu-PDF-Konvertierung bietetIronPDFFunktionen zur Dokumentenmanipulation, die wkhtmltopdf nicht bieten kann:
- Zusammenführung von PDFs: Kombinieren Sie mehrere Dokumente zu einer einzigen Datei
- Aufteilung von Dokumenten: Extrahieren von Seitenbereichen in separate PDFs
- Digitale Signaturen: Anwendung kryptografischer Signaturen für die Authentizität von Dokumenten
- Wasserzeichen: Hinzufügen von Text- oder Bild-Wasserzeichen
- PDF/A-Konformität: Generieren von Dokumenten nach Archivierungsstandard
- Formularausfüllung: Programmgesteuertes Ausfüllen von PDF-Formularfeldern
- Passwortschutz: PDFs mit Benutzer- und Eigentümerpasswörtern verschlüsseln
- Kopf- und Fußzeilen: Automatische Seitennummerierung und Branding mit voller HTML/CSS-Unterstützung
Async-Unterstützung
IronPDF bietet async/await-Unterstützung für die Leistung von Webanwendungen:
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}
public async Task<byte[]> GeneratePdfAsync(string html)
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}
Imports System.Threading.Tasks
Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
Dim renderer As New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
Return pdf.BinaryData
End Function
Dies verhindert das Blockieren von Threads in hochbelasteten Webanwendungen - eine Fähigkeit, die mit den nur synchronen Wrappern von wkhtmltopdf nicht verfügbar ist.
.NET-Kompatibilität und Zukunftsfähigkeit
die Aufgabe von wkhtmltopdf bedeutet, dass es keine Kompatibilitätstests oder Updates für neuere .NET-Versionen gibt.IronPDFwird aktiv weiterentwickelt und regelmäßig aktualisiert, um die Kompatibilität mit .NET 8, .NET 9 und zukünftigen Versionen, einschließlich .NET 10, das für 2026 erwartet wird, zu gewährleisten. Die async/await-Unterstützung in der gesamten API der Bibliothek entspricht den modernen C#-Entwicklungspraktiken, einschließlich der für C# 14 erwarteten Funktionen.
Abschluss
Die Unterschiede zwischen wkhtmltopdf undIronPDFsind in Bezug auf Sicherheit, Rendering-Funktionen und langfristige Rentabilität erheblich. die kritische SSRF-Schwachstelle von wkhtmltopdf (CVE-2022-35583) in Verbindung mit der Aufgabe von Projekten schafft eine unhaltbare Sicherheitslage für Produktionsanwendungen. Die WebKit-Engine von 2015 kann kein modernes CSS-Grid verarbeiten, hat keine Unterstützung für Flexbox und scheitert an ES6+ JavaScript.
Die Chromium-basierte Rendering-Engine vonIronPDFbietet volle Unterstützung für moderne Webstandards und enthält keine bekannten CVEs. Das vereinfachte API-Design - Methoden wie RenderHtmlAsPdf()und SaveAs() anstelle von verschachtelten Konfigurationsobjekten - reduziert die Komplexität des Codes und bietet gleichzeitig Funktionen wie PDF-Manipulation, digitale Signaturen und asynchrone Unterstützung, die wkhtmltopdf nicht bieten kann.
Teams, die derzeit wkhtmltopdf oder dessen Wrapper-Bibliotheken (DinkToPdf, Rotativa, TuesPechkin) verwenden, müssen aufgrund der Sicherheitsaspekte umgehend Alternativen prüfen. Die API-Zuordnung zwischen den CLI-Optionen von wkhtmltopdf und den RenderingOptions vonIronPDFist einfach, undIronPDFerfordert durchweg weniger Code und eliminiert gleichzeitig die Sicherheitsrisiken von wkhtmltopdf.
Weitere Anleitungen zur Implementierung finden Sie in der IronPDF-Dokumentation und den Tutorials, die spezielle Anwendungsfälle und erweiterte Funktionen behandeln.