Jak konwertować strony Razor do formatu PDF w aplikacji internetowej ASP .NET Core

Jak przekonwertowac strony Razor do PDF w aplikacji ASP.NET Core C

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

IronPDF umozliwia bezproblemowa konwersje stron Razor (.cshtml plikow) na dokumenty PDF w aplikacjach ASP.NET Core przy uzyciu metody RenderRazorToPdf, upraszczajac generowanie PDF z tresci internetowych z pelnym wsparciem dla C# i renderowania HTML.

Strona Razor to plik z rozszerzeniem .cshtml, laczacy C# i HTML, aby generowac tresci internetowe. W ASP.NET Core strony Razor to prostszy sposob na organizacje kodu dla aplikacji webowych, czyniac je idealnym rozwiazaniem dla prostych stron, ktore sluza tylko do odczytu lub prostego wprowadzania danych.

Aplikacja webowa ASP.NET Core to aplikacja sieciowa zbudowana przy uzyciu ASP.NET Core, wieloplatformowego frameworka do tworzenia nowoczesnych aplikacji webowych.

IronPDF upraszcza proces tworzenia plikow PDF ze stron Razor w projekcie ASP.NET Core Web App. Dzieki temu generowanie PDF w aplikacjach ASP.NET Core Web App staje sie proste.

Szybki start: Konwersja stron Razor do PDF w kilka sekund

Przekonwertuj swoje strony Razor na wysokiej jakosci PDF w aplikacji ASP.NET Core. Uzywajac metody RenderRazorToPdf, mozesz przeksztalcic pliki CSHTML w dokumenty PDF, optymalizujac swoj przeplyw pracy i ulepszajac dystrybucje dokumentow. Ten przewodnik prowadzi cie przez proste kroki potrzebne do osiagniecia tego w kilka minut.

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf
  2. Skopiuj i uruchom ten fragment kodu.

    // Install-Package IronPdf.Extensions.Razor
    var pdf = new IronPdf.ChromePdfRenderer().RenderRazorToPdf("Views/Home/Index.cshtml");
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Wprowadzenie

Strony Razor zapewniaja potezny i intuicyjny sposob na budowanie dynamicznych tresci webowych w aplikacjach ASP.NET Core. Polaczone z mozliwosciami renderowania IronPDF, deweloperzy moga tworzyc profesjonalne dokumenty PDF bezposrednio z ich tresci webowych. To podejscie usuwa skomplikowana logike generowania PDF i pozwala na wykorzystanie juz znanych umiejetnosci HTML i CSS.

Integracja miedzy IronPDF a stronami Razor jest szczegolnie cenna przy generowaniu raportow, faktur, certyfikatow i innych dokumentow wymagajacych dynamicznej prezentacji danych. Uzywajac tej samej skladni Razor, z ktora jestes juz zaznajomiony, mozesz utrzymac spojnosc miedzy widokami webowymi a wyjsciami PDF.

Jakie paczki NuGet sa potrzebne do konwersji Razor do PDF?

Pakiet IronPdf.Extensions.Razor jest rozszerzeniem glownego IronPdf pakietu. Zarowno paczki IronPdf.Extensions.Razor jak i IronPdf sa potrzebne, aby renderowac strony Razor na dokumenty PDF w aplikacji ASP.NET Core Web App. Aby uzyskac szczegolowe instrukcje dotyczace instalacji, odwiedz podglad instalacji w naszym przewodniku.

# Command to install IronPdf.Extensions.Razor package using NuGet Package Manager
Install-Package IronPdf.Extensions.Razor
# Command to install IronPdf.Extensions.Razor package using NuGet Package Manager
Install-Package IronPdf.Extensions.Razor
SHELL
Biblioteka C# NuGet dla plików PDF

Zainstaluj za pomocą NuGet

Install-Package IronPdf.Extensions.Razor

Jak przekonwertowac strony Razor do PDF w ASP.NET Core?

Bedziesz potrzebowal projektu ASP.NET Core Web App, aby przekonwertowac strony Razor na pliki PDF. Proces obejmuje utworzenie modelu dla twoich danych, skonfigurowanie strony Razor do wyswietlania tych danych, a nastepnie uzycie metody RenderRazorToPdf z IronPDF do wygenerowania wyjsciowego PDF.

Dlaczego potrzebuje klasy modelu do generowania PDF?

Klasy modeli sluza jako podstawa reprezentacji danych w twoich stronach Razor. Zapewniaja one strukturalny sposob przekazywania danych z logiki kontrolera do widoku, zapewniajac bezpieczenstwo typow i latwosc konserwacji. Podczas generowania PDF, modele te staja sie jeszcze bardziej kluczowe, gdyz definiuja dokladna strukture danych, ktore pojawia sie w koncowym dokumencie.

  • Utworz nowy folder w projekcie i nazwij go "Models".
  • Dodaj standardowa klase C# do folderu i nazwij ja "Person". Ta klasa posluzy jako model dla indywidualnych danych. Użyj poniższego fragmentu kodu:
: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
$vbLabelText   $csharpLabel

Jak skonfigurowac strone Razor do konwersji na PDF?

Dodaj pusta strone Razor do folderu "Pages" i nazwij ja "persons.cshtml".

  • Zmodyfikuj nowo utworzony plik "Persons.cshtml" za pomoca ponizszego przykladu kodu.

Poniższy kod wyswietla informacje w przegladarce. Zauwaz, jak skladnia Razor pozwala na bezproblemowa integracje kodu C# z HTML, co czyni ja idealnym rozwiazaniem do generowania dynamicznej zawartosci, ktora mozna przekonwertowac do PDF:

@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

Renderuj strony Razor do PDF

Nastepnie, kod ponizej najpierw tworzy instancje klasy ChromePdfRenderer. Przekazanie this do metody RenderRazorToPdf wystarcza, aby przekonwertowac ta strone Razor na dokument PDF.

Masz pelny dostep do funkcji dostepnych w RenderingOptions. Funkcje te obejmuja mozliwosc zastosowania numeracji stron w generowanym dokumencie PDF, ustawianie niestandardowych marginesow, oraz dodawanie niestandardowego tekstu oraz naglowkow i stopki HTML. Mozna rowniez skonfigurowac metadane dla swoich PDF, aby zapewnic wlasciwa identyfikacje dokumentu i mozliwosc wyszukiwania.

  • Otworz rozwijane menu dla pliku "Persons.cshtml", aby zobaczyc plik "Persons.cshtml.cs".
  • Zmodyfikuj "Persons.cshtml.cs" za pomoca ponizszego kodu.
using IronPdf.Razor;
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; }

        // Handle GET request to load initial data
        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;
        }

        // Handle POST request to convert Razor page to PDF
        public IActionResult OnPost()
        {
            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);

            // Return the generated PDF file with appropriate content headers
            Response.Headers.Add("Content-Disposition", "inline");
            return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");

            // Optionally view the output PDF in browser (uncomment below line if needed)
            // return File(pdf.BinaryData, "application/pdf");
        }
    }
}
using IronPdf.Razor;
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; }

        // Handle GET request to load initial data
        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;
        }

        // Handle POST request to convert Razor page to PDF
        public IActionResult OnPost()
        {
            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);

            // Return the generated PDF file with appropriate content headers
            Response.Headers.Add("Content-Disposition", "inline");
            return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf");

            // Optionally view the output PDF in browser (uncomment below line if needed)
            // return File(pdf.BinaryData, "application/pdf");
        }
    }
}
Imports IronPdf.Razor
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)

		' Handle GET request to load initial data
		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

		' Handle POST request to convert Razor page to PDF
		Public Function OnPost() 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)

			' Return the generated PDF file with appropriate content headers
			Response.Headers.Add("Content-Disposition", "inline")
			Return File(pdf.BinaryData, "application/pdf", "razorPageToPdf.pdf")

			' Optionally view the output PDF in browser (uncomment below line if needed)
			' return File(pdf.BinaryData, "application/pdf");
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

Metoda RenderRazorToPdf zwraca obiekt PdfDocument, ktory mozna poddac dodatkowemu przetwarzaniu i edycji. Mozesz eksportowac PDF jako PDFA lub PDFUA, zastosowac podpis cyfrowy do wyrenderowanego dokumentu PDF, lub scalac i dzielic dokumenty PDF. Metoda umozliwia równiez obracanie stron, dodawanie adnotacji lub zakladek, oraz dodawanie wlasnych znakow wodnych do twojego PDF.

W celu zwiekszonego zarzadzania dokumentami mozna rowniez kompresowac PDF w celu zmniejszenia rozmiaru pliku bez utraty jakosci. Jest to szczegolnie przydatne w przypadku pracy z duzymi raportami lub gdy przepustowosc jest ograniczeniem. Dodatkowo, rozbudowane mozliwosci edycji, jakie zapewnia IronPDF, sa opisane w naszym obszernym kursie na temat edycji PDF.

Jak dodac nawigacje dla strony generowania PDF?

Nawigacja jest kluczowa dla doswiadczenia uzytkownika w twojej aplikacji ASP.NET Core. Integrujac strone generowania PDF do glownej nawigacji, uzytkownicy moga latwo uzyskac dostep do funkcjonalnosci bez recznego wpisywania adresow URL.

  • Przejdz do folderu Pages -> Shared folder -> _Layout.cshtml. Umiesc element nawigacyjny "Person" za "Home".

Upewnij sie, ze wartosc atrybutu asp-page dokladnie odpowiada nazwie naszego pliku, ktory w tym przypadku to "Persons". To zapewnia poprawne kierowanie w twojej aplikacji ASP.NET Core:

<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

Co sie dzieje, gdy uruchamiam generowanie PDF?

To pokazuje, jak uruchomić projekt i wygenerować dokument PDF. Gdy klikniesz lacze nawigacyjne "Person", zobaczysz dane wyswietlone w formacie tabeli. Klikniecie przycisku "Print" uruchamia proces generowania PDF, konwertujac obecny widok strony Razor do pobieranego dokumentu PDF.

Visual Studio showing C# PersonsModel class with OnGet and OnPostAsync methods for PDF generation using IronPDF

Wygenerowany PDF zachowuje cale stylizacje i formatowanie z twojej strony Razor, zapewniajac spojny wyglad miedzy widokiem webowym a wyjsciem PDF. To podejscie jest szczegolnie przydatne przy generowaniu raportow, faktur, lub jakiegokolwiek dokumentu, ktory wymaga danych z bazy danych czy logiki biznesowej aplikacji.

Gdzie moge pobrac kompletny przyklad aplikacji ASP.NET Core Web App?

Mozesz pobrac kompletny kod tego przewodnika jako spakowany plik, ktory mozesz otworzyc w Visual Studio jako projekt ASP.NET Core Web App.

Pobierz projekt aplikacji ASP.NET Core Web App RazorPageSample.zip

Często Zadawane Pytania

How do I convert Razor Pages to PDF in ASP.NET Core?

You can convert Razor Pages to PDF in ASP.NET Core using IronPDF's RenderRazorToPdf method. Simply install the IronPdf.Extensions.Razor package and use the ChromePdfRenderer to render your .cshtml files directly to PDF documents.

What NuGet packages are required for Razor to PDF conversion?

You need two NuGet packages: IronPdf.Extensions.Razor (the extension package) and IronPdf (the main package). Both packages are required to render Razor Pages to PDF documents in ASP.NET Core Web Apps.

Can I use dynamic data in my Razor Pages when converting to PDF?

Yes, IronPDF fully supports dynamic data in Razor Pages. You can use C# code, model binding, and all standard Razor syntax features when converting to PDF, making it ideal for generating reports, invoices, and certificates with dynamic content.

What types of documents can I generate from Razor Pages?

IronPDF's Razor to PDF conversion is perfect for generating various document types including reports, invoices, certificates, receipts, and any other documents that require dynamic data presentation while maintaining your existing HTML and CSS styling.

How quickly can I implement Razor to PDF conversion in my project?

You can implement Razor to PDF conversion in minutes with IronPDF. The minimal workflow involves just 5 steps: installing the library, adding a model class, creating a Razor Page, editing the .cs file to use the RenderRazorToPdf method, and running your application.

Does the conversion maintain my HTML and CSS styling?

Yes, IronPDF preserves your HTML and CSS styling when converting Razor Pages to PDF. This allows you to maintain consistency between your web views and PDF outputs using the same styling and layout you've already created.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Sprawdzone przez
Jeff Fritz
Jeffrey T. Fritz
Główny Menedżer Programu - Zespół .NET Community
Jeff jest również Głównym Menedżerem Programu dla zespołów .NET i Visual Studio. Jest producentem wykonawczym wirtualnej serii konferencji .NET Conf i prowadzi 'Fritz and Friends', transmisję na żywo dla deweloperów emitowaną dwa razy w tygodniu, gdzie rozmawia o technologii i pisze kod razem z widzami. Jeff pisze warsztaty, prezentacje i planuje treści dla największych wydarzeń Microsoft dla deweloperów, w tym Microsoft Build, Microsoft Ignite, .NET Conf i Microsoft MVP Summit.
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 18,135,201 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPdf
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.