Wie man Ansichten in ASP.NET Core MVC | IronPDF in PDFs konvertiert

Konvertieren von Ansichten in PDFs in C# ASP.NET Core MVC

This article was translated from English: Does it need improvement?
Translated
View the article in English

Konvertieren Sie ASP.NET Core MVC-Ansichten in PDFs mit der RenderRazorViewToPdf-Methode von IronPDF, die .cshtml-Dateien mit nur einer Codezeile in Ihrer MVC-Anwendung in hochwertige PDF-Dokumente umwandelt.

Eine Ansicht ist eine Komponente im ASP.NET Framework, die zum Generieren von HTML-Markup in Webanwendungen verwendet wird. Es ist Teil des Model-View-Controller (MVC)-Musters, das häufig in ASP.NET MVC- und ASP.NET Core MVC-Anwendungen verwendet wird. Ansichten sind für die Darstellung von Daten für Benutzer verantwortlich, indem sie HTML-Inhalte dynamisch wiedergeben. Views verwenden in der Regel die Razor-Syntax, eine Auszeichnungssyntax zum Einbetten von serverbasiertem Code in Webseiten, was sie zu leistungsfähigen Werkzeugen für die Erstellung datengesteuerter PDF-Dokumente macht.

Schnellstart: CSHTML in ASP.NET Core in PDF konvertieren

Umwandlung von ASP.NET Core MVC-Ansichten in PDFs mit IronPDF. Mit einer einzigen Codezeile können Sie Ihre '.cshtml'-Dateien in PDF-Dokumente umwandeln. Integrieren Sie diese Funktionalität direkt in Ihre MVC-Anwendung, um eine nahtlose PDF-Generierung aus dynamischen HTML-Ansichten zu ermöglichen. Folgen Sie diesem Leitfaden, um Ihre Umgebung einzurichten und mit der Konvertierung zu beginnen.

  1. Installieren Sie IronPDF mit NuGet Package Manager

    PM > Install-Package IronPdf
  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    // using IronPdf.Extensions.Mvc.Core
    new IronPdf.ChromePdfRenderer().RenderRazorViewToPdf(HttpContext, "Views/Home/Report.cshtml", model).SaveAs("report.pdf");
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronPDF in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer

ASP.NET Core Web App MVC (Model-View-Controller) ist ein Webanwendungs-Framework, das von Microsoft für die Erstellung von Webanwendungen mit ASP.NET Core bereitgestellt wird.

  • Modell: Repräsentiert Daten und Geschäftslogik, verwaltet Dateninteraktionen, kommuniziert mit Datenquellen.
  • Ansicht: Stellt die Benutzeroberfläche dar, zeigt Daten an und gibt Informationen an die Benutzer weiter.
  • Controller: Verarbeitet Benutzereingaben, antwortet auf Anfragen, kommuniziert mit dem Modell, orchestriert Modell-Ansicht-Interaktionen.

IronPDF ermöglicht die direkte Erstellung von PDF-Dateien aus Ansichten in ASP.NET Core MVC-Projekten. Dies macht die PDF-Erstellung in ASP.NET Core MVC einfach und unterstützt moderne Funktionen wie CSS-Styling, JavaScript-Ausführung und Benutzerdefinierte Schriftarten.

Welches Paket benötige ich für IronPDF Extensions?

Das Paket IronPdf.Extensions.Mvc.Core ist eine Erweiterung des Hauptpakets IronPdf. Sowohl das Paket IronPdf.Extensions.Mvc.Core als auch das Paket IronPdf werden benötigt, um Ansichten in ASP.NET Core MVC in PDF-Dokumente umzuwandeln. Das Erweiterungspaket bietet spezifische Funktionen für die Integration mit dem Dependency Injection System von ASP.NET Core und der Razor View Rendering Pipeline.

Install-Package IronPdf.Extensions.Mvc.Core

Warum brauche ich sowohl IronPDF als auch das Extensions-Paket?

Das IronPDF-Hauptpaket enthält die zentrale PDF-Rendering-Engine und grundlegende Funktionen, während das Extensions.Mvc.Core-Paket eine spezielle Integration mit dem View-Rendering-System von ASP.NET Core MVC bietet. Diese Trennung ermöglicht eine bessere Modularität und stellt sicher, dass Sie nur die spezifischen Funktionen einbeziehen, die für Ihren Projekttyp erforderlich sind. Das Erweiterungspaket beinhaltet die IRazorViewRenderer Schnittstelle und Implementierung, die zur Konvertierung von Razor Ansichten in HTML vor der PDF-Generierung erforderlich sind.

Welche NuGet-Paketversion sollte ich verwenden?

Um Kompatibilität zu gewährleisten, verwenden Sie stets übereinstimmende Versionen von IronPDF und IronPdf.Extensions.Mvc.Core. Informationen zu den neuesten stabilen Versionen und zur Versionskompatibilität finden Sie in der Dokumentation der NuGet-Pakete. Stellen Sie bei der Aktualisierung sicher, dass beide Pakete zusammen aktualisiert werden, um die korrekte Funktionalität zu erhalten.

Was sind häufige Probleme bei der Installation?

Zu den häufigen Installationsproblemen gehören Versionsunterschiede zwischen dem Kern- und dem Erweiterungspaket, fehlende Abhängigkeiten oder plattformspezifische Anforderungen. Wenn Sie auf Probleme stoßen, stellen Sie sicher, dass Ihr Projekt auf eine unterstützte .NET-Version abzielt, und lesen Sie die Installationsübersicht für Schritte zur Fehlerbehebung.

C# NuGet-Bibliothek für PDF

Installation mit NuGet

Install-Package IronPdf.Extensions.Mvc.Core

Wie kann ich Ansichten in PDFs rendern?

Sie benötigen ein ASP.NET Core Web App (Model-View-Controller) Projekt, um Views in PDF-Dateien zu konvertieren. Der Prozess beinhaltet die Erstellung einer Controller-Aktion, die die RenderRazorViewToPdf-Methode von IronPDF verwendet, um Ihre Razor Ansichten in PDF-Dokumente umzuwandeln. Dieser Ansatz nutzt die volle Leistungsfähigkeit der Razor-Syntax und ermöglicht die Erstellung komplexer, datengesteuerter PDFs mit dynamischen Inhalten.

Welchen Projekttyp sollte ich verwenden?

Verwenden Sie die ASP.NET Core Web App (Model-View-Controller) Vorlage für eine optimale Kompatibilität mit IronPDF's View-Rendering-Funktionen. Dieser Projekttyp bietet die notwendige Infrastruktur für das Rendering von Ansichten, einschließlich der Razor-View-Engine und des richtigen Routings. Bei bestehenden Projekten muss sichergestellt werden, dass sie dem MVC-Muster folgen und die erforderlichen View-Rendering-Funktionen installiert sind.

Kann ich dies mit minimalen APIs verwenden?

Auch wenn die Minimal-APIs keine integrierte Unterstützung für Ansichten bieten, können Sie dennoch die IronPDF-Funktionen zur Konvertierung von HTML in PDF nutzen. Verwenden Sie für die ansichtsbasierte PDF-Generierung den traditionellen MVC-Ansatz oder ziehen Sie Razor Pages als Alternative in Betracht.

Wie kann ich eine Modellklasse hinzufügen?

  • Navigieren Sie zum Ordner "Models".
  • Erstellen Sie eine neue C#-Klassendatei mit dem Namen "Person" Diese Klasse wird als Modell für die Darstellung individueller Daten dienen. Verwenden Sie den folgenden Codeausschnitt:
:path=/static-assets/pdf/content-code-examples/how-to/cshtml-to-pdf-mvc-core-model.cs
namespace ViewToPdfMVCCoreSample.Models
{
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
    }
}
$vbLabelText   $csharpLabel

Warum brauche ich ein Modell für die PDF-Generierung?

Modelle liefern strukturierte Daten, die zur Darstellung an Ansichten weitergegeben werden können. Diese Trennung von Belangen stellt sicher, dass die Logik der PDF-Erzeugung sauber und wartbar bleibt. Das Modell fungiert als Vertrag zwischen Ihrem Controller und Ihrer Ansicht, gewährleistet Typsicherheit und ermöglicht IntelliSense-Unterstützung in Ihren Razor-Ansichten.

Welche Datentypen funktionieren am besten mit Views?

Einfache Datentypen und Sammlungen eignen sich am besten für die PDF-Erstellung. Komplexe verschachtelte Objekte können verwendet werden, erfordern aber möglicherweise eine zusätzliche Ansichtslogik. Um eine optimale Leistung zu erzielen, sollten Sie komplexe Datenstrukturen in Ihrem Controller reduzieren, bevor Sie sie an die Ansicht weitergeben. Erwägen Sie die Verwendung von ViewModels, die speziell für die PDF-Ausgabe entwickelt wurden, wenn Ihre Domänenmodelle zu komplex sind.

Hier ist ein Beispiel für eine komplexere Modellstruktur, die sich für die PDF-Erstellung eignet:

public class InvoiceViewModel
{
    public string InvoiceNumber { get; set; }
    public DateTime InvoiceDate { get; set; }
    public decimal TotalAmount { get; set; }
    public List<InvoiceLineItem> LineItems { get; set; }
    public CustomerInfo Customer { get; set; }

    // Computed property for PDF display
    public string FormattedTotal => TotalAmount.ToString("C");
}

public class InvoiceLineItem
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal LineTotal => Quantity * UnitPrice;
}

public class CustomerInfo
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
}
public class InvoiceViewModel
{
    public string InvoiceNumber { get; set; }
    public DateTime InvoiceDate { get; set; }
    public decimal TotalAmount { get; set; }
    public List<InvoiceLineItem> LineItems { get; set; }
    public CustomerInfo Customer { get; set; }

    // Computed property for PDF display
    public string FormattedTotal => TotalAmount.ToString("C");
}

public class InvoiceLineItem
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal LineTotal => Quantity * UnitPrice;
}

public class CustomerInfo
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
}
$vbLabelText   $csharpLabel

Wie kann ich den Controller bearbeiten?

Navigieren Sie zum Ordner "Controllers" und öffnen Sie die Datei "HomeController". Wir werden nur die Zeile HomeController ändern und die Aktion Persons hinzufügen. Orientieren Sie sich an dem unten stehenden Code:

Der unten stehende Code instanziiert zunächst die Klasse ChromePdfRenderer und übergibt eine IRazorViewRenderer, den Pfad zu unserer Views/Home/Persons.cshtml und die Liste, die die erforderlichen Daten enthält, an die Methode RenderRazorViewToPdf. Über RenderingOptions können Benutzer auf eine Reihe von Funktionen zugreifen, wie z. B. das Hinzufügen von benutzerdefiniertem Text, einschließlich HTML-Kopf- und Fußzeilen im resultierenden PDF, das Definieren benutzerdefinierter Ränder und das Anwenden von Seitenzahlen. Weitere erweiterte Rendering-Optionen finden Sie in der Dokumentation zu den Rendering-Optionen.

Hinweis:Das PDF-Dokument kann im Browser mit folgendem Code angezeigt werden: File(pdf.BinaryData, "application/pdf"). Allerdings führt das Herunterladen des PDFs nach der Ansicht im Browser zu einem beschädigten PDF-Dokument.

using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using ViewToPdfMVCCoreSample.Models;

namespace ViewToPdfMVCCoreSample.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private readonly IRazorViewRenderer _viewRenderService;
        private readonly IHttpContextAccessor _httpContextAccessor;

        public HomeController(ILogger<HomeController> logger, IRazorViewRenderer viewRenderService, IHttpContextAccessor httpContextAccessor)
        {
            _logger = logger;
            _viewRenderService = viewRenderService;
            _httpContextAccessor = httpContextAccessor;
        }

        public IActionResult Index()
        {
            return View();
        }

        public async Task<IActionResult> Persons()
        {
            // Example list of persons
            var persons = new List<Person>
            {
                new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
                new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
                new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
            };

            // Check if the request method is POST
            if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
            {
                // Create a new PDF renderer
                ChromePdfRenderer renderer = new ChromePdfRenderer();

                // Configure rendering options for better output
                renderer.RenderingOptions.MarginTop = 40;
                renderer.RenderingOptions.MarginBottom = 40;
                renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;
                renderer.RenderingOptions.Title = "Persons Report";

                // Render View to PDF document
                PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);

                Response.Headers.Add("Content-Disposition", "inline");

                // Output PDF document
                return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
            }

            return View(persons);
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}
using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using ViewToPdfMVCCoreSample.Models;

namespace ViewToPdfMVCCoreSample.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private readonly IRazorViewRenderer _viewRenderService;
        private readonly IHttpContextAccessor _httpContextAccessor;

        public HomeController(ILogger<HomeController> logger, IRazorViewRenderer viewRenderService, IHttpContextAccessor httpContextAccessor)
        {
            _logger = logger;
            _viewRenderService = viewRenderService;
            _httpContextAccessor = httpContextAccessor;
        }

        public IActionResult Index()
        {
            return View();
        }

        public async Task<IActionResult> Persons()
        {
            // Example list of persons
            var persons = new List<Person>
            {
                new Person { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
                new Person { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
                new Person { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
            };

            // Check if the request method is POST
            if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
            {
                // Create a new PDF renderer
                ChromePdfRenderer renderer = new ChromePdfRenderer();

                // Configure rendering options for better output
                renderer.RenderingOptions.MarginTop = 40;
                renderer.RenderingOptions.MarginBottom = 40;
                renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;
                renderer.RenderingOptions.Title = "Persons Report";

                // Render View to PDF document
                PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons);

                Response.Headers.Add("Content-Disposition", "inline");

                // Output PDF document
                return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf");
            }

            return View(persons);
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}
$vbLabelText   $csharpLabel

Nach der Verwendung der Methode RenderRazorViewToPdf erhalten Sie ein PdfDocument Objekt, das für weitere Erweiterungen und Modifikationen offen ist. Sie können das PDF in die Formate PDF/A oder PDF/UA konvertieren, dem generierten PDF Ihre digitale Signatur hinzufügen oder PDF-Dokumente nach Bedarf zusammenführen und aufteilen. Zusätzlich ermöglicht die Bibliothek das Drehen von Seiten, das Einfügen von Anmerkungen oder Lesezeichen und das Aufbringen einzigartiger Wasserzeichen auf Ihre PDF-Dateien.

Was ist der IRazorViewRenderer-Dienst?

Die IRazorViewRenderer ist eine Serviceschnittstelle, die vom IronPdf.Extensions.Mvc.Core Paket bereitgestellt wird und die Konvertierung von Razor Ansichten in HTML übernimmt. Es wird in die View Engine von ASP.NET Core integriert, um .cshtml-Dateien mit den zugehörigen Modellen zu verarbeiten, die gesamte Razor-Syntax auszuführen und das endgültige HTML zu erzeugen, das IronPDF in PDF konvertiert.

Warum vor dem Rendering auf die POST-Methode prüfen?

Die Prüfung auf POST stellt sicher, dass die PDF-Generierung nur dann erfolgt, wenn sie explizit über ein Formular angefordert wird. Dies verhindert eine versehentliche PDF-Erzeugung beim Laden der Seite und ermöglicht es, mit derselben Aktion sowohl die HTML-Ansicht (bei GET) als auch den PDF-Download (bei POST) zu bedienen. Dieses Muster folgt den RESTful-Prinzipien und bietet eine bessere Benutzerfreundlichkeit.

Wie kann ich die PDF-Ausgabe anpassen?

IronPDF bietet umfangreiche Anpassungsmöglichkeiten über die Eigenschaft RenderingOptions. Hier ist ein Beispiel mit erweiterten Einstellungen:

// Advanced rendering configuration example
var renderer = new ChromePdfRenderer();

// Page setup
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Headers and footers with merge fields
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    Height = 25,
    HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Page {page} of {total-pages}</div>"
};

// JavaScript execution delay for dynamic content
renderer.RenderingOptions.WaitFor = new WaitFor()
{
    RenderDelay = 500, // Wait 500ms for JS execution
    NetworkIdle = NetworkIdleTypes.NetworkIdle0 // Wait for network requests
};

// Apply watermark
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    DrawDividerLine = true,
    CenterText = "CONFIDENTIAL",
    Font = new FontTypes() { FontSize = 16 }
};
// Advanced rendering configuration example
var renderer = new ChromePdfRenderer();

// Page setup
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Headers and footers with merge fields
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    Height = 25,
    HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Page {page} of {total-pages}</div>"
};

// JavaScript execution delay for dynamic content
renderer.RenderingOptions.WaitFor = new WaitFor()
{
    RenderDelay = 500, // Wait 500ms for JS execution
    NetworkIdle = NetworkIdleTypes.NetworkIdle0 // Wait for network requests
};

// Apply watermark
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    DrawDividerLine = true,
    CenterText = "CONFIDENTIAL",
    Font = new FontTypes() { FontSize = 16 }
};
$vbLabelText   $csharpLabel

Was sind häufige Controller-Fehler?

Zu den häufigen Fehlern gehören Null-Referenz-Ausnahmen, wenn Dienste nicht ordnungsgemäß injiziert werden, Pfadprobleme bei der Angabe von Ansichtspositionen und Modellbindungsprobleme. Stellen Sie sicher, dass alle erforderlichen Dienste in Program.cs registriert sind und verwenden Sie relative Pfade vom Projektstammverzeichnis aus, wenn Sie Ansichtsspeicherorte angeben. Aktivieren Sie zur Fehlerbehebung detaillierte Fehlermeldungen im Entwicklungsmodus.

Wie füge ich eine Ansicht hinzu?

  • Klicken Sie mit der rechten Maustaste auf die neu hinzugefügte Aktion Person und wählen Sie "Ansicht hinzufügen".

Das Kontextmenü von Visual Studio zeigt die Option

  • Wählen Sie "Razor View" für das neue Gerüsteelement.

Hinzufügen eines Razor -Ansichtsdialogs in Visual Studio, der die Auswahl der Listenvorlage und der Person-Modellklasse mit Layoutoptionen anzeigt

  • Wählen Sie die Vorlage "Liste" und die Modellklasse Person aus.

Hinzufügen eines Razor -Ansichtsdialogs in Visual Studio, der die Auswahl der Listenvorlage und der Person-Modellklasse mit Layoutoptionen anzeigt

Dadurch wird eine .cshtml-Datei mit dem Namen Persons erstellt.

  • Navigieren Sie zum Ordner "Views" -> Ordner "Home" -> Datei Persons.cshtml.

Um eine Schaltfläche hinzuzufügen, die die Aktion Persons auslöst, verwenden Sie den folgenden Code:

@using (Html.BeginForm("Persons", "Home", FormMethod.Post))
{
    <input type="submit" value="Print Person" />
}
@using (Html.BeginForm("Persons", "Home", FormMethod.Post))
{
    <input type="submit" value="Print Person" />
}
HTML

Warum FormMethod.Post für die PDF-Generierung verwenden?

Die Verwendung von POST zur PDF-Generierung entspricht den Best Practices im Web, indem die Aktion explizit gemacht und eine ungewollte PDF-Generierung durch Browser-Aktualisierungen oder gespeicherte URLs verhindert wird. GET Anfragen sollten idempotent sein (den Serverzustand nicht verändern), während POST Anfragen eine Aktion anzeigen, die ein Ergebnis erzeugt – in diesem Fall die Generierung eines PDF-Dokuments.

Wie kann ich die PDF-Druckschaltfläche gestalten?

Gestalten Sie die Druckschaltfläche mit CSS-Klassen und erweitern Sie sie mit JavaScript, um die Benutzerfreundlichkeit zu verbessern. Hier ist eine erweiterte Version:

@using (Html.BeginForm("Persons", "Home", FormMethod.Post, new { @class = "pdf-form" }))
{
    <button type="submit" class="btn btn-primary pdf-download-btn">
        <i class="fas fa-file-pdf"></i> Download as PDF
    </button>
}

<style>
    .pdf-download-btn {
        background-color: #dc3545;
        color: white;
        padding: 10px 20px;
        border: none;
        border-radius: 5px;
        cursor: pointer;
        transition: background-color 0.3s ease;
    }

    .pdf-download-btn:hover {
        background-color: #c82333;
    }

    .pdf-download-btn:active {
        transform: translateY(1px);
    }
</style>

<script>
    // Optional: Show loading indicator during PDF generation
    document.querySelector('.pdf-form').addEventListener('submit', function() {
        const button = this.querySelector('button');
        button.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Generating PDF...';
        button.disabled = true;
    });
</script>
@using (Html.BeginForm("Persons", "Home", FormMethod.Post, new { @class = "pdf-form" }))
{
    <button type="submit" class="btn btn-primary pdf-download-btn">
        <i class="fas fa-file-pdf"></i> Download as PDF
    </button>
}

<style>
    .pdf-download-btn {
        background-color: #dc3545;
        color: white;
        padding: 10px 20px;
        border: none;
        border-radius: 5px;
        cursor: pointer;
        transition: background-color 0.3s ease;
    }

    .pdf-download-btn:hover {
        background-color: #c82333;
    }

    .pdf-download-btn:active {
        transform: translateY(1px);
    }
</style>

<script>
    // Optional: Show loading indicator during PDF generation
    document.querySelector('.pdf-form').addEventListener('submit', function() {
        const button = this.querySelector('button');
        button.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Generating PDF...';
        button.disabled = true;
    });
</script>
HTML

Welche Ansichtsvorlagen eignen sich am besten für PDFs?

Die Vorlagen List und Details eignen sich besonders gut für die PDF-Erstellung, da sie strukturierte Layouts bieten. Benutzerdefinierte Vorlagen, die speziell für die PDF-Ausgabe entwickelt wurden, liefern oft die besten Ergebnisse. Ziehen Sie in Erwägung, spezielle PDF-Ansichten zu erstellen, die für das Drucklayout und nicht für die Bildschirmdarstellung optimiert sind, indem Sie Navigationselemente entfernen und sich auf die Darstellung des Inhalts konzentrieren.

Wie füge ich einen Abschnitt zur oberen Navigationsleiste hinzu?

  • Navigieren Sie im selben Ordner "Views" zum Ordner "Shared" -> _Layout.cshtml. Platzieren Sie den Navigationspunkt Person nach Home.

Stellen Sie sicher, dass der Wert des Attributs asp-action exakt mit unserem Dateinamen übereinstimmt, der in diesem Fall Persons lautet.

<header>
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container-fluid">
            <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">ViewToPdfMVCCoreSample</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                    aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                <ul class="navbar-nav flex-grow-1">
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Persons">Person</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
</header>
<header>
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container-fluid">
            <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">ViewToPdfMVCCoreSample</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                    aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                <ul class="navbar-nav flex-grow-1">
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Persons">Person</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
</header>
HTML

Warum muss die asp-Aktion genau übereinstimmen?

Das Attribut asp-action verwendet die Tag-Helfer von ASP.NET Core, um basierend auf Ihrer Routing-Konfiguration die korrekte URL zu generieren. Eine exakte Übereinstimmung stellt sicher, dass der Link zur richtigen Controller-Aktion führt. Unstimmigkeiten führen zu 404-Fehlern oder zur Weiterleitung zu unbeabsichtigten Aktionen. Das Tag-Helper-System unterscheidet Groß- und Kleinschreibung und muss dem exakten Methodennamen in Ihrem Controller entsprechen.

Wenn die Navigationslinks nicht mit den Controller-Aktionen übereinstimmen, erhalten die Benutzer 404-Fehler oder werden auf falsche Seiten weitergeleitet. Während der Entwicklung zeigt die Ausnahmeseite für Entwickler von ASP.NET Core detaillierte Routing-Fehler an. In der Produktion sehen die Benutzer generische Fehlerseiten. Vergewissern Sie sich immer, dass die Navigationslinks genau mit den Namen der Controller-Aktionen übereinstimmen, um fehlerhafte Benutzererfahrungen zu vermeiden.

Wie kann ich die Datei Program.cs bearbeiten?

Registrieren Sie die IHttpContextAccessor und IRazorViewRenderer Schnittstelle zum Dependency Injection (DI) Container. Sehen Sie sich den Code unten als Referenz an.

using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc.ViewFeatures;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();

// Register IRazorViewRenderer here
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();

// Optional: Configure IronPDF license if you have one
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();
using IronPdf.Extensions.Mvc.Core;
using Microsoft.AspNetCore.Mvc.ViewFeatures;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();

// Register IRazorViewRenderer here
builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>();

// Optional: Configure IronPDF license if you have one
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();
$vbLabelText   $csharpLabel

Warum Dienste als Singleton registrieren?

Singleton-Dienste werden einmal erstellt und während der gesamten Lebensdauer der Anwendung wiederverwendet, wodurch sie sich für zustandslose Dienste wie IRazorViewRenderer eignen. Dieses Muster reduziert den Speicher-Overhead und verbessert die Leistung, da der View-Rendering-Dienst keinen anforderungsspezifischen Status beibehält. Der IHttpContextAccessor muss ein Singleton sein, um über verschiedene Dienstlebensdauern hinweg zugänglich zu sein.

Wozu wird ITempDataProvider verwendet?

ITempDataProvider ermöglicht die temporäre Datenspeicherung zwischen Anfragen, üblicherweise verwendet zur Anzeige von Meldungen nach Weiterleitungen. Im Zusammenhang mit der PDF-Generierung stellt sie sicher, dass der Status der Ansicht beim Rendern von Ansichten in PDF ordnungsgemäß beibehalten wird. Der CookieTempDataProvider speichert diese temporären Daten in verschlüsselten Cookies und bietet so einen sicheren Mechanismus für die Zustandsverwaltung.

Kann ich stattdessen Scoped Services verwenden?

Während man für bestimmte Szenarien Scoped Services verwenden könnte, funktioniert IRazorViewRenderer am besten als Singleton, da es keinen anfragespezifischen Zustand speichert. Bei der Verwendung von "scoped services" würden für jede Anfrage neue Instanzen erstellt, was den Speicherverbrauch ohne Nutzen erhöht. Wenn Sie jedoch skalierte Dienste in Ihre Ansichten einbinden müssen, achten Sie auf eine ordnungsgemäße Verwaltung der Dienstlebensdauer, um Laufzeitfehler zu vermeiden.

Das Projekt ausführen

Hier wird gezeigt, wie man das Projekt ausführt und ein PDF-Dokument erzeugt. Wenn Sie die Anwendung starten, navigieren Sie über das obere Navigationsmenü zur Seite Persons und klicken Sie dann auf die Schaltfläche Print Person, um die PDF-Datei zu generieren und herunterzuladen.

Visual Studio showing HomeController.cs with ASP.NET Core MVC controller code and IntelliSense assistance

Wo kann ich das ASP.NET Core MVC-Projekt herunterladen?

Laden Sie den vollständigen Code für diesen Leitfaden herunter. Er wird als gezippte Datei geliefert, die Sie in Visual Studio als ASP.NET Core Web App (Model-View-Controller) Projekt öffnen können.

Laden Sie das ASP.NET Core MVC Beispielprojekt herunter

Was ist im Beispielprojekt enthalten?

Das Beispielprojekt umfasst eine vollständig konfigurierte ASP.NET Core MVC-Anwendung mit IronPDF-Integration, die die View-to-PDF-Konvertierung demonstriert. Es enthält das Person Modell, HomeController mit PDF-Generierungslogik, Persons Ansicht mit korrekter Razor Syntax und alle notwendigen Service-Registrierungen in Program.cs. Das Projekt umfasst auch Beispiel-Styling und Layout-Konfigurationen, die für die PDF-Ausgabe optimiert sind.

Welche Visual Studio-Version sollte ich verwenden?

Visual Studio 2022 (Version 17.0 oder höher) wird für die beste Erfahrung mit .NET 6+ Projekten empfohlen. Visual Studio Code mit C#-Erweiterungen eignet sich auch gut für die plattformübergreifende Entwicklung. Stellen Sie sicher, dass Sie die ASP.NET- und Webentwicklungs-Workloads installiert haben. Das Projekt zielt standardmäßig auf .NET 6.0 ab, kann aber auf neuere Versionen aktualisiert werden.

Wie behebe ich Probleme bei der Projekteinrichtung?

Häufige Probleme bei der Einrichtung sind fehlende NuGet-Pakete, falsche .NET SDK-Versionen oder Konfigurationsprobleme. Stellen Sie zunächst die NuGet Pakete mithilfe von dotnet restore oder über den Paket-Manager von Visual Studio wieder her. Überprüfen Sie mit Hilfe von dotnet --version, ob Ihre .NET SDK-Version den Projektanforderungen entspricht. Informationen zu Lizenzierungsfragen finden Sie in der Dokumentation zum Lizenzschlüssel. Bei Rendering-Problemen finden Sie in der Anleitung zur Fehlerbehebung Lösungen.

Bereit zu sehen, was Sie sonst noch tun können? Schauen Sie sich unsere Tutorial-Seite hier an: PDFs konvertieren

Häufig gestellte Fragen

Wie lassen sich CSHTML-Ansichten in ASP.NET Core MVC am einfachsten in PDF umwandeln?

Am einfachsten ist die Verwendung der RenderRazorViewToPdf-Methode von IronPDF, mit der Sie Ihre .cshtml-Dateien mit nur einer Zeile Code in PDF-Dokumente umwandeln können. Rufen Sie einfach auf: new IronPdf.ChromePdfRenderer().RenderRazorViewToPdf(HttpContext, "Views/Home/Report.cshtml", model).SaveAs("report.pdf");

Welche NuGet-Pakete benötige ich für die Konvertierung von Ansichten in PDFs in ASP.NET Core MVC?

Sie benötigen zwei Pakete: IronPDF (das Hauptpaket) und IronPdf.Extensions.Mvc.Core (das Erweiterungspaket). Das Erweiterungspaket bietet spezielle Funktionen für die Integration mit dem Dependency Injection System von ASP.NET Core und der Razor View Rendering Pipeline.

Kann ich bei der Konvertierung von CSHTML in PDF CSS-Styling und JavaScript anwenden?

Ja, IronPDF unterstützt CSS-Styling, JavaScript-Ausführung und benutzerdefinierte Schriftarten beim Rendern von Ansichten in PDF vollständig. Dadurch wird sichergestellt, dass Ihre PDFs das gleiche Aussehen und die gleiche Funktionalität wie Ihre Webansichten haben, einschließlich responsive CSS und dynamische JavaScript-Inhalte.

Was sind die wichtigsten Schritte zur Implementierung der View-to-PDF-Konvertierung in meinem ASP.NET Core MVC-Projekt?

Der Arbeitsablauf umfasst 5 Schritte: 1) Herunterladen von IronPDF und seiner MVC Core-Erweiterung, 2) Hinzufügen einer Modellklasse für Ihre Daten, 3) Bearbeiten Ihres Controllers, um die RenderRazorViewToPdf-Methode zu verwenden, 4) Erstellen oder Ändern einer Ansicht (.cshtml-Datei) für das PDF-Rendering und 5) Ausführen Ihrer Anwendung, um PDFs zu erzeugen.

Wie funktioniert das MVC-Muster bei der PDF-Generierung aus Ansichten?

In ASP.NET Core MVC enthält das Model Ihre Daten und Geschäftslogik, die View (Ihre .cshtml-Datei) stellt die Benutzeroberfläche dar und zeigt Daten an, und der Controller verarbeitet Anfragen und verwendet die RenderRazorViewToPdf-Methode von IronPDF, um die PDF-Erzeugung aus der View zu orchestrieren.

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
Rezensiert von
Jeff Fritz
Jeffrey T. Fritz
Principal Program Manager - .NET Community Team
Jeff ist außerdem Principal Program Manager für das .NET- und Visual Studio-Team. Er ist der ausführende Produzent der .NET Conf Virtual Conference Series und moderiert ‚Fritz and Friends‘, einen Livestream für Entwickler, der zweimal wöchentlich ausgestrahlt wird. Dort spricht er über Technik und schreibt gemeinsam mit den Zuschauern Code. Jeff schreibt Workshops, Präsentationen und plant Inhalte für die größten Microsoft-Entwicklerveranstaltungen, einschließlich Microsoft Build, Microsoft Ignite, .NET Conf und dem Microsoft MVP Summit.
Bereit anzufangen?
Nuget Downloads 17,803,474 | Version: 2026.3 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronPdf
Führen Sie eine Probe aus Sehen Sie zu, wie Ihr HTML-Code in eine PDF-Datei umgewandelt wird.