Konvertieren von Razor-Seiten in PDFs in ASP.NET Core Web App

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

von Chaknith Bin

Eine Razor Page ist eine Datei mit der Erweiterung .cshtml, die C# und HTML kombiniert, um Webinhalte zu erzeugen. In ASP.NET Core sind Razor Pages eine einfachere Möglichkeit, den Code für Webanwendungen zu organisieren, was sie zu einer guten Lösung für einfache Seiten macht, die nur gelesen werden oder einfache Dateneingaben vornehmen.

Eine ASP.NET Core Web App ist eine Webanwendung, die mit ASP.NET Core erstellt wurde, einem plattformübergreifenden Framework für die Entwicklung moderner Webanwendungen.

IronPDF vereinfacht den Prozess der Erstellung von PDF-Dateien aus Razor Pages innerhalb eines ASP.NET Core Web App-Projekts. Dies macht die PDF-Erstellung in ASP.NET Core Web Apps einfach und direkt.



IronPDF-Erweiterungspaket

Das Paket IronPdf.Extensions.Razor ist eine Erweiterung des Hauptpakets IronPdf. Sowohl die IronPdf.Extensions.Razor- als auch die IronPdf-Pakete werden benötigt, um Razor Pages in einer ASP.NET Core Web App in PDF-Dokumente umzuwandeln.

Install-Package IronPdf.Extensions.Razor
C# NuGet-Bibliothek für PDF

Installieren mit NuGet

Install-Package IronPDF.Extensions.Razor

Razor-Seiten in PDFs umwandeln

Sie benötigen ein ASP.NET Core Web App-Projekt, um Razor-Seiten in PDF-Dateien zu konvertieren.

Erstellen einer Modellklasse

  • Erstellen Sie einen neuen Ordner im Projekt und nennen Sie ihn "Modelle"
  • Fügen Sie dem Ordner eine Standard-C#-Klasse hinzu und nennen Sie sie "Person" Diese Klasse wird als Modell für individuelle Daten dienen. Verwenden Sie den folgenden Codeschnipsel:
: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#

Eine Razor-Seite hinzufügen

Fügen Sie eine leere Razor-Seite in den Ordner "Seiten" ein und nennen Sie sie "persons.cshtml"

  • Ändern Sie die neu erstellte Datei "Persons.cshtml" anhand des unten aufgeführten Codebeispiels.

    Der folgende Code dient zur Anzeige der Informationen im Browser.

@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

Der folgende Code instanziiert zunächst die Klasse ChromePdfRenderer. Die Übergabe von this an die Methode "RenderRazorToPdf" reicht aus, um diese Razor-Seite in ein PDF-Dokument zu konvertieren.

Der Benutzer hat vollen Zugriff auf die in RenderingOptions verfügbaren Funktionen. Zu diesen Funktionen gehört die Möglichkeit, Folgendes anzuwendenseitenzahlen in die generierte PDF-Datei einfügen, benutzerdefinierte Ränder festlegen und benutzerdefiniertetext sowie HTML-Kopf- und -Fußzeilen.

  • Öffnen Sie das Dropdown-Menü für die Datei "Persons.cshtml", um die Datei "Persons.cshtml.cs" anzuzeigen.
  • Ändern Sie die Datei "Persons.cshtml.cs" mit dem folgenden Code.

    Bitte beachten Sie
    Das PDF-Dokument kann mit folgendem Code im Browser angezeigt werden: Datei(pdf.BinaryData, "anwendung/pdf"). Das Herunterladen der PDF-Datei nach der Anzeige im Browser führt jedoch zu einem beschädigten PDF-Dokument.

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#

Die Methode "RenderRazorToPdf" gibt ein PdfDocument-Objekt zurück, das weiter verarbeitet und bearbeitet werden kann. Sie können die PDF-Datei exportieren alsPDFA oderPDFUAanwenden, einedigitale Signatur zum gerenderten PDF-Dokument, oderzusammenführen und Aufteilen PDF-Dokumente. Die Methode ermöglicht auch das Drehen von Seiten, das Hinzufügen vonanmerkungen oderlesezeichenundbenutzerdefinierte Wasserzeichen stempeln auf Ihr PDF.

Einen Abschnitt zur oberen Navigationsleiste hinzufügen

  • Navigieren Sie zum Ordner Seiten -> Gemeinsamer Ordner -> _Layout.cshtml. Platzieren Sie den Navigationspunkt "Person" nach "Home".

    Vergewissern Sie sich, dass der Wert für das Attribut asp-page genau mit unserem Dateinamen übereinstimmt, der in diesem Fall "Personen" lautet.

<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

Das Projekt ausführen

Hier erfahren Sie, wie Sie das Projekt ausführen und ein PDF-Dokument erstellen.

ASP.NET Core Web App Projekt ausführen

ASP.NET Core Web App-Projekt herunterladen

Sie können den vollständigen Code für dieses Handbuch als gezippte Datei herunterladen, die Sie in Visual Studio als ASP.NET Core Web App-Projekt öffnen können.

Laden Sie das RazorPageSample.zip ASP.NET Core Web App Projekt herunter

Chaknith related to ASP.NET Core Web App-Projekt herunterladen

Chaknith Bin

Software-Ingenieur

Chaknith ist der Sherlock Holmes der Entwickler. Zum ersten Mal kam ihm der Gedanke, dass er eine Zukunft in der Softwareentwicklung haben könnte, als er zum Spaß an Code Challenges teilnahm. Sein Schwerpunkt liegt auf IronXL und IronBarcode, aber er ist stolz darauf, Kunden mit jedem Produkt zu helfen. Chaknith nutzt sein Wissen aus direkten Gesprächen mit Kunden, um die Produkte selbst weiter zu verbessern. Sein anekdotisches Feedback geht über Jira-Tickets hinaus und unterstützt die Produktentwicklung, die Dokumentation und das Marketing, um das Gesamterlebnis der Kunden zu verbessern.Wenn er nicht im Büro ist, lernt er über maschinelles Lernen, programmiert und wandert.