Extension du rasoir IronPDF
IronPDF est une bibliothèque PDF pour .NET et .NET Core. Il s'agit principalement d'une bibliothèque PDF gratuite, IronPdf étant une bibliothèque PDF C# commerciale. Il est gratuit pour le développement mais doit faire l'objet d'une licence pour un déploiement commercial. Ce modèle de licence plus clair n'oblige pas les développeurs à apprendre les tenants et les aboutissants des modèles de licence GNU / AGPL et leur permet de se concentrer sur leurs projets.
IronPDF permet aux développeurs .NET et .NET Core de générer, fusionner, fractionner, modifier et extraire facilement du contenu PDF en C#, F# et VB.NET pour .NET Core et .NET Framework, ainsi que de créer des PDF à partir de fichiers HTML, ASPX, CSS, JS et d'images.
IronPDF dispose d'une fonctionnalité complète d'édition et de génération de PDF via HTML to PDF. Comment cela fonctionne-t-il ? La majeure partie de la conception et de la mise en page des documents peut utiliser les ressources HTML et HTML5 existantes.
Vous pouvez télécharger le projet d'exemple C# Razor-to-PDF à partir de l'adresse suivanteIronPDF Razor View to PDF télécharger.
Comment rendre un PDF à partir de Razor View Web
- Télécharger la bibliothèque C# pour rendre le PDF à partir de la vue Razor
- Configurer le modèle et le contrôleur MVC
- Modifier le fichier Index.cshtml pour déclencher la fonction avec le bouton
- Ajouter une page Razor pour personnaliser la mise en page du PDF de sortie
- Créer une nouvelle classe C# pour gérer la récupération du contenu HTML
Fonctionnalités d'IronPDF pour les applications .NET et .NET Core
Parmi les fonctionnalités fantastiques de la bibliothèque PDF d'IronPDF, citons :
- La bibliothèque PDF .NET peut générer des PDF documents à partir de HTML, d'images et de fichiers ASPX
- Lire un texte PDF dans les applications .NET et .NET Core
- Extraction de données et d'images à partir de PDF
- Fusionner des documents PDF
- Fractionnement des PDF
- Manipulation des PDF
Avantages d'IronPDF
- La bibliothèque PDF d'IronPDF est facile à installer
- La bibliothèque IronPDF for .NET offre des options de licence simples et rapides
- IronPDF surpasse la plupart des bibliothèques PDF .NET et surpasse la plupart des bibliothèques PDF .NET Core
IronPDF est la solution PDF que vous recherchiez.
Installation de la bibliothèque IronPDF PDF
L'installation de la bibliothèque IronPDF pour PDF dans .NET ou .NET Core est assez simple. Vous pouvez l'installer de la manière suivante :
Utilisez le gestionnaire de paquets NuGet et tapez ce qui suit dans l'invite de commande :
Install-Package IronPdf
Utiliser le gestionnaire de paquets NuGet dans Visual Studio en ouvrant la section "Selecting Manage NuGet Packages" dans le menu du projet et en recherchant IronPDF, comme indiqué ci-dessous :
Figure 1 - Package NuGet IronPDF (en anglais)
Cela permet d'installer l'extension PDF.
Avec IronPDF, vous pouvez utiliser ASP.NET MVC pour renvoyer un fichier PDF. Voici quelques exemples de code :
Voici un exemple de méthode qui pourrait être utilisée par votre contrôleur.
public FileResult Generate_PDF_FromHTML_Or_MVC(long id) {
using var objPDF = Renderer.RenderHtmlAsPdf("<h1>IronPDF and MVC Example</h1>"); //Create a PDF Document
var objLength = objPDF.BinaryData.Length; //return a PDF document from a view
Response.AppendHeader("Content-Length", objLength.ToString());
Response.AppendHeader("Content-Disposition", "inline; filename=PDFDocument_" + id + ".pdf");
return File(objPDF.BinaryData, "application/pdf;");
}
public FileResult Generate_PDF_FromHTML_Or_MVC(long id) {
using var objPDF = Renderer.RenderHtmlAsPdf("<h1>IronPDF and MVC Example</h1>"); //Create a PDF Document
var objLength = objPDF.BinaryData.Length; //return a PDF document from a view
Response.AppendHeader("Content-Length", objLength.ToString());
Response.AppendHeader("Content-Disposition", "inline; filename=PDFDocument_" + id + ".pdf");
return File(objPDF.BinaryData, "application/pdf;");
}
Public Function Generate_PDF_FromHTML_Or_MVC(ByVal id As Long) As FileResult
Dim objPDF = Renderer.RenderHtmlAsPdf("<h1>IronPDF and MVC Example</h1>") 'Create a PDF Document
Dim objLength = objPDF.BinaryData.Length 'return a PDF document from a view
Response.AppendHeader("Content-Length", objLength.ToString())
Response.AppendHeader("Content-Disposition", "inline; filename=PDFDocument_" & id & ".pdf")
Return File(objPDF.BinaryData, "application/pdf;")
End Function
Voici un exemple d'utilisation d'un PDF existant en ASP.NET.
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=\"FileName.pdf\"");
Response.BinaryWrite(System.IO.File.ReadAllBytes("PdfName.pdf"));
Response.Flush();
Response.End();
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=\"FileName.pdf\"");
Response.BinaryWrite(System.IO.File.ReadAllBytes("PdfName.pdf"));
Response.Flush();
Response.End();
Response.Clear()
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition", "attachment;filename=""FileName.pdf""")
Response.BinaryWrite(System.IO.File.ReadAllBytes("PdfName.pdf"))
Response.Flush()
Response.End()
Prenons un exemple rapide en ASP.NET en utilisant MVC et .NET Core. Ouvrez Visual Studio et créez une nouvelle application web ASP.NET Core.
1. Créez un nouveau projet web ASP.NET Core dans Visual Studio
2. Créer un modèle MVC
- Créez un nouveau dossier et nommez-le "Models"
- Cliquez avec le bouton droit de la souris sur le dossier Model et ajoutez une nouvelle classe
- Changez le nom de la classe en "ExampleModel". Ajouter du contenu au modèle, par exemple :
namespace WebApplication4.Models
{
public class ExampleModel
{
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
}
}
namespace WebApplication4.Models
{
public class ExampleModel
{
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
}
}
Namespace WebApplication4.Models
Public Class ExampleModel
Public Property Name() As String
Public Property Surname() As String
Public Property Age() As Integer
End Class
End Namespace
3. Ajouter un contrôleur MVC
- Créez un nouveau dossier et nommez-le "Controllers"
- Cliquez avec le bouton droit de la souris sur le dossier Controllers et ajoutez un nouveau "contrôleur MCV - vide"
Ajouter du contenu au contrôleur :
namespace WebApplication4.Models
{
public class HomeController : Controller
{
[HttpPost]
public IActionResult ExampleView(ExampleModel model)
{
var html = this.RenderViewAsync("_Example", model);
var ironPdfRender = new IronPdf.ChromePdfRenderer();
using var pdfDoc = ironPdfRender.RenderHtmlAsPdf(html.Result);
return File(pdfDoc.Stream.ToArray(), "application/pdf");
}
}
}
namespace WebApplication4.Models
{
public class HomeController : Controller
{
[HttpPost]
public IActionResult ExampleView(ExampleModel model)
{
var html = this.RenderViewAsync("_Example", model);
var ironPdfRender = new IronPdf.ChromePdfRenderer();
using var pdfDoc = ironPdfRender.RenderHtmlAsPdf(html.Result);
return File(pdfDoc.Stream.ToArray(), "application/pdf");
}
}
}
Namespace WebApplication4.Models
Public Class HomeController
Inherits Controller
<HttpPost>
Public Function ExampleView(ByVal model As ExampleModel) As IActionResult
Dim html = Me.RenderViewAsync("_Example", model)
Dim ironPdfRender = New IronPdf.ChromePdfRenderer()
Dim pdfDoc = ironPdfRender.RenderHtmlAsPdf(html.Result)
Return File(pdfDoc.Stream.ToArray(), "application/pdf")
End Function
End Class
End Namespace
4. Modifier Index.cshtml
Dans le dossier Pages, modifiez le fichier Index.cshtml comme suit :
@page
@model WebApplication4.Models.ExampleModel
@{
ViewBag.Title = "Example Index View";
}
<h2>Index</h2>
<form asp-action="ExampleView" enctype="multipart/form-data">
@using (Html.BeginForm())
{
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Surname, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Surname, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Surname, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Age, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Age, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Age, "", new { @class = "text-danger" })
</div>
</div>
<button type="submit">Save</button>
</div>
}
</form>
@page
@model WebApplication4.Models.ExampleModel
@{
ViewBag.Title = "Example Index View";
}
<h2>Index</h2>
<form asp-action="ExampleView" enctype="multipart/form-data">
@using (Html.BeginForm())
{
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Surname, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Surname, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Surname, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Age, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Age, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Age, "", new { @class = "text-danger" })
</div>
</div>
<button type="submit">Save</button>
</div>
}
</form>
5. Ajouter une page Razor
Dans le dossier Shared de Pages, ajoutez une page Razor et nommez-la "_Example.cshtml"
Ajoutez le code ci-dessous à _Example.cshtml :
@Html.Partial("../Index.cshtml")
@Html.Partial("../Index.cshtml")
6. Ajouter une nouvelle classe
Ajouter un nouveau nom de classe "ControllerPDF"
Cette classe prendra le HTML de _Example.cshtml avec le wrap de _Layout.cshtml et le renverra à HomeController.cs
- Ajoutez le code ci-dessous :
namespace WebApplication4
{
public static class ControllerPDF
{
public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.ActionDescriptor.ActionName;
}
controller.ViewData.Model = model;
using (var writer = new StringWriter())
{
IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
if (viewResult.Success == false)
{
return $"A view with the name {viewName} could not be found";
}
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions());
await viewResult.View.RenderAsync(viewContext);
return writer.GetStringBuilder().ToString();
}
}
}
}
namespace WebApplication4
{
public static class ControllerPDF
{
public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.ActionDescriptor.ActionName;
}
controller.ViewData.Model = model;
using (var writer = new StringWriter())
{
IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
if (viewResult.Success == false)
{
return $"A view with the name {viewName} could not be found";
}
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions());
await viewResult.View.RenderAsync(viewContext);
return writer.GetStringBuilder().ToString();
}
}
}
}
Namespace WebApplication4
Public Module ControllerPDF
<System.Runtime.CompilerServices.Extension> _
Public Async Function RenderViewAsync(Of TModel)(ByVal controller As Controller, ByVal viewName As String, ByVal model As TModel, Optional ByVal As Boolean = False) As Task(Of String)
If String.IsNullOrEmpty(viewName) Then
viewName = controller.ControllerContext.ActionDescriptor.ActionName
End If
controller.ViewData.Model = model
Using writer = New StringWriter()
Dim viewEngine As IViewEngine = TryCast(controller.HttpContext.RequestServices.GetService(GetType(ICompositeViewEngine)), ICompositeViewEngine)
Dim viewResult As ViewEngineResult = viewEngine.FindView(controller.ControllerContext, viewName, Not partial)
If viewResult.Success = False Then
Return $"A view with the name {viewName} could not be found"
End If
Dim viewContext As New ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, New HtmlHelperOptions())
Await viewResult.View.RenderAsync(viewContext)
Return writer.GetStringBuilder().ToString()
End Using
End Function
End Module
End Namespace
7. Modifier Program.cs
Ajoutez le code ci-dessous pour vous assurer qu'une fois que vous aurez appuyé sur le bouton "Enregistrer", la page naviguera vers l'URL correcte.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute(name:= "default", pattern:= "{controller=Home}/{action=Index}/{id?}")
8. Démonstration
- Dans le fichier Index.cshtml, la méthode ExampleView sera activée lorsque l'on appuiera sur le bouton de sauvegarde avec asp-action="ExampleView".
- La méthode RenderViewAsync de la classe ControllerPDF sera appelée à partir de ExampleView. Cette méthode renvoie le code HTML généré de _Example.cshtml avec _layout.cshtml.
- Générer un document PDF en passant le HTML de retour de RenderViewAsync à la méthode RenderHtmlAsPdf d'IronPDF.