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-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 (Modèle-Vue-Contrôleur) est une application web fournie par Microsoft pour la création d'applications web 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 .NET à 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 les vues en PDF dans ASP.NET Core MVC
- Ajouter une classe de modèle pour les données
- Modifiez le fichier "HomeController.cs" et utilisez la fonction
RenderRazorViewToPdf
méthode - Créez une nouvelle vue et modifiez le fichier ".cshtml" pour rendre le PDF
- Télécharger l'exemple de projet pour un démarrage rapide
Paquet d'extension IronPDF
Le paquet IronPdf.Extensions.Mvc.Core est une extension du paquet principal IronPdf. Les packages IronPdf.Extensions.Mvc.Core et IronPdf sont tous deux nécessaires pour rendre les vues des 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'une application Web ASP.NET Core (Modèle-Vue-Contrôleur) 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; }
}
}
Namespace ViewToPdfMVCCoreSample.Models
Public Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property Title() As String
Public Property Description() As String
End Class
End Namespace
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 qui contient les données requises à la méthode RenderRazorViewToPdf
. Les utilisateurs peuvent utiliser les Options de rendu pour accéder à une série de fonctionnalités, telles que l'ajout d'options de rendu personnalisées le texte, y compris les en-têtes et pieds de page HTML dans le PDF résultant, en définissant des marges personnalisées et en appliquant des numéros de page.
[{i :(Le document PDF peut être visualisé dans le navigateur à l'aide du code suivant : Fichier(pdf.BinaryData, "application/pdf")
. Cependant, si vous téléchargez le PDF après l'avoir visualisé dans le navigateur, vous obtiendrez 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 });
}
}
}
Imports IronPdf.Extensions.Mvc.Core
Imports Microsoft.AspNetCore.Mvc
Imports System.Diagnostics
Imports ViewToPdfMVCCoreSample.Models
Namespace ViewToPdfMVCCoreSample.Controllers
Public Class HomeController
Inherits Controller
Private ReadOnly _logger As ILogger(Of HomeController)
Private ReadOnly _viewRenderService As IRazorViewRenderer
Private ReadOnly _httpContextAccessor As IHttpContextAccessor
Public Sub New(ByVal logger As ILogger(Of HomeController), ByVal viewRenderService As IRazorViewRenderer, ByVal httpContextAccessor As IHttpContextAccessor)
_logger = logger
_viewRenderService = viewRenderService
_httpContextAccessor = httpContextAccessor
End Sub
Public Function Index() As IActionResult
Return View()
End Function
Public Async Function Persons() As Task(Of IActionResult)
'INSTANT VB NOTE: The local variable persons was renamed since Visual Basic will not allow local variables with the same name as their enclosing function or property:
Dim persons_Conflict = New List(Of Person) From {
New Person With {
.Name = "Alice",
.Title = "Mrs.",
.Description = "Software Engineer"
},
New Person With {
.Name = "Bob",
.Title = "Mr.",
.Description = "Software Engineer"
},
New Person With {
.Name = "Charlie",
.Title = "Mr.",
.Description = "Software Engineer"
}
}
If _httpContextAccessor.HttpContext.Request.Method = HttpMethod.Post.Method Then
Dim renderer As New ChromePdfRenderer()
' Render View to PDF document
Dim pdf As PdfDocument = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons_Conflict)
Response.Headers.Add("Content-Disposition", "inline")
' Output PDF document
Return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf")
End If
Return View(persons_Conflict)
End Function
Public Function Privacy() As IActionResult
Return View()
End Function
<ResponseCache(Duration := 0, Location := ResponseCacheLocation.None, NoStore := True)>
Public Function [Error]() As IActionResult
Return View(New ErrorViewModel With {.RequestId = If(Activity.Current?.Id, HttpContext.TraceIdentifier)})
End Function
End Class
End Namespace
Après avoir utilisé la méthode RenderRazorToPdf
, vous recevrez un objet PdfDocument qui est ouvert à d'autres améliorations et modifications. Vous avez la possibilité de convertir le PDF en PDFA ou PDFUA ajoutez votre signature numérique au PDF généré, ou fusionner et scinder Des documents PDF si nécessaire. En outre, la bibliothèque vous permet de faire pivoter les pages, d'insérer des annotations ou signetset 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 les interfaces IHttpContextAccessor et IRazorViewRenderer dans l'injection de dépendances (DI) contenant. 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();
Imports IronPdf.Extensions.Mvc.Core
Imports Microsoft.AspNetCore.Mvc.ViewFeatures
Private builder = WebApplication.CreateBuilder(args)
' Add services to the container.
builder.Services.AddControllersWithViews()
builder.Services.AddSingleton(Of IHttpContextAccessor, HttpContextAccessor)()
builder.Services.AddSingleton(Of ITempDataProvider, CookieTempDataProvider)()
' Register IRazorViewRenderer here
builder.Services.AddSingleton(Of IRazorViewRenderer, RazorViewRenderer)()
Dim app = builder.Build()
' Configure the HTTP request pipeline.
If Not app.Environment.IsDevelopment() Then
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()
End If
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 se présente sous la forme d'un fichier zippé que vous pouvez ouvrir dans Visual Studio en tant qu'application Web ASP.NET Core (Modèle-Vue-Contrôleur) projet.