Extension du rasoir IronPDF

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

IronPDF est une bibliothèque pdf pour .NET et .NET Core. Il s'agit principalement d'une bibliothèque PDF gratuite, car IronPDF est une bibliothèque PDF ouvertement 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, diviser, modifier et extraire facilement du contenu pdf en C# ;, F&num ; 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 un projet de fichier à partir de ce site lien.

Fonctionnalités d'IronPDF pour les applications .NET et .NET Core

Voici quelques-unes des caractéristiques fantastiques de la bibliothèque pdf d'IronPDF :

  • La bibliothèque .NET pdf peut générer des PDF documents à partir de fichiers 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 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 de pdf IronPDF

L'installation de la bibliothèque IronPDF pour .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

En utilisant le gestionnaire de paquets NuGet dans Visual Studio, en ouvrant le menu Projet, en sélectionnant Gérer les paquets NuGet et en recherchant IronPDF, comme indiqué ci-dessous :

Figure 1 - Paquet NuGet IronPDF

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;");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Voici un exemple d'utilisation d'un fichier 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()
VB   C#

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éer un nouveau projet web ASP.NET Core dans Visual studio

Créer un projet ASP.NET Core

2. Créer un modèle MVC

  • Créez un nouveau dossier et nommez-le "Models"
Ajouter un dossier
  • Cliquez avec le bouton droit de la souris sur le dossier Model et ajoutez une nouvelle classe
Ajouter une 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
VB   C#

3. Ajouter un contrôleur MVC

  • Créez un nouveau dossier et nommez-le "Controllers"
  • Faites un clic droit sur le dossier Controllers et ajoutez un nouveau "contrôleur MCV - vide"
Ajouter une classe de contrôleur

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");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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>
HTML

5. Ajouter une page Razor

Dans le dossier Pages partagées, ajoutez une page Razor et nommez-la "_Example.cshtml"

Ajouter une page Razor

Ajoutez le code ci-dessous à _Example.cshtml :

@Html.Partial("../Index.cshtml")
@Html.Partial("../Index.cshtml")
HTML

6. Ajouter une nouvelle classe

  • Ajouter un nouveau nom de classe "ControllerPDF"

    Cette classe prend le html de _Example.cshtml avec le wrap de _Layout.cshtml et le renvoie à 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
VB   C#

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?}")
VB   C#

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ère un document PDF en transmettant le code html retourné par RenderViewAsync à la méthode RenderHtmlAsPdf d'IronPDF.
Créer un projet ASP.NET Core