Konvertieren von Ansichten in PDFs in ASP.NET Core MVC
Eine Ansicht ist eine Komponente des ASP.NET-Frameworks, die zur Erzeugung 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 den Benutzer verantwortlich, indem sie HTML-Inhalte dynamisch wiedergeben.
ASP.NET Core Web App MVC (Model-View-Controller) ist eine von Microsoft bereitgestellte Webanwendung zum Erstellen von Webanwendungen mit ASP.NET Core.
- Modell: Das Modell stellt Daten und Geschäftslogik dar, verwaltet Dateninteraktionen und kommuniziert mit Datenquellen.
- Ansicht: Die Ansicht stellt die Benutzeroberfläche dar, konzentriert sich auf die Anzeige von Daten und stellt dem Benutzer Informationen zur Verfügung.
Controller: Der Controller verarbeitet Benutzereingaben, reagiert auf Anfragen, kommuniziert mit dem Modell und steuert die Interaktionen zwischen dem Modell und der Ansicht.
IronPDF vereinfacht den Prozess der Erstellung von PDF-Dateien aus Ansichten innerhalb eines ASP.NET Core MVC-Projekts. Dies macht die PDF-Erstellung in ASP.NET Core MVC einfach und direkt.
Konvertieren von Ansichten in PDFs in ASP.NET Core MVC
- Laden Sie die C#-Bibliothek zum Konvertieren von Ansichten in PDFs in ASP.NET Core MVC herunter
- Fügen Sie eine Modellklasse für die Daten hinzu
- Bearbeiten Sie die Datei "HomeController.cs" und verwenden Sie die
RenderRazorViewToPdf
-Methode - Erstellen Sie eine neue View und bearbeiten Sie die ".cshtml"-Datei, um das PDF zu rendern
- Laden Sie das Beispielprojekt für einen schnellen Start herunter
IronPDF-Erweiterungspaket
Das IronPdf.Extensions.Mvc.Core-Paket ist eine Erweiterung des Hauptpakets IronPdf. Sowohl die IronPdf.Extensions.Mvc.Core- als auch die IronPDF-Pakete werden benötigt, um Ansichten in PDF-Dokumente in einem ASP.NET Core MVC zu rendern.
Install-Package IronPdf.Extensions.Mvc.Core
Mit NuGet installieren
Install-Package IronPDF.Extensions.Mvc.Core
Ansichten in PDFs rendern
Sie benötigen ein ASP.NET Core-Webanwendungsprojekt (Model-View-Controller), um Ansichten in PDF-Dateien umzuwandeln.
Hinzufügen einer Modellklasse
- 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 Codeschnipsel:
: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; }
}
}
Bearbeiten Sie den Controller
Navigieren Sie zum Ordner "Controllers" und öffnen Sie die Datei "HomeController". Wir werden nur Änderungen am HomeController vornehmen und die Aktion "Personen" hinzufügen. Bitte beachten Sie den nachstehenden Code als Orientierungshilfe:
Der folgende Code instanziiert zunächst die ChromePdfRenderer-Klasse, indem er einen IRazorViewRenderer, den Pfad zu unserer "Persons.cshtml" und die Liste, die die erforderlichen Daten enthält, an die RenderRazorViewToPdf
-Methode übergibt. Benutzer können RenderingOptions nutzen, um eine Reihe von Funktionen zu nutzen, wie das Hinzufügen von benutzerdefiniertem Text, einschließlich HTML-Kopf- und Fußzeilen im resultierenden PDF, das Festlegen benutzerdefinierter Ränder und das Anwenden von Seitenzahlen.
[{i:(Das PDF-Dokument kann im Browser mit dem folgenden Code angezeigt werden: File(pdf.BinaryData, "application/pdf")
.] Allerdings führt das Herunterladen der PDF-Datei nach der Anzeige 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()
{
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" }
};
if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// 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()
{
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" }
};
if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method)
{
ChromePdfRenderer renderer = new ChromePdfRenderer();
// 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 });
}
}
}
Nach der Verwendung der RenderRazorToPdf
-Methode erhalten Sie ein PdfDocument-Objekt, das für weitere Verbesserungen und Modifikationen offen ist. Sie haben die Flexibilität, das PDF in PDFA- oder PDFUA-Formate zu konvertieren, Ihre digitale Signatur zum erstellten PDF hinzuzufügen oder PDF-Dokumente nach Bedarf zu zusammenzuführen und zu teilen. Zusätzlich ermöglicht die Bibliothek das Drehen von Seiten, das Einfügen von Anmerkungen oder Lesezeichen sowie das Einprägen einzigartiger Wasserzeichen in Ihre PDF-Dateien.
Eine Ansicht hinzufügen
Klicken Sie mit der rechten Maustaste auf die neu hinzugefügte Aktion Person und wählen Sie "Ansicht hinzufügen"
Wählen Sie "Razor View" für das neue Scaffolded Item.
Wählen Sie die Vorlage "Liste" und die Modellklasse "Person".
Dadurch wird eine .cshtml-Datei mit dem Namen "Personen" erstellt
Navigieren Sie zum Ordner "Views" -> Ordner "Home" -> Datei "Persons.cshtml".
Um eine Schaltfläche hinzuzufügen, die die Aktion "Personen" aufruft, 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" />
}
Einen Abschnitt zur oberen Navigationsleiste hinzufügen
Navigieren Sie im gleichen Ordner "Views" zum Ordner "Shared" -> _Layout.cshtml. Platzieren Sie den Navigationspunkt "Person" nach "Home".
Vergewissern Sie sich, dass der Wert für das Attribut asp-action genau mit unserem Dateinamen übereinstimmt, der in diesem Fall "Personen" 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>
Datei Program.cs bearbeiten
Wir werden die Schnittstellen IHttpContextAccessor und IRazorViewRenderer beim Dependency Injection (DI) Container registrieren. Bitte prüfen Sie den nachstehenden Code zu Ihrer Information.
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>();
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>();
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();
Das Projekt ausführen
Hier erfahren Sie, wie Sie das Projekt ausführen und ein PDF-Dokument erstellen.

ASP.NET Core MVC-Projekt herunterladen
Sie können den vollständigen Code für diese Anleitung herunterladen. Er wird als ZIP-Datei bereitgestellt, die Sie in Visual Studio als ASP.NET Core Web App (Model-View-Controller)-Projekt öffnen können.