VERGLEICH

Rotativa gegen IronPDF: Leitfaden für einen technischen Vergleich

Rotativavs. IronPDF: .NET PDF Generation Comparison Guide

Wenn .NET-Entwickler Lösungen zur PDF-Erzeugung evaluieren, stellen RotativaundIronPDFgrundlegend verschiedene Ansätze mit unterschiedlichen architektonischen Grundlagen und Wartungspfaden dar. Rotativanutzt das wkhtmltopdf-Tool zur Konvertierung von HTML-Inhalten in das PDF-Format innerhalb von ASP.NET MVC-Anwendungen, währendIronPDFeine moderne Chromium-basierte Rendering-Engine bietet, die mit allen .NET-Projekttypen kompatibel ist. In diesem technischen Vergleich werden beide Bibliotheken in den Dimensionen untersucht, die für professionelle Entwickler und Architekten bei der Entscheidung über die PDF-Erzeugung für .NET-Anwendungen im Jahr 2025 und darüber hinaus am wichtigsten sind.

Rotativaverstehen

Rotativa ist eine Open-Source-Bibliothek, die speziell für ASP.NET MVC-Anwendungen entwickelt wurde. Sie umschließt das Befehlszeilen-Tool wkhtmltopdf zur Konvertierung von HTML-Inhalten in das PDF-Format. Die Bibliothek bietet MVC-spezifische Aktionsergebnistypen wie AlsPdf ansehenund UrlAsPdf, die sich direkt in das MVC-Controller-Muster integrieren.

Im Kern verwendet Rotativadie Qt WebKit 4.8 Rendering-Engine von wkhtmltopdf aus dem Jahr 2012. Das bedeutet, dass die Bibliothek keine modernen CSS-Funktionen wie Flexbox oder CSS Grid darstellen kann und dass die JavaScript-Ausführung unzuverlässig ist, da ES6+ nicht unterstützt wird.

Kritische Überlegung: Rotativawird seit Jahren nicht mehr aktualisiert oder gewartet. Das zugrundeliegende wkhtmltopdf wurde im Dezember 2022 offiziell aufgegeben, und die Betreuer haben ausdrücklich erklärt, dass sie keine Sicherheitslücken beheben werden. Dazu gehört CVE-2022-35583, eine kritische Server-Side Request Forgery (SSRF)-Schwachstelle mit einem Schweregrad von 9.8/10.

IronPDFverstehen

IronPDF bietet eine moderne, Chromium-basierte Lösung zur PDF-Erzeugung für .NET-Anwendungen. Die Bibliothek funktioniert mit jedem .NET-Projekttyp, einschließlich ASP.NET MVC, Razor Pages, Blazor, minimalen APIs, Konsolenanwendungen und Desktop-Projekten.

Die Architektur vonIronPDFtrennt das HTML-Rendering von der PDF-Generierung und bietet Entwicklern mehr Flexibilität bei der Strukturierung ihrer Anwendungen. Die Klasse ChromePdfRendererwickelt alle Konvertierungsvorgänge mit voller Unterstützung für modernes CSS3, JavaScript ES6+ und async/await-Muster ab.

Vergleich Sicherheit

Die Sicherheitslage dieser Bibliotheken unterscheidet sich drastisch:

Risiko Rotativa IronPDF
CVE-2022-35583 (SSRF) Angreifbar Geschützt
Lokaler Dateizugriff Angreifbar Sandboxed
Interner Netzwerkzugang Angreifbar Eingeschränkt
Sicherheits-Patches Niemals (aufgegeben) Regelmäßige Aktualisierungen
Aktive Entwicklung Aufgegeben Monatliche Veröffentlichungen

Die Sicherheitslücke CVE-2022-35583 ermöglicht Angreifern den Zugriff auf interne Netzwerkressourcen, Cloud-Metadaten-Endpunkte und sensible Konfigurationen über manipulierte HTML-Inhalte. Da wkhtmltopdf nie gepatcht wird, bleibt jede Anwendung, die Rotativaverwendet, dauerhaft dieser kritischen Sicherheitslücke ausgesetzt.

Projektkompatibilität

Die größte Einschränkung von Rotativaist der ausschließliche Fokus auf ASP.NET MVC:

Feature Rotativa IronPDF
ASP.NET MVC Ja Ja
Razor-Seiten Nicht unterstützt Volle Unterstützung
Blazor Nicht unterstützt Volle Unterstützung
Minimal-APIs Nicht unterstützt Volle Unterstützung
Konsolenanwendungen Nicht unterstützt Volle Unterstützung
Desktop-Anwendungen Nicht unterstützt Volle Unterstützung

Rotativa wurde für ASP.NET MVC 5 und früher entwickelt und basiert auf dem Controller-Action-Result-Muster. Aufgrund dieser Architektur ist sie nicht für moderne .NET Core-Anwendungen geeignet, die Razor Pages, Blazor oder minimale APIs verwenden.

HTML zu PDF Konvertierung

Die Codemuster für die HTML-zu-PDF-Konvertierung zeigen grundlegende Unterschiede in der Architektur auf.

RotativaHTML-Konvertierung

Rotativa benötigt den MVC-Controller-Kontext und verwendet Action-Result-Muster:

// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class PdfController : Controller
    {
        public async Task<IActionResult> GeneratePdf()
        {
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            // Rotativarequires returning a ViewAsPdf result from MVC controller
            return new ViewAsPdf()
            {
                ViewName = "PdfView",
                PageSize = Rotativa.AspNetCore.Options.Size.A4
            };
        }
    }
}
// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class PdfController : Controller
    {
        public async Task<IActionResult> GeneratePdf()
        {
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            // Rotativarequires returning a ViewAsPdf result from MVC controller
            return new ViewAsPdf()
            {
                ViewName = "PdfView",
                PageSize = Rotativa.AspNetCore.Options.Size.A4
            };
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Der Ansatz von Rotativaverbindet die PDF-Erzeugung mit MVC-Ansichten und -Controllern. Das Ergebnis der ViewAsPdf-Aktion rendert eine Razor-Ansicht und konvertiert sie in PDF, kann aber keine rohen HTML-Strings direkt ohne eine Ansicht akzeptieren.

IronPDFHTML-Konvertierung

IronPDF bietet eine direkte HTML-String-Konvertierung, ohne dass ein MVC-Kontext erforderlich ist:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("output.pdf");

            Console.WriteLine("PDF generated successfully!");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();
            var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";

            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("output.pdf");

            Console.WriteLine("PDF generated successfully!");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die Methode RenderHtmlAsPdf akzeptiert HTML-Inhalte direkt und ermöglicht die PDF-Erzeugung aus jedem Anwendungskontext - Konsolenanwendungen, Hintergrunddienste oder Webanwendungen jeder Art.

URL zu PDF Konvertierung

Die Konvertierung von Live-Webseiten in PDF zeigt, wie die einzelnen Bibliotheken mit Navigation und Rendering umgehen.

RotativaURL-Konvertierung

// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class UrlPdfController : Controller
    {
        public async Task<IActionResult> ConvertUrlToPdf()
        {
            // Rotativaworks within MVC framework and returns ActionResult
            return new UrlAsPdf("https://www.example.com")
            {
                FileName = "webpage.pdf",
                PageSize = Rotativa.AspNetCore.Options.Size.A4,
                PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait
            };
        }
    }
}
// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class UrlPdfController : Controller
    {
        public async Task<IActionResult> ConvertUrlToPdf()
        {
            // Rotativaworks within MVC framework and returns ActionResult
            return new UrlAsPdf("https://www.example.com")
            {
                FileName = "webpage.pdf",
                PageSize = Rotativa.AspNetCore.Options.Size.A4,
                PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait
            };
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Der Ergebnistyp UrlAsPdfvon Rotativaerfordert den MVC-Controller-Kontext und gibt ein Aktionsergebnis zurück. Beachten Sie, dass das URL-Rendering durch wkhtmltopdf die SSRF-Schwachstelle offenlegt, wodurch Angreifer potenziell auf interne Netzwerkressourcen zugreifen können.

IronPDFURL-Konvertierung

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
            pdf.SaveAs("webpage.pdf");

            Console.WriteLine("URL converted to PDF successfully!");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
            pdf.SaveAs("webpage.pdf");

            Console.WriteLine("URL converted to PDF successfully!");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die RenderUrlAsPdf-Methode vonIronPDFarbeitet unabhängig von jedem Web-Framework und verfügt über eingebaute Sicherheitsbeschränkungen, die SSRF-Angriffe verhindern.

Kopf- und Fußzeilen Implementierung

Die Kopf- und Fußzeilen des Dokuments zeigen die wesentlichen Unterschiede im API-Design.

RotativaKopf- und Fußzeilen

Rotativa verwendet Befehlszeilenschalter, die als Zeichenketten übergeben werden:

// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using Rotativa.AspNetCore.Options;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class HeaderFooterController : Controller
    {
        public async Task<IActionResult> GeneratePdfWithHeaderFooter()
        {
            return new ViewAsPdf("Report")
            {
                PageSize = Size.A4,
                PageMargins = new Margins(20, 10, 20, 10),
                CustomSwitches = "--header-center \"Page Header\" --footer-center \"Page [page] of [toPage]\""
            };
        }
    }
}
// NuGet: Install-Package Rotativa.Core
using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;
using Rotativa.AspNetCore.Options;
using System.Threading.Tasks;

namespace RotativaExample
{
    public class HeaderFooterController : Controller
    {
        public async Task<IActionResult> GeneratePdfWithHeaderFooter()
        {
            return new ViewAsPdf("Report")
            {
                PageSize = Size.A4,
                PageMargins = new Margins(20, 10, 20, 10),
                CustomSwitches = "--header-center \"Page Header\" --footer-center \"Page [page] of [toPage]\""
            };
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die Eigenschaft BenutzerdefinierteSchalterübergibt rohe Befehlszeilenargumente an wkhtmltopdf. Bei diesem Ansatz fehlt es an Typsicherheit, IntelliSense-Unterstützung und Kompilierzeitüberprüfung. Fehler in der Switch-Syntax treten erst zur Laufzeit auf.

IronPDF-Kopf- und Fußzeilen

IronPDF bietet typisierte Eigenschaften für die Konfiguration von Kopf- und Fußzeilen:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
            {
                CenterText = "Page Header",
                DrawDividerLine = true
            };

            renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
            {
                CenterText = "Page {page} of {total-pages}",
                DrawDividerLine = true
            };

            var htmlContent = "<h1>Report Title</h1><p>Report content goes here.</p>";
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("report.pdf");

            Console.WriteLine("PDF with headers and footers created successfully!");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
            {
                CenterText = "Page Header",
                DrawDividerLine = true
            };

            renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
            {
                CenterText = "Page {page} of {total-pages}",
                DrawDividerLine = true
            };

            var htmlContent = "<h1>Report Title</h1><p>Report content goes here.</p>";
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs("report.pdf");

            Console.WriteLine("PDF with headers and footers created successfully!");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die Klasse TextHeaderFooter vonIronPDFbietet IntelliSense-Unterstützung, Typüberprüfung bei der Kompilierung und eindeutige Eigenschaftsnamen. Die Syntax der Platzhalter ist unterschiedlich: Rotativaverwendet [Seite]und [toPage], währendIronPDF{Seite}und {Gesamtseiten}verwendet.

Syntax-Referenz für Platzhalter

RotativaPlatzhalter IronPDFPlatzhalter
[Seite] {Seite}
[topage] {Gesamtseiten}
[Datum] {Datum}
[Zeit] {Zeit}
[Titel] {html-title}
[sitepage] {url}

Merkmalsvergleichsmatrix

Feature Rotativa IronPDF
Sicherheit Kritische CVEs (ungepatched) Keine Schwachstellen
HTML-Rendering Veraltetes WebKit (2012) Modernes Chromium
CSS3 Teilweise Unterstützung Volle Unterstützung
Flexbox/Grid Nicht unterstützt Volle Unterstützung
JavaScript Unzuverlässig Vollständig ES6+
ASP.NET Core Begrenzte Ports Native Unterstützung
Razor-Seiten Nicht unterstützt Volle Unterstützung
Blazor Nicht unterstützt Volle Unterstützung
PDF-Bearbeitung Nicht verfügbar Volle Unterstützung
Digitale Signaturen Nicht verfügbar Vollständige Unterstützung
PDF/A-Konformität Nicht verfügbar Volle Unterstützung
Async/Await Nur synchron Vollständig asynchron
Aktive Wartung Aufgegeben Wöchentliche Aktualisierungen

API-Mapping-Referenz

Teams, die eine Migration von RotativaaufIronPDFprüfen, können sich auf diese Zuordnung gleichwertiger Operationen beziehen:

Rotativa-Klasse IronPDF-Äquivalent Notizen
AlsPdf ansehen ChromePdfRenderer HTML rendern
AktionAlsPdf ChromePdfRenderer.RenderUrlAsPdf() URL rendern
UrlAsPdf ChromePdfRenderer.RenderUrlAsPdf() URL rendern
Orientierung enum PdfPaperOrientation enum Orientierung
Größe enum PdfPaperSize enum Papierformat
Marken RenderingOptions.Margin* Einzelne Eigenschaften
BenutzerdefinierteSchalter RenderingOptions.* Typisierte Eigenschaften

Das Threading-Problem

Rotativa erbt die Threading-Einschränkungen von wkhtmltopdf:

// Rotativa- Blocks the thread
public ActionResult GeneratePdf()
{
    return new ViewAsPdf("Report");
    // This blocks the request thread until PDF is complete
    // Poor scalability under load
}
// Rotativa- Blocks the thread
public ActionResult GeneratePdf()
{
    return new ViewAsPdf("Report");
    // This blocks the request thread until PDF is complete
    // Poor scalability under load
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF bietet vollständige asynchrone Unterstützung:

//IronPDF- Vollständig asynchronsupport
public async Task<IActionResult> GeneratePdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
    // Non-blocking, better scalability
}
//IronPDF- Vollständig asynchronsupport
public async Task<IActionResult> GeneratePdf()
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
    // Non-blocking, better scalability
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Das Synchronous-Only-Muster in Rotativablockiert Anfrage-Threads, was die Skalierbarkeit der Anwendung unter Last verringert. Die asynchrone Unterstützung vonIronPDFermöglicht eine bessere Ressourcennutzung in Szenarien mit hohem Durchsatz.

Bereitstellungsüberlegungen

Rotativa erfordert die Verwaltung von wkhtmltopdf-Binärdateien in verschiedenen Einsatzumgebungen:

  • Verschiedene Binärdateien für x86/x64/Linux/Mac-Plattformen
  • Manuelle Konfiguration der PATH-Umgebung
  • Sicherheitsschwachstellen in allen Binärversionen
  • Die Docker-Images müssen eine wkhtmltopdf-Installation enthalten

IronPDF vereinfacht die Bereitstellung durch NuGet-Paketierung ohne externe Binärverwaltung.

Wenn Teams eine Rotativa-Migration in Betracht ziehen

Mehrere Faktoren veranlassen Entwicklungsteams, Alternativen zu Rotativazu prüfen:

Sicherheitsanforderungen werden kritisch, wenn Schwachstellen-Scanner CVE-2022-35583 anzeigen. Da wkhtmltopdf niemals gepatcht werden wird, müssen Organisationen, die Sicherheitsaudits oder Compliance-Anforderungen unterliegen, von Rotativaweggehen.

Die moderne Einführung von .NET führt zu Inkompatibilität, wenn Teams zu Razor Pages, Blazor oder minimalen APIs wechseln. Die reine MVC-Architektur von Rotativakann diese modernen Muster nicht unterstützen.

CSS-Rendering-Beschränkungen beeinträchtigen die Qualität der Dokumente, wenn Designs Flexbox oder CSS Grid verwenden. Die veraltete WebKit-Engine von Rotativaaus dem Jahr 2012 kann diese Layouts nicht korrekt wiedergeben.

JavaScript-Zuverlässigkeit wirkt sich auf die Wiedergabe dynamischer Inhalte aus. Komplexes JavaScript, das in Browsern funktioniert, wird mit der eingeschränkten JavaScript-Unterstützung von wkhtmltopdf oft nicht oder falsch wiedergegeben.

Asynchrone Skalierbarkeit ist wichtig für Anwendungen mit hohem Durchsatz. Das rein synchrone Muster von Rotativablockiert Threads, währendIronPDFfür eine bessere Ressourcennutzung vollständig async/await unterstützt.

Stärken und Gegensätze

RotativaStärken

  • Einfache MVC-Integration für einfache Anwendungsfälle
  • Offene Quelle (MIT-Lizenz)
  • Vertrautes Muster für MVC-Legacy-Anwendungen
  • Keine Kosten für kommerzielle Lizenzen

Einschränkungen von Rotativa

  • Nur ASP.NET MVC - keine Razor Pages, Blazor oder minimale APIs
  • Aufgegeben - keine Updates oder Wartung
  • Kritische Sicherheitsschwachstellen, die nie gepatcht werden
  • Veraltete WebKit-Rendering-Engine (2012)
  • Keine Unterstützung von Flexbox oder CSS Grid
  • Unzuverlässige JavaScript-Ausführung
  • Nur synchron - schlechte Skalierbarkeit
  • Keine PDF-Manipulationsmöglichkeiten
  • Keine digitalen Signaturen oder PDF/A-Konformität

IronPDFStärken

  • Funktioniert mit jedem .NET-Projekttyp
  • Modernes Chromium-Rendering mit vollständiger CSS3/JavaScript-Unterstützung
  • Aktive Pflege mit regelmäßigen Sicherheitsupdates
  • Vollständige Unterstützung von async/await
  • Umfassende PDF-Bearbeitung-Funktionen
  • Digitale Signaturen und Sicherheit
  • PDF/A-Archivierungskonformität
  • Professionelle Unterstützung und Dokumentation

IronPDFÜberlegungen

  • Kommerzielles Lizenzierungsmodell
  • Erfordert die Initialisierung des Lizenzschlüssels

Abschluss

Rotativa bot eine unkomplizierte Lösung für die PDF-Generierung in ASP.NET MVC-Anwendungen, als es noch aktiv gepflegt wurde. Die Aufgabe der Bibliothek in Verbindung mit kritischen, nicht behobenen Sicherheitslücken in der wkhtmltopdf-Grundlage stellt jedoch ein erhebliches Risiko für Produktionsanwendungen dar.

Für Teams, die derzeit mit Rotativaarbeiten, ist die Kombination aus Sicherheitslücken, reiner MVC-Architektur und veralteten Rendering-Funktionen ein zwingender Grund, Alternativen zu prüfen. Für neue Projekte, die auf .NET 10 und C# 14 im Jahr 2026 abzielen, kann die Architektur von Rotativakeine modernen Muster wie Razor Pages, Blazor oder minimale APIs unterstützen.

IronPDF behebt diese Einschränkungen mit einer modernen Chromium-Rendering-Engine, plattformübergreifender .NET-Kompatibilität, aktiver Wartung und umfassenden PDF-Bearbeitungsfunktionen, die Rotativanie bot. Der Migrationspfad von RotativazuIronPDFumfasst in erster Linie das Ersetzen von MVC-Aktionsergebnissen durch direkte ChromePdfRenderer-Aufrufe und die Aktualisierung der Platzhaltersyntax in Kopf- und Fußzeilen.


Eine Anleitung zur Implementierung finden Sie im IronPDF ASP.NET Core-Tutorial und in der Dokumentation, die PDF-Erzeugungsmuster für moderne .NET-Anwendungen abdeckt.