Comment convertir des pages Razor en PDF dans une application Web ASP.NET Core ?

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

par Chaknith Bin

Une page Razor est un fichier portant l'extension .cshtml qui combine C# et HTML pour générer du contenu web. Dans ASP.NET Core, les Razor Pages sont un moyen plus simple d'organiser le code pour les applications web, ce qui en fait un bon choix pour les pages simples qui sont en lecture seule ou qui font de la simple saisie de données.

Une application web ASP.NET Core est une application web construite à l'aide d'ASP.NET Core, un framework multiplateforme pour le développement d'applications web modernes.

IronPDF simplifie le processus de création de fichiers PDF à partir de Razor Pages au sein d'un projet ASP.NET Core Web App. La génération de PDF est ainsi facile et directe dans les applications web ASP.NET Core.



Paquet d'extension IronPDF

Le paquet IronPdf.Extensions.Razor est une extension du paquet principal IronPdf. Les packages IronPdf.Extensions.Razor et IronPdf sont tous deux nécessaires pour effectuer le rendu des pages Razor en documents PDF dans une application web ASP.NET Core.

Install-Package IronPdf.Extensions.Razor
Bibliothèque NuGet C# pour PDF

Installer avec NuGet

Installer-Package IronPDF.Extensions.Razor

Rendre les pages Razor en PDF

Vous aurez besoin d'un projet ASP.NET Core Web App pour convertir les pages Razor en fichiers PDF.

Créer une classe de modèle

  • Créez un nouveau dossier dans le projet et nommez-le "Modèles"
  • Ajoutez une classe C# standard au dossier et nommez-la "Personne" Cette classe servira de modèle pour les données individuelles. Utilisez l'extrait de code suivant :
:path=/static-assets/pdf/content-code-examples/how-to/cshtml-to-pdf-razor-model.cs
namespace RazorPageSample.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 RazorPageSample.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
VB   C#

Ajouter une page Razor

Ajoutez une page Razor vide au dossier "Pages" et nommez-la "persons.cshtml"

  • Modifiez le fichier "Persons.cshtml" nouvellement créé en utilisant l'exemple de code fourni ci-dessous.

    Le code ci-dessous permet d'afficher les informations dans le navigateur.

@page
@using RazorPageSample.Models;
@model RazorPageSample.Pages.PersonsModel
@{
}

<table class="table">
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>Description</th>
    </tr>
    @foreach (var person in ViewData ["personList"] as List<Person>)
    {
        <tr>
            <td>@person.Name</td>
            <td>@person.Title</td>
            <td>@person.Description</td>
        </tr>
    }
</table>

<form method="post">
    <button type="submit">print</button>
</form>
@page
@using RazorPageSample.Models;
@model RazorPageSample.Pages.PersonsModel
@{
}

<table class="table">
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>Description</th>
    </tr>
    @foreach (var person in ViewData ["personList"] as List<Person>)
    {
        <tr>
            <td>@person.Name</td>
            <td>@person.Title</td>
            <td>@person.Description</td>
        </tr>
    }
</table>

<form method="post">
    <button type="submit">print</button>
</form>
HTML

Ensuite, le code ci-dessous instancie d'abord la classe ChromePdfRenderer. Passer this à la méthode RenderRazorToPdf est suffisant pour convertir cette page Razor en un document PDF.

L'utilisateur a un accès complet aux fonctionnalités disponibles dans RenderingOptions. Ces caractéristiques comprennent la possibilité d'appliquernuméros de page au PDF généré, définir des marges personnalisées et ajouter desainsi que les en-têtes et pieds de page HTML.

  • Ouvrez le menu déroulant du fichier "Persons.cshtml" pour voir le fichier "Persons.cshtml.cs".
  • Modifiez le fichier "Persons.cshtml.cs" avec le code ci-dessous.

    [{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.Razor.Pages;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorPageSample.Models;

namespace RazorPageSample.Pages
{
    public class PersonsModel : PageModel
    {
        [BindProperty(SupportsGet = true)]
        public List<Person> persons { get; set; }

        public void OnGet()
        {
            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" }
            };

            ViewData ["personList"] = persons;
        }
        public IActionResult OnPostAsync()
        {
            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" }
            };

            ViewData ["personList"] = persons;

            ChromePdfRenderer renderer = new ChromePdfRenderer();

            // Render Razor Page to PDF document
            PdfDocument pdf = renderer.RenderRazorToPdf(this);

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

            return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");

            // View output PDF on browser
            return File(pdf.BinaryData, "application/pdf");
        }
    }
}
using IronPdf.Razor.Pages;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorPageSample.Models;

namespace RazorPageSample.Pages
{
    public class PersonsModel : PageModel
    {
        [BindProperty(SupportsGet = true)]
        public List<Person> persons { get; set; }

        public void OnGet()
        {
            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" }
            };

            ViewData ["personList"] = persons;
        }
        public IActionResult OnPostAsync()
        {
            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" }
            };

            ViewData ["personList"] = persons;

            ChromePdfRenderer renderer = new ChromePdfRenderer();

            // Render Razor Page to PDF document
            PdfDocument pdf = renderer.RenderRazorToPdf(this);

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

            return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");

            // View output PDF on browser
            return File(pdf.BinaryData, "application/pdf");
        }
    }
}
Imports IronPdf.Razor.Pages
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.Mvc.RazorPages
Imports RazorPageSample.Models

Namespace RazorPageSample.Pages
	Public Class PersonsModel
		Inherits PageModel

		<BindProperty(SupportsGet := True)>
		Public Property persons() As List(Of Person)

		Public Sub OnGet()
			persons = 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"
				}
			}

			ViewData ("personList") = persons
		End Sub
		Public Function OnPostAsync() As IActionResult
			persons = 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"
				}
			}

			ViewData ("personList") = persons

			Dim renderer As New ChromePdfRenderer()

			' Render Razor Page to PDF document
			Dim pdf As PdfDocument = renderer.RenderRazorToPdf(Me)

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

			Return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf")

			' View output PDF on browser
			Return File(pdf.BinaryData, "application/pdf")
		End Function
	End Class
End Namespace
VB   C#

La méthode RenderRazorToPdf renvoie un objet PdfDocument qui peut subir des traitements et des modifications supplémentaires. Vous pouvez exporter le PDF en tant quePDFA ouPDFUA, appliquer unsignature numérique au document PDF rendu, oufusionner et scinder Documents PDF. La méthode permet également de faire pivoter les pages, d'ajouter desannotations ousignetsettamponner des filigranes personnalisés sur votre PDF.

Ajouter une section à la barre de navigation supérieure

  • Naviguez jusqu'au dossier Pages -> Dossier partagé -> _Layout.cshtml. Placez l'élément de navigation "Personne" après "Accueil".

    Assurez-vous que la valeur de l'attribut asp-page 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">
            <a class="navbar-brand" asp-area="" asp-page="/Index">RazorPageSample</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-page="/Index">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/Persons">Person</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/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">
            <a class="navbar-brand" asp-area="" asp-page="/Index">RazorPageSample</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-page="/Index">Home</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/Persons">Person</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
</header>
HTML

Exécuter le projet

Elle vous montrera comment exécuter le projet et générer un document PDF.

Exécuter le projet d'application Web ASP.NET Core

Télécharger le projet d'application Web ASP.NET Core

Vous pouvez télécharger le code complet de ce guide sous forme de fichier zippé, que vous pouvez ouvrir dans Visual Studio en tant que projet ASP.NET Core Web App.

Télécharger le projet d'application web ASP.NET Core RazorPageSample.zip

Chaknith related to Télécharger le projet d'application Web ASP.NET Core

Chaknith Bin

Ingénieur logiciel

Chaknith est le Sherlock Holmes des développeurs. C'est en s'amusant à relever des défis de code qu'il s'est rendu compte pour la première fois qu'il pourrait avoir un avenir dans le domaine de l'ingénierie logicielle. Il se concentre sur IronXL et IronBarcode, mais il est fier d'aider les clients avec chaque produit. Chaknith tire parti des connaissances qu'il a acquises en discutant directement avec les clients pour améliorer les produits eux-mêmes. Ses commentaires anecdotiques vont au-delà des tickets Jira et soutiennent le développement de produits, la documentation et le marketing, afin d'améliorer l'expérience globale des clients.Quand il n'est pas au bureau, on peut le trouver en train d'apprendre sur l'apprentissage automatique, le codage et la randonnée.