IronPDF Razor-Erweiterung

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

IronPDF ist eine PDF-Bibliothek für .NET und .NET Core. Es ist hauptsächlich eine kostenlose PDF-Bibliothek, da IronPDF eine offen kommerzielle C# PDF-Bibliothek ist. Es ist für die Entwicklung kostenlos, muss aber für den kommerziellen Einsatz lizenziert werden. Bei diesem klareren Lizenzmodell müssen sich die Entwickler nicht mit den Besonderheiten der GNU / AGPL-Lizenzmodelle auseinandersetzen und können sich stattdessen auf ihre Projekte konzentrieren.

IronPDF ermöglicht .NET- und .NET Core-Entwicklern das einfache Generieren, Zusammenführen, Teilen, Bearbeiten und Extrahieren von PDF-Inhalten in C#, F# und VB.NET für .NET Core und .NET-Framework sowie das Erstellen von PDFs aus HTML-, ASPX-, CSS-, JS- und Bilddateien.

IronPDF verfügt über umfassende Funktionen zur PDF-Bearbeitung und -Erzeugung über HTML to PDF. Wie funktioniert das? Für das Design und Layout der Dokumente können größtenteils vorhandene HTML- und HTML5-Inhalte verwendet werden.

Sie können ein Dateiprojekt von dieser Seite herunterladen link.

IronPDF-Funktionen für .NET & .NET Core-Anwendungen

Zu den fantastischen Funktionen der IronPDF PDF-Bibliothek gehören:

  • Die .NET pdf-Bibliothek kann pDF erzeugen dokumente aus HTML, Bildern und ASPX-Dateien
  • Lesen von PDF-Text in .NET- und .NET Core-Anwendungen
  • Extrahieren von Daten und Bildern aus PDFs
  • Zusammenführung von PDF-Dokumenten
  • PDFs aufteilen
  • Manipulation von PDFs

IronPDF Vorteile

  • Die IronPDF pdf-Bibliothek ist einfach zu installieren
  • Die IronPDF for .NET-Bibliothek bietet schnelle und einfache Lizenzierungsoptionen
  • IronPDF stellt die meisten .NET pdf-Bibliotheken in den Schatten und übertrifft die meisten .NET Core pdf-Bibliotheken

**IronPDF ist die PDF-Lösung, nach der Sie schon lange gesucht haben


Installation der IronPDF pdf-Bibliothek

Die Installation der IronPDF-Bibliothek für pdf in .NET oder .NET Core ist recht einfach. Sie können es auf folgende Weise installieren:

Verwenden Sie den NuGet-Paketmanager und geben Sie Folgendes in die Befehlszeile ein:

Install-Package IronPdf

Verwenden Sie den NuGet-Paketmanager in Visual Studio, indem Sie die Option NuGet-Pakete verwalten aus dem Projektmenü auswählen und nach IronPDF suchen, wie unten dargestellt:

Abbildung 1 - IronPDF NuGet-Paket

Damit wird die PDF-Erweiterung installiert.

Mit IronPDF können Sie ASP.NET MVC verwenden, um eine PDF-Datei zurückzugeben. Es folgen ein paar Code-Beispiele:

Ein Beispiel für eine Methode, die von Ihrem Controller bedient werden könnte, ist unten dargestellt.

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#

Es folgt ein Beispiel für die Bereitstellung einer vorhandenen PDF-Datei in 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#

Lassen Sie uns ein kurzes Beispiel in ASP.NET mit MVC und .NET Core durchführen. Öffnen Sie Visual Studio und erstellen Sie eine neue ASP.NET Core-Webanwendung.

1. Erstellen Sie ein neues ASP.NET Core-Webprojekt in Visual Studio

ASP.NET Core-Projekt erstellen

2. MVC-Modell erstellen

  • Erstellen Sie einen neuen Ordner und nennen Sie ihn "Models"
Ordner hinzufügen
  • Klicken Sie mit der rechten Maustaste auf den Ordner Model und fügen Sie eine neue Klasse hinzu
Klasse hinzufügen
  • Ändern Sie den Klassennamen in "ExampleModel". Fügen Sie dem Modell Inhalte hinzu, zum Beispiel:
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. MVC-Controller hinzufügen

  • Erstellen Sie einen neuen Ordner und nennen Sie ihn "Controllers"
  • Klicken Sie mit der rechten Maustaste auf den Ordner "Controller" und fügen Sie einen neuen "MCV-Controller - leer" hinzu
Controller-Klasse hinzufügen

Fügen Sie dem Controller Inhalte hinzu:

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. Index.cshtml ändern

Ändern Sie innerhalb des Ordners Pages die Datei Index.cshtml wie folgt:

@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. Rasiermesser-Seite hinzufügen

Fügen Sie im Ordner Shared von Pages eine Razor-Seite hinzu und nennen Sie sie "_Example.cshtml"

Rasiermesser-Seite hinzufügen

Fügen Sie den folgenden Code zu _Example.cshtml hinzu:

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

6. Eine neue Klasse hinzufügen

  • Fügen Sie eine neue Klasse mit dem Namen "ControllerPDF" hinzu

    Diese Klasse nimmt die html-Datei aus _Example.cshtml mit dem Wrap von _Layout.cshtml und gibt sie an HomeController.cs zurück

  • Fügen Sie den nachstehenden Code ein:
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. Ändern Sie Program.cs

Fügen Sie den folgenden Code hinzu, um sicherzustellen, dass die Seite nach dem Drücken der Schaltfläche "Speichern" zur richtigen URL navigiert.

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. Demonstration

  • In der Datei Index.cshtml wird die Methode ExampleView aktiviert, wenn die Schaltfläche "Speichern" mit asp-action="ExampleView" gedrückt wird.
  • Die Methode RenderViewAsync der Klasse ControllerPDF wird von ExampleView aufgerufen. Diese Methode gibt das generierte HTML von _Example.cshtml wrap mit _layout.cshtml zurück.
  • Erzeugen Sie ein PDF-Dokument, indem Sie die von RenderViewAsync zurückgegebene HTML-Datei an die Methode RenderHtmlAsPdf von IronPDF übergeben.
ASP.NET Core-Projekt erstellen