Comment convertir les vues en PDF dans ASP.NET Core MVC ?
Une vue est un composant du Framework .NET utilisé pour générer des balises HTML dans les applications web. Il fait partie du modèle Modèle-Vue-Contrôleur (MVC), couramment utilisé dans les applications ASP.NET MVC et ASP.NET Core MVC. Les vues sont chargées de présenter les données à l'utilisateur en restituant le contenu HTML de manière dynamique.
ASP.NET Core Web App MVC (Model-View-Controller) est une application web fournie par Microsoft pour créer des applications web en utilisant ASP.NET Core.
- Modèle : Le modèle représente les données et la logique d'entreprise, gère les interactions entre les données et communique avec les sources de données.
- Vue : La vue présente l'interface utilisateur, se concentre sur l'affichage des données et restitue les informations à l'utilisateur.
Le contrôleur : Le contrôleur gère les entrées des utilisateurs, répond aux demandes, communique avec le modèle et orchestre les interactions entre le modèle et la vue.
IronPDF simplifie le processus de création de fichiers PDF à partir de vues au sein d'un projet ASP.NET Core MVC. La génération de PDF est ainsi facile et directe dans ASP.NET Core MVC.
Comment convertir les vues en PDF dans ASP.NET Core MVC ?
- Téléchargez la bibliothèque C# pour convertir des vues en PDFs dans ASP.NET Core MVC
- Ajouter une classe de modèle pour les données
- Modifiez le fichier "HomeController.cs" et utilisez la méthode
RenderRazorViewToPdf
- Créez une nouvelle Vue et modifiez le fichier ".cshtml" pour rendre le PDF
- Téléchargez le projet d'exemple pour un démarrage rapide
Paquet d'extension IronPDF
Le package IronPdf.Extensions.Mvc.Core est une extension du package principal IronPdf. Les packages IronPdf.Extensions.Mvc.Core et IronPdf sont tous deux nécessaires pour rendre les vues vers les documents PDF dans une application ASP.NET Core MVC.
Install-Package IronPdf.Extensions.Mvc.Core
Installer avec NuGet
Installer-Package IronPDF.Extensions.Mvc.Core
Rendre les vues en PDF
Vous aurez besoin d'un projet d'application Web ASP.NET Core (Model-View-Controller) pour convertir les vues en fichiers PDF.
Ajouter une classe de modèle
- Naviguer vers le dossier "Models
- Créez un nouveau fichier de classe C# nommé "Personne" Cette classe servira de modèle pour représenter les données individuelles. Utilisez l'extrait de code suivant :
: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; }
}
}
Modifier le contrôleur
Naviguez jusqu'au dossier "Controllers" et ouvrez le fichier "HomeController". Nous allons apporter des modifications uniquement au HomeController et ajouter l'action "Persons". Veuillez vous référer au code ci-dessous pour obtenir des conseils :
Le code ci-dessous instancie d'abord la classe ChromePdfRenderer, en passant un IRazorViewRenderer, le chemin vers notre "Persons.cshtml", et la liste contenant les données requises à la méthode RenderRazorViewToPdf
. Les utilisateurs peuvent utiliser RenderingOptions pour accéder à une gamme de fonctionnalités, comme l'ajout de texte personnalisé, y compris des en-têtes et pieds de page HTML dans le PDF résultant, la définition de marges personnalisées, et l'application de numéros de page.
[{i:(Le document PDF peut être visualisé dans le navigateur en utilisant le code suivant : File(pdf.BinaryData, "application/pdf")
.] Toutefois, le téléchargement du PDF après l'avoir consulté dans le navigateur entraîne un document PDF endommagé.
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 });
}
}
}
Après avoir utilisé la méthode RenderRazorToPdf
, vous recevrez un objet PdfDocument ouvert à des améliorations et modifications supplémentaires. Vous avez la flexibilité de convertir le PDF aux formats PDFA ou PDFUA, d'ajouter votre signature numérique au PDF généré, ou de fusionner et diviser des documents PDF selon les besoins. De plus, la bibliothèque vous permet de faire pivoter les pages, d'insérer des annotations ou des signets, et d'imprimer des filigranes uniques sur vos fichiers PDF.
Ajouter une vue
Cliquez avec le bouton droit de la souris sur l'action Personne nouvellement ajoutée et sélectionnez "Ajouter une vue"
Choisissez "Razor View" pour le nouvel élément échafaudé.
Sélectionnez le modèle "Liste" et la classe de modèle "Personne".
Cela créera un fichier .cshtml nommé "Personnes"
Naviguez jusqu'au dossier "Views" -> dossier "Home" -> fichier "Persons.cshtml".
Pour ajouter un bouton qui invoque l'action "Personnes", utilisez le code ci-dessous :
@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" />
}
Ajouter une section à la barre de navigation supérieure
Dans le même dossier "Views", naviguez jusqu'au dossier "Shared" -> _Layout.cshtml. Placez l'élément de navigation "Personne" après "Accueil".
Assurez-vous que la valeur de l'attribut asp-action correspond exactement au nom de notre fichier, qui dans ce cas est "Persons".
<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>
Modifier le fichier Program.cs
Nous allons enregistrer l'interface IHttpContextAccessor et IRazorViewRenderer dans le conteneur d'injection de dépendances (DI). Veuillez consulter le code ci-dessous à titre de référence.
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();
Exécuter le projet
Elle vous montrera comment exécuter le projet et générer un document PDF.

Télécharger le projet ASP.NET Core MVC
Vous pouvez télécharger le code complet de ce guide. Il est proposé sous forme de fichier compressé que vous pouvez ouvrir dans Visual Studio en tant que projet d'application Web ASP.NET Core (Model-View-Controller).