Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von wkhtmltopdf zu IronPDF in C#

Migrieren von wkhtmltopdf zu IronPDF: Ein kompletter C#-Entwicklerleitfaden

wkhtmltopdf ist ein weit verbreitetes Tool zur Konvertierung von HTML-Dokumenten in PDF mit Qt WebKit. Trotz seiner Beliebtheit bei Entwicklern aufgrund seiner Befehlszeilenfunktionen und der kostenlosen Lizenzierung birgt das Projekt inzwischen kritische Sicherheitsrisiken, die nicht mehr ignoriert werden können. Die Bibliothek wurde 2016-2017 offiziell aufgegeben, und eine Sicherheitslücke mit dem Schweregrad KRITISCH (CVE-2022-35583) bleibt dauerhaft ungepatched.

Dieses Handbuch bietet einen vollständigen Migrationspfad von wkhtmltopdf zuIronPDFmit schrittweisen Anleitungen, Codevergleichen und praktischen Beispielen für professionelle .NET-Entwickler, die dieses Sicherheitsrisiko aus ihren Anwendungen eliminieren müssen.

Kritische Sicherheitswarnung: CVE-2022-35583

wkhtmltopdf enthält eine kritische Sicherheitslücke, die nie behoben werden wird:

Problem Schweregrad Status
CVE-2022-35583 KRITISCH (9.8/10) UNPATCHED
SSRF-Schwachstelle Risiko der Infrastrukturübernahme UNPATCHED
Letzte Aktualisierung 2016-2017 Abgelehnt
WebKit Version 2015 (Qt WebKit) OBSOLETE
CSS-Grid-Unterstützung Keine Gebrochen
Flexbox-Unterstützung Teilweise Gebrochen
ES6+ JavaScript Keine Gebrochen

Wie der SSRF-Angriff funktioniert

Die Sicherheitslücke "Server-Side Request Forgery" ermöglicht es Angreifern, auf interne Dienste zuzugreifen, Anmeldeinformationen zu stehlen, Ihr internes Netzwerk zu scannen und sensible Daten über manipuliertes HTML zu exfiltrieren:

<!-- Malicious HTML submitted to your PDF generator -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
<!-- Malicious HTML submitted to your PDF generator -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
HTML

Wenn wkhtmltopdf dieses HTML rendert, holt es diese URLs aus dem Netzwerkkontext Ihres Servers und umgeht dabei Firewalls und Sicherheitskontrollen.

Betroffene Wrapper-Bibliotheken

Alle .NET-Wrapper für wkhtmltopdf erben diese Schwachstellen:

Wrapper-Bibliothek Status Sicherheitsrisiko
DinkToPdf Aufgegeben ⚠️ KRITISCH
Rotativa Aufgegeben ⚠️ KRITISCH
TuesPechkin Aufgegeben ⚠️ KRITISCH
WkHtmlToPdf-DotNet Aufgegeben ⚠️ KRITISCH
NReco.PdfGenerator Verwendet wkhtmltopdf ⚠️ KRITISCH

Wenn Sie eine dieser Bibliotheken verwenden, sind Sie anfällig für CVE-2022-35583.

IronPDFvs. wkhtmltopdf: Funktionsvergleich

Das Verständnis der architektonischen Unterschiede hilft technischen Entscheidungsträgern, die Investition in die Migration zu bewerten:

Feature wkhtmltopdf IronPDF
Lizenzierung LGPLv3 (Frei) Kommerziell
Rendering Engine Qt WebKit (2015) Aktuelle Chromium-Engine
Sicherheitsschwachstellen CVE-2022-35583, wichtige ungepatchte Probleme Keine bekannten CVEs
Aktive Wartung Abgebrochen, keine sinnvollen Aktualisierungen seit 2017 Aktive Pflege mit regelmäßigen Veröffentlichungen
Unterstützung für moderne Webstandards Eingeschränkt (Broken flexbox, kein CSS Grid) Volle Unterstützung
Integration und Unterstützung Beschränkt auf Community-Foren Umfassende Dokumentation und engagierter Support
CSS Grid ❌ Nicht unterstützt ✅ Volle Unterstützung
Flexbox ⚠️ Gebrochen ✅ Volle Unterstützung
ES6+ JavaScript ❌ Nicht unterstützt ✅ Volle Unterstützung
Async/Await ❌ Nicht unterstützt ✅ Volle Unterstützung
PDF-Bearbeitung ❌ Nicht unterstützt ✅ Volle Unterstützung
Digitale Signaturen ❌ Nicht unterstützt ✅ Volle Unterstützung
PDF/A-Konformität ❌ Nicht unterstützt ✅ Volle Unterstützung

Schnellstart: wkhtmltopdf zuIronPDFMigration

Mit diesen grundlegenden Schritten kann die Migration sofort beginnen.

Schritt 1: Entfernen von wkhtmltopdf-Paketen und -Binärdateien

Entfernen Sie alle wkhtmltopdf-Wrapper-Pakete:

# Remove wkhtmltopdf wrapper (whichever you're using)
dotnet remove package WkHtmlToPdf-DotNet
dotnet remove package DinkToPdf
dotnet remove package TuesPechkin
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore
dotnet remove package NReco.PdfGenerator

# Remove wkhtmltopdf binary from your deployment
# Delete wkhtmltopdf.exe, wkhtmltox.dll, etc.
# Remove wkhtmltopdf wrapper (whichever you're using)
dotnet remove package WkHtmlToPdf-DotNet
dotnet remove package DinkToPdf
dotnet remove package TuesPechkin
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore
dotnet remove package NReco.PdfGenerator

# Remove wkhtmltopdf binary from your deployment
# Delete wkhtmltopdf.exe, wkhtmltox.dll, etc.
SHELL

Schritt 2:IronPDFinstallieren

# AddIronPDF(secure, modern alternative)
dotnet add package IronPdf
# AddIronPDF(secure, modern alternative)
dotnet add package IronPdf
SHELL

Schritt 3: Namespaces aktualisieren

Ersetzen Sie die wkhtmltopdf-Namensräume durch den IronPdf-Namensraum:

// Before (wkhtmltopdf)
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;

// After (IronPDF)
using IronPdf;
// Before (wkhtmltopdf)
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Schritt 4: Lizenz initialisieren

Hinzufügen der Lizenzinitialisierung beim Start der Anwendung:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Beispiele für die Code-Migration

Konvertierung von HTML in PDF

Der grundlegendste Vorgang offenbart den Komplexitätsunterschied zwischen diesen .NET-PDF-Ansätzen.

wkhtmltopdf-Ansatz:

// 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,
                Orientierung= 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,
                Orientierung= 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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdf erfordert das Erstellen eines SynchronizedConvertermit PdfTools, das Konstruieren eines HtmlToPdfDocumentmit GlobalSettings und Objects, das Setzen von Eigenschaften wie ColorMode, Orientation und PaperSize, das Aufrufen von converter.Convert(), um Rohbytes zu erhalten, und manuelles Schreiben in eine Datei mit File.WriteAllBytes().

MitIronPDFentfällt diese Zeremonie vollständig: Erstellen Sie einen ChromePdfRenderer, rufen Sie RenderHtmlAsPdf()auf und verwenden Sie die integrierte Methode SaveAs().

Für fortgeschrittene HTML-zu-PDF-Szenarien siehe den HTML-zu-PDF-Konvertierungsleitfaden.

Konvertierung von URLs zu PDF

Die URL-zu-PDF-Konvertierung weist ähnliche Komplexitätsmuster auf.

wkhtmltopdf-Ansatz:

// 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,
                Orientierung= 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,
                Orientierung= Orientation.Portrait,
                PaperSize = PaperKind.A4
            },
            Objects = {
                new ObjectSettings()
                {
                    Page = "https://www.example.com"
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdf verwendet die Page-Eigenschaft in ObjectSettings, um eine URL zu spezifizieren, was dasselbe Dokumentkonstruktionsmuster erfordert.IronPDFbietet eine eigene RenderUrlAsPdf()-Methode, die die Absicht klar zum Ausdruck bringt.

In der URL zur PDF-Dokumentation finden Sie Informationen zur Authentifizierung und zu benutzerdefinierten Kopfzeilenoptionen.

Benutzerdefinierte Einstellungen: HTML-Dateien mit Seitenkonfiguration

Die Konfiguration von Ausrichtung, Rändern und Papiergröße erfordert unterschiedliche Ansätze.

wkhtmltopdf-Ansatz:

// 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,
                Orientierung= 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,
                Orientierung= 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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Ansatz:

// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdf verschachtelt Einstellungen in GlobalSettings und Objects, wobei MarginSettings ein separates Objekt ist.IronPDFbietet direkte RenderingOptions-Eigenschaften mit klaren Namen wie PaperOrientation, MarginTop und PaperSize.

wkhtmltopdf API toIronPDFMapping Reference

Dieses Mapping beschleunigt die Migration, indem es direkte API-Entsprechungen aufzeigt:

CLI-zu-IronPDF-Zuordnung

wkhtmltopdf CLI-Option IronPDF-Äquivalent Notizen
wkhtmltopdf input.html output.pdf renderer.RenderHtmlFileAsPdf() Datei zu PDF
wkhtmltopdf URL Ausgabe.pdf renderer.RenderUrlAsPdf() URL zu PDF
--Seitengröße A4 RenderingOptions.PaperSize = PdfPaperSize.A4 Papierformat
--Seitengröße Letter RenderingOptions.PaperSize = PdfPaperSize.Letter US-Brief
--Orientierung Landschaft RenderingOptions.PaperOrientation = Querformat Orientierung
--margin-top 10mm RenderingOptions.MarginTop = 10 Ränder in mm
--margin-bottom 10mm RenderingOptions.MarginBottom = 10
--margin-left 10mm RenderingOptions.MarginLeft = 10
--margin-right 10mm RenderingOptions.MarginRight = 10
--header-html header.html RenderingOptions.HtmlHeader HTML-Kopfzeile
--footer-center "[Seite]" {Seite} Platzhalter Seitenzahl
--footer-center "[toPage]" {Gesamtseiten} Platzhalter Seiten insgesamt
--javascript einschalten Standardmäßig aktiviert JavaScript
--javascript-verzögerung 500 RenderingOptions.WaitFor.RenderDelay = 500 JS-Verzögerung
--dpi 300 RenderingOptions.Dpi = 300 DPI-Einstellung
--Graustufen RenderingOptions.GrayScale = true Graustufen

C# Wrapper API Mapping

wkhtmltopdf Wrapper IronPDF Notizen
SynchronizedConverter ChromePdfRenderer Haupt-Renderer
HtmlToPdfDocument RenderingOptions Konfiguration
GlobalSettings.Out pdf.SaveAs() Ausgabedatei
GlobalSettings.PaperSize RenderingOptions.PaperSize Papierformat
GlobalSettings.Orientation RenderingOptions.PaperOrientation Orientierung
GlobalSettings.Margins RenderingOptions.Margin* Einzelne Ränder
ObjektEinstellungen.Seite RenderHtmlFileAsPdf() Datei-Eingabe
ObjectSettings.HtmlContent RenderHtmlAsPdf() HTML-Zeichenkette
converter.Convert(doc) renderer.RenderHtmlAsPdf() PDF generieren

Migration der Platzhalter-Syntax

wkhtmltopdf Platzhalter IronPDFPlatzhalter
[Seite] {Seite}
[bisSeite] {Gesamtseiten}
[Datum] {Datum}
[Zeit] {Zeit}
[Titel] {html-title}
[url] {url}

Gängige Migrationsprobleme und Lösungen

Aufgabe 1: Syntax von Kopf-/Fußzeilen-Platzhaltern

wkhtmltopdf: Verwendet Syntax in eckigen Klammern wie [Seite]und [toPage].

Lösung: Aktualisierung der Platzhalter für geschweifte Klammern in IronPDF:

// Before (wkhtmltopdf)
FooterSettings = { Left = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:left;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
// Before (wkhtmltopdf)
FooterSettings = { Left = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:left;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ausgabe 2: JavaScript-Verzögerungskonfiguration

wkhtmltopdf: Verwendet die JavascriptDelay Eigenschaft mit begrenzter Zuverlässigkeit.

Lösung:IronPDFbietet mehrere Möglichkeiten:

renderer.RenderingOptions.EnableJavaScript = true;

// Option 1: Fixed delay
renderer.RenderingOptions.WaitFor.RenderDelay(500);

// Option 2: Wait for specific element (more reliable)
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

// Option 3: Wait for JavaScriptcondition
renderer.RenderingOptions.WaitFor.JavaScript("window.renderComplete === true");
renderer.RenderingOptions.EnableJavaScript = true;

// Option 1: Fixed delay
renderer.RenderingOptions.WaitFor.RenderDelay(500);

// Option 2: Wait for specific element (more reliable)
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

// Option 3: Wait for JavaScriptcondition
renderer.RenderingOptions.WaitFor.JavaScript("window.renderComplete === true");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ausgabe 3: Modernes CSS ohne Rendering

Symptom: CSS Grid- und Flexbox-Layouts werden in wkhtmltopdf falsch dargestellt.

Lösung: Die Chromium-Engine vonIronPDFverarbeitet modernes CSS korrekt:

// This CSS now works with IronPDF
var html = @"
<style>
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
    .flex { display: flex; justify-content: space-between; align-items: center; }
</style>
<div class='grid'>
    <div>Column 1</div>
    <div>Column 2</div>
    <div>Column 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// This CSS now works with IronPDF
var html = @"
<style>
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
    .flex { display: flex; justify-content: space-between; align-items: center; }
</style>
<div class='grid'>
    <div>Column 1</div>
    <div>Column 2</div>
    <div>Column 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ausgabe 4: Synchrones vs. Asynchrones Rendering

wkhtmltopdf: Wrapper sind synchrone und Block-Threads.

Lösung:IronPDFunterstützt asynchrones Rendering:

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;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdf Checkliste für die Migration

Vor der Migration anfallende Aufgaben

Überprüfen Sie Ihre Codebasis, um die Verwendung von wkhtmltopdf zu identifizieren:

# Find all wkhtmltopdf references
grep -r "WkHtmlToPdfDotNet\|DinkToPdf\|TuesPechkin\|Rotativa" --include="*.cs" .
grep -r "wkhtmltopdf" --include="*.yml" --include="*.yaml" --include="Dockerfile" .
# Find all wkhtmltopdf references
grep -r "WkHtmlToPdfDotNet\|DinkToPdf\|TuesPechkin\|Rotativa" --include="*.cs" .
grep -r "wkhtmltopdf" --include="*.yml" --include="*.yaml" --include="Dockerfile" .
SHELL

Auffinden und Dokumentieren von wkhtmltopdf-Binärdateien zur Entfernung. Aktuelle Einstellungen des Dokuments (Papierformat, Ränder, Kopf- und Fußzeilen).

Aufgaben der Code-Aktualisierung

  1. Alle wkhtmltopdf WrapperNuGet-Pakete entfernen
  2. Entfernen von wkhtmltopdf-Binärdateien (wkhtmltopdf.exe, wkhtmltox.dll)
  3. IronPdf NuGet-Paket installieren
  4. Aktualisierung der Namespace-Importe von WkHtmlToPdfDotNet nach IronPdf
  5. Ersetzen Sie SynchronizedConvertermit ChromePdfRenderer
  6. HtmlToPdfDocument-Muster in direkte Rendering-Methoden umwandeln
  7. Aktualisieren Sie GlobalSettings-Konfigurationen zu RenderingOptions
  8. Randkonfigurationen von MarginSettings in individuelle Eigenschaften umwandeln
  9. Aktualisierung der Platzhalter-Syntax ([Seite]{Seite}, [bisSeite]{Gesamtseiten})
  10. IronPDF-Lizenzinitialisierung beim Start hinzufügen

Post-Migrationstests

Überprüfen Sie diese Aspekte nach der Migration:

  • Visueller Vergleich der PDF-Ausgabe (sollte mit moderner CSS-Unterstützung verbessert werden)
  • Überprüfung der modernen CSS-Darstellung (CSS Grid und Flexbox funktionieren jetzt)
  • Testen Sie JavaScript-lastige Seiten
  • Sicherheitsscan zur Bestätigung, dass keine wkhtmltopdf-Binärdateien mehr vorhanden sind
  • Lasttest für Leistungsvergleich

Sicherheitsüberprüfung

# Scan for any remaining wkhtmltopdf artifacts
find /var/www/ -name "*wkhtmlto*" 2>/dev/null
find /usr/local/bin/ -name "*wkhtmlto*" 2>/dev/null
docker images | grep wkhtmltopdf

# Check if any process is still using it
ps aux | grep wkhtmltopdf
# Scan for any remaining wkhtmltopdf artifacts
find /var/www/ -name "*wkhtmlto*" 2>/dev/null
find /usr/local/bin/ -name "*wkhtmlto*" 2>/dev/null
docker images | grep wkhtmltopdf

# Check if any process is still using it
ps aux | grep wkhtmltopdf
SHELL

Die wichtigsten Vorteile der Migration zu IronPDF

Der Wechsel von wkhtmltopdf zuIronPDFbietet mehrere entscheidende Vorteile:

Sicherheit: CVE-2022-35583 und alle wkhtmltopdf-Schwachstellen wurden beseitigt.IronPDFhat keine bekannten CVEs und erhält regelmäßig Sicherheitsupdates.

Moderne Rendering-Engine:IronPDFverwendet die aktuelle Chromium-Engine, die volle Unterstützung für CSS3, CSS Grid, Flexbox und ES6+ JavaScriptgewährleistet. Moderne Frameworks werden korrekt wiedergegeben.

Vereinfachte API: Direkte Rendering-Methoden ersetzen Dokumentkonstruktionsmuster. Eingebaute SaveAs()-Methoden machen die manuelle Byte-Verarbeitung überflüssig.

Erweiterte Funktionen: PDF-Manipulation, digitale Signaturen, PDF/A-Konformität, Wasserzeichen und Merge/Split-Operationen sind integrierte Funktionen, die wkhtmltopdf nicht bieten kann.

Aktive Entwicklung: Da die Verbreitung von .NET 10 und C# 14 bis 2026 zunimmt, gewährleisten die regelmäßigen Updates vonIronPDFdie Kompatibilität mit aktuellen und zukünftigen .NET-Versionen.

Async-Unterstützung: Verhindern Sie das Blockieren von Threads in hochbelasteten Webanwendungen mit nativer async/await-Unterstützung.

Abschluss

wkhtmltopdf diente der .NET-Community als kostenloser HTML-zu-PDF-Konverter. Da das Projekt jedoch seit 2016-2017 offiziell eingestellt wurde und eine SSRF-Schwachstelle mit KRITISCHEM Schweregrad (CVE-2022-35583) besteht, die nie gepatcht werden wird, stellt die weitere Verwendung ein inakzeptables Sicherheitsrisiko für Produktionsanwendungen dar.

IronPDF bietet eine moderne, sichere Alternative mit einer Chromium-Rendering-Engine, die die aktuellen Webstandards unterstützt. Der Migrationspfad ist einfach: Entfernen Sie die wkhtmltopdf-Pakete und -Binärdateien, installieren Sie IronPDF, ersetzen Sie die Dokumentkonstruktionsmuster durch direkte Rendering-Methoden und aktualisieren Sie die Syntax der Platzhalter.

Beginnen Sie Ihre Migration noch heute mit einer kostenlosen Testversion von IronPDF und beseitigen Sie die Sicherheitslücken, die mit wkhtmltopdf-basierten Lösungen verbunden sind.

Eine umfassende Anleitung zur Implementierung finden Sie in der IronPDF-Dokumentation, den Tutorials und der API-Referenz.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen