IRONSOFTWAREHOME
VIDEOS

Wie man PDF-Dateien in .NET Maui anzeigt

Curtis Chau
Curtis Chau
Updated: 19. Juli 2026

Die Migration von Rotativazu IronPDF behebt kritische Sicherheitslücken und modernisiert gleichzeitig Ihren PDF-Erzeugungsworkflow. Dieses Handbuch bietet einen vollständigen, schrittweisen Migrationspfad, der die verlassene wkhtmltopdf-Abhängigkeit beseitigt, Unterstützung für modernes CSS und JavaScript ermöglicht und plattformübergreifende Kompatibilität über ASP.NET MVC hinaus bietet.

Warum von Rotativazu IronPDF migrieren

Rotativaverstehen

Rotativa ist seit langem eine beliebte Wahl unter Entwicklern für die Erstellung von PDFs in C#. Es nutzt das wkhtmltopdf-Tool, um HTML-Inhalte in PDF-Format zu konvertieren. Rotativaist eine Open-Source-Bibliothek, die speziell für ASP.NET MVC-Anwendungen entwickelt wurde. Obwohl Rotativaein großes Publikum angezogen hat, stellt die Tatsache, dass es sich auf eine veraltete Technologie stützt, eine Herausforderung dar, die vielleicht nicht jedem Entwickler sofort klar ist.

Im Kern bietet Rotativaeine einfache Möglichkeit, die PDF-Erstellung in ASP.NET MVC-Projekte zu integrieren, wobei es die Backend-Funktionen von wkhtmltopdf nutzt.

Kritischer Sicherheitshinweis

Rotativa umhüllt wkhtmltopdf, das KRITISCHE UNGESCHÜTZTE SICHERHEITSMÄNGEL aufweist.

AttributWert
CVE IDCVE-2022-35583
SchweregradKRITISCH (9.8/10)
Attack VectorNetzwerk
StatusKeine feste Version (wkhtmltopdf-Binärdatei archiviert)
BetroffenAlle Rotativa-Versionen bündeln wkhtmltopdf 0.12.6

Das wkhtmltopdf GitHub-Repository wurde am 2. Januar 2023 archiviert (schreibgeschützt). Die Statusseite des Maintainers vermerkt, dass das Projekt von Qt 4 abhängt (seit 2015 nicht mehr unterstützt) und einem WebKit-Zweig aus 2012, und warnt ausdrücklich davor, es mit nicht vertrauenswürdigen HTML-Dateien zu verwenden. CVE-2022-35583hat keine feste Version, sodass jede Anwendung, die Rotativaverwendet, ausgesetzt ist, es sei denn, HTML-Eingaben werden vollständig zuvor bereinigt.

Wie die Attacke funktioniert

<!-- Attacker submits this content via your MVC model -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin" />
HTML

Auswirkung:

  • Zugang zu AWS/Azure/GCP-Cloud-Metadaten-Endpunkten
  • Stehlen von internen API-Daten und Anmeldeinformationen
  • Port-Scan interner Netzwerke
  • Exfiltrieren sensibler Konfiguration

Die Technologie-Krise

Rotativa umhüllt wkhtmltopdf, das verwendet:

  • Qt WebKit 4.8 (ab 2012)
  • Keine Flexbox-Unterstützung
  • Keine CSS-Grid-Unterstützung
  • Defekte JavaScript-Ausführung
  • Keine ES6+-Unterstützung

Vergleich zwischen Rotativaund IronPDF

FeatureRotativaIronPDF
ProjektkompatibilitätNur ASP.NET MVCJeder .NET-Projekttyp (MVC, Razor Pages, Blazor, etc.)
WartungAufgegebenAktiv gewartet
SicherheitAnfällig aufgrund von wkhtmltopdf-Abhängigkeiten (CVE-2022-35583)Regelmäßige Updates und Sicherheitspatches
HTML-RenderingVeraltetes WebKitModernes Chromium
CSS3TeilweiseUnterstützt
Flexbox/GridNicht unterstütztUnterstützt
JavaScriptUnzuverlässigVollständig ES6+
Razor-SeitenNicht unterstütztUnterstützt
BlazorNicht unterstütztUnterstützt
PDF-BearbeitungNicht verfügbarVoll
Digitale SignaturenNicht verfügbarVoll
PDF/A-KonformitätNicht verfügbarVoll
Async/AwaitNur synchronVollständig asynchron
Open SourceJa, MIT-LizenzNein, kommerzielle Lizenz

Für Teams, die auf aktuelle .NET-Versionen abzielen, bietet IronPDF moderne Chromium-Rendering- und plattformübergreifende Unterstützung, die Rotativanicht bieten kann.


Bevor Sie beginnen

Voraussetzungen

  1. .NET -Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet -Zugriff: Möglichkeit zur Installation von NuGet -Paketen
  3. IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.

NuGet-Paketänderungen

Das ursprüngliche Rotativa-Paket richtet sich an das klassische ASP.NET MVC 5 (letzte Veröffentlichung v1.7.3, 29.09.2017). Der Community Fork Rotativa.AspNetCore (webgio) erreichte die Version v1.4.0 am 06.11.2024 und unterstützt .NET Core 3.1 bis .NET 8 – jedoch liefern beide Pakete immer noch die wkhtmltopdf 0.12.6-Binärdatei (letzte Upstream-Veröffentlichung Juni 2020).

# Remove Rotativa
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore

# Install IronPDF
dotnet add package IronPdf
SHELL

Entferne wkhtmltopdf-Binärdateien

Löschen Sie diese Dateien aus Ihrem Projekt:

  • wkhtmltopdf.exe
  • wkhtmltox.dll
  • Alle Rotativa/-Ordner

Diese sind die Quelle von CVE-2022-35583.IronPDF benötigt keine nativen Binärdateien.

Lizenz-Konfiguration

// Add in Program.cs or Startup.cs
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Komplette API-Referenz

Namensraumänderungen

// Before: Rotativa
using Rotativa;
using Rotativa.Options;
using Rotativa.AspNetCore;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;

Kernklassen-Zuordnungen

Rotativa-KlasseIronPDF-Äquivalent
ViewAsPdfChromePdfRenderer
ActionAsPdfChromePdfRenderer.RenderUrlAsPdf()
UrlAsPdfChromePdfRenderer.RenderUrlAsPdf()
Orientation EnumPdfPaperOrientation Enum
Size EnumPdfPaperSize Enum

Seitenplatzhalter-Konvertierung

RotativaPlatzhalterIronPDF Platzhalter
[page]{page}
[topage]{total-pages}
[date]{date}
[time]{time}
[title]{html-title}
[sitepage]{url}

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML in PDF

Vor (Rotativa):

// NuGet: Install-Package Rotativa.AspNetCore
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
            };
        }
    }
}
C#

Nach (IronPDF):

// 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!");
        }
    }
}

Dieses Beispiel verdeutlicht den grundlegenden architektonischen Unterschied. Rotativaerfordert, dass ein ViewAsPdf-Ergebnis von einer MVC-Controller-Aktion zurückgegeben wird, was Sie an das ASP.NET MVC-Framework bindet. Das Muster funktioniert nur innerhalb der MVC-Anfrage-Pipeline und erfordert eine Razor-Ansicht zum Rendern.

IronPDF funktioniert überall: Konsolenanwendungen, Web-APIs, Blazor, Razor Pages oder jede Art von .NET-Projekt. Sie rufen RenderHtmlAsPdf() mit einem HTML-String auf und speichern das Ergebnis. Kein MVC-Controller erforderlich, keine View-Abhängigkeit. Umfassende Beispiele finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Konvertierung von URL in PDF

Vor (Rotativa):

// NuGet: Install-Package Rotativa.AspNetCore
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
            };
        }
    }
}
C#

Nach (IronPDF):

// 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!");
        }
    }
}

Die UrlAsPdf-Klasse von Rotativaerfordert die Rückgabe eines ActionResult von einem MVC-Controller. Die RenderUrlAsPdf()-Methode von IronPDF kann aus jedem Kontext aufgerufen werden und gibt ein PdfDocument-Objekt direkt zurück. Das URL-Rendering verwendet modernes Chromium anstelle der anfälligen und veralteten WebKit-Engine von wkhtmltopdf. Erfahren Sie mehr in unseren Tutorials.

Beispiel 3: Kopf- und Fußzeilen mit Seitenzahlen

Vor (Rotativa):

// NuGet: Install-Package Rotativa.AspNetCore
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,
                // Margins(top, right, bottom, left)
                PageMargins = new Margins(20, 10, 20, 10),
                CustomSwitches = "--header-center \"Page Header\" --footer-center \"Page [page] of [topage]\""
            };
        }
    }
}

Nach (IronPDF):

// 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!");
        }
    }
}

Rotativa verwendet CustomSwitches, um Befehlszeilenargumente an wkhtmltopdf zu übergeben, einschließlich der Kopf- und Fußzeileneinstellungen mit Platzhaltern wie [page] und [topage]. Dieser auf Zeichenketten basierende Ansatz ist fehleranfällig und bei der Kompilierung schwer zu validieren.

IronPDF verwendet stark typisierte TextHeaderFooter-Objekte mit Eigenschaften wie CenterText und DrawDividerLine. Die Platzhaltersyntax ändert sich von [page] zu {page} und von [topage] zu {total-pages}. Typisierte Eigenschaften bieten IntelliSense, Kompilierbarkeitsprüfung und kein Risiko von Tippfehlern.


Das Problem der MVC-Architektur

Rotativa wurde für ASP.NET MVC 5 und früher entwickelt:

// ❌ Rotativa- Only works with classic MVC pattern
public class InvoiceController : Controller
{
    public ActionResult InvoicePdf(int id)
    {
        var model = GetInvoice(id);
        return new ViewAsPdf("Invoice", model);  // Tied to MVC Views
    }
}

// Problems:
// - No Razor Pages support
// - No Blazor support
// - No minimal APIs support
// - No ASP.NET Core native integration

IronPDF trennt das Rendering von Ansichten von der PDF-Generierung, was tatsächlich flexibler ist - Sie können jede HTML-Datei rendern, nicht nur MVC-Ansichten.


Async-Muster-Migration

Rotativa blockiert das Thema;IronPDF unterstützt vollständig async/await:

// ❌ Rotativa- Blocks the thread
public ActionResult GeneratePdf()
{
    return new ViewAsPdf("Report");
    // This blocks the request thread until PDF is complete
    // Poor scalability under load
}

// ✅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
}

Neue Funktionen nach der Migration

Nach der Umstellung auf IronPDF erhalten Sie Funktionen, die Rotativanicht bieten kann:

PDF-Zusammenführung

var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete.pdf");

Digitale Signaturen

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);

Passwortschutz

pdf.SecuritySettings.UserPassword = "secret";

Wasserzeichen

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");

PDF/A Archivierungskonformität

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);

Moderne CSS-Unterstützung

// This now works (broke in Rotativa)
var html = @"
    <div style='display: flex; justify-content: space-between;'>
        <div>Left</div>
        <div>Right</div>
    </div>
    <div style='display: grid; grid-template-columns: 1fr 1fr 1fr;'>
        <div>Col 1</div><div>Col 2</div><div>Col 3</div>
    </div>";
var pdf = renderer.RenderHtmlAsPdf(html);  // Works!

Migrations-Checkliste

Vor der Migration

  • Alle Rotativa-Verwendungen im Quellcode identifizieren
  • Dokument CustomSwitches, die für die Konvertierung in RenderingOptions verwendet werden
  • Beachten Sie die Kopf-/Fußzeilen-Platzhaltersyntax für die Konvertierung ([page]{page})
  • Den IronPDF Lizenzschlüssel erhalten Sie unter IronPDF

Paketänderungen

  • Entfernen Sie Rotativa und Rotativa.AspNetCore NuGet-Pakete
  • Löschen Sie wkhtmltopdf-Binärdateien (wkhtmltopdf.exe, wkhtmltox.dll)
  • Installieren Sie das IronPdf NuGet-Paket

Code-Änderungen

  • Aktualisieren Sie die Namespace-Importe (using Rotativa;using IronPdf;)
  • Ersetzen Sie ViewAsPdf durch ChromePdfRenderer + RenderHtmlAsPdf()
  • Ersetzen Sie UrlAsPdf durch RenderUrlAsPdf()
  • Konvertieren Sie CustomSwitches in RenderingOptions-Eigenschaften
  • Aktualisieren Sie die Platzhaltersyntax ([page]{page}, [topage]{total-pages})
  • Ersetzen Sie PageMargins durch einzelne MarginRight
  • Bei Bedarf auf das asynchrone Muster umstellen
  • Lizenzinitialisierung beim Anwendungsstart hinzufügen

Nach der Migration

  • Überprüfen Sie, ob die PDF-Generierung korrekt funktioniert.
  • Vergleich der PDF-Ausgabequalität (Chromium rendert genauer)
  • Überprüfung der Verbesserungen beim CSS-Rendering (Flexbox/Grid funktionieren jetzt)
  • Test der JavaScript Ausführung (jetzt zuverlässig mit Chromium)
  • Überprüfung, ob der Sicherheitsscan erfolgreich war (keine CVE-2022-35583-Flags mehr)
  • Docker-Konfigurationen aktualisieren, um die Installation von wkhtmltopdf zu entfernen

Hinweis:: Rotativa und wkhtmltopdf sind eingetragene Marken ihrer jeweiligen Eigentümer. Diese Seite ist nicht verbunden mit, wird nicht unterstützt von oder gesponsert von Rotativaoder wkhtmltopdf. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.
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 Handbücher.

...
Weiterlesen

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Buchen Sie Ihre kostenlose Live-Demo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Kundenlogos von Iron Software
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Kundenlogos von Iron Software
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.