如何在ASP .NET Core Web App中将Razor页面转换为PDF

How to Convert Razor Pages to PDFs in ASP.NET Core Web App

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

Razor Page是一个扩展名为.cshtml的文件,结合了C#和HTML来生成网页内容。 在ASP.NET Core中,Razor Pages是一种用于组织Web应用程序代码的更简单的方法,适用于只读或简单数据输入的页面。

ASP.NET Core Web App是使用ASP.NET Core构建的Web应用程序,这是一个用于开发现代Web应用程序的跨平台框架。

IronPDF简化了在ASP.NET Core Web App项目中从Razor Pages创建PDF文件的过程。 这使得在ASP.NET Core Web Apps中生成PDF变得简单和直接。

快速入门:在几秒钟内将Razor Pages转换为PDF

利用IronPDF的强大功能可以在ASP.NET Core应用程序中快速将Razor Pages转换为高质量的PDF。 通过使用RenderRazorToPdf方法,您可以无缝地将CSHTML文件转换为PDF文档,优化您的工作流并增强文档的分发。 本指南将引导您完成实现这一目标的简单步骤,确保开发人员拥有顺利高效的流程。

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. Copy and run this code snippet.

    // Install-Package IronPdf.Extensions.Razor
    var pdf = new IronPdf.ChromePdfRenderer().RenderRazorToPdf("Views/Home/Index.cshtml");
  3. Deploy to test on your live environment

    Start using IronPDF in your project today with a free trial
    arrow pointer
class="hsg-featured-snippet">

最小工作流程(5步)

  1. 下载用于在ASP.NET Core Web App中将Razor Pages转换为PDF的C#库
  2. 为数据添加一个模型类
  3. 创建一个新的Razor Page并编辑“.cshtml”文件以显示数据
  4. 编辑“.cs”文件并使用RenderRazorToPdf方法
  5. 下载示例项目以快速开始

IronPDF 扩展包

IronPdf.Extensions.Razor包IronPdf包的扩展。 在ASP.NET Core Web App中渲染Razor Pages为PDF文档需要同时使用IronPdf.Extensions.Razor和IronPdf包。

# 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

class="products-download-section">
data-modal-id="trial-license-after-download">
class="product-image"> C# NuGet Library for PDF
class="product-info">

使用NuGet安装

data-original-title="点击复制">
class="copy-nuget-row">
Install-Package IronPdf.Extensions.Razor
class="copy-button">
class="nuget-link">nuget.org/packages/IronPdf.Extensions.Razor/

将Razor Pages渲染为PDF

您需要一个ASP.NET Core Web App项目来将Razor Pages转换为PDF文件。

创建模型类

  • 在项目中创建一个新文件夹并命名为“Models”。
  • 向文件夹中添加一个标准C#类并命名为“Person”。此类将用作个体数据的模型。 使用以下代码片段:
: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

添加Razor Page

向“Pages”文件夹中添加一个空的Razor Page,并命名为“persons.cshtml”。

  • 使用下面提供的代码示例修改新创建的“Persons.cshtml”文件。

下面的代码用于在浏览器中显示信息。

@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

接下来,代码首先实例化ChromePdfRenderer类。 将this传递给RenderRazorToPdf方法即可将此Razor Page转换为PDF文档。

用户可以完全访问RenderingOptions中可用的功能。 These features include the ability to apply page numbers to the generated PDF, set custom margins, and add custom text as well as HTML headers and footers.

  • 打开“Persons.cshtml”文件的下拉菜单以查看“Persons.cshtml.cs”文件。
  • 使用下面的代码修改“Persons.cshtml.cs”。
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

RenderRazorToPdf方法返回一个可以进行额外处理和编辑的PdfDocument对象。 You can export the PDF as PDFA or PDFUA, apply a digital signature to the rendered PDF document, or merge and split PDF documents. The method also allows you to rotate pages, add annotations or bookmarks, and stamp custom watermarks onto your PDF.

在顶部导航栏中添加一个部分

  • 导航至Pages文件夹 -> Shared文件夹 -> _Layout.cshtml。 将“Person”导航项放在“Home”之后。

确保asp-page属性的值与我们的文件名完全匹配,文件名在本例中是“Persons”。

<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

运行项目

这将向您展示如何运行项目并生成 PDF 文档。

运行ASP.NET Core Web App项目

下载ASP.NET Core Web App项目

您可以下载本指南的完整代码作为压缩文件,并在Visual Studio中打开为ASP.NET Core Web App项目。

下载RazorPageSample.zip ASP.NET Core Web App项目

常见问题解答

ASP.NET Core 中的 Razor 页面用于什么?

Razor 页面在 ASP.NET Core 中用于组织 Web 应用程序的代码,使开发人员能够有效结合 C# 和 HTML 来创建 Web 内容。

如何在 C# 中将 Razor 页面转换为 PDF 文档?

您可以使用 IronPDF 的 RenderRazorToPdf 方法将 Razor 页面转换为 C# 中的 PDF 文档,该方法利用 ChromePdfRenderer 类从 CSHTML 文件生成 PDF。

渲染 Razor 页面到 PDF 所需的 NuGet 包有哪些?

渲染 Razor 页面到 PDF 所需的 NuGet 包是 IronPdf 和 IronPdf.Extensions.Razor。

如何在 ASP.NET Core 中安装 PDF 转换所需的程序包?

您可以通过使用 NuGet Package Manager 并运行命令:Install-Package IronPdf.Extensions.Razor 来安装 PDF 转换所需的程序包。

模型类在将 Razor 页面转换为 PDF 时起什么作用?

如 'Person' 之类的模型类定义了应用程序的数据结构,帮助组织将在被转换为 PDF 的 Razor 页面上显示的信息。

用于将 Razor 页面渲染为 PDF 文档的方法是什么?

RenderRazorToPdf 方法用于将 Razor 页面渲染为 PDF 文档,利用 IronPDF 的 ChromePdfRenderer 类。

在将 Razor 页面转换为 PDF 时能否增强 PDF 输出?

是的,IronPDF 允许您通过使用 RenderingOptions 增加页码、自定义边距以及 HTML 页眉和页脚等功能来增强 PDF 输出。

使用 IronPDF 生成 PDF 时有哪些高级功能?

使用 IronPDF 的高级功能包括导出为 PDFA 或 PDFUA、添加数字签名、合并或拆分 PDF、旋转页面以及应用自定义水印。

在哪里可以找到用于练习 Razor 页面到 PDF 转换的完整 ASP.NET Core Web App 项目?

用于练习 Razor 页面到 PDF 转换的完整 ASP.NET Core Web App 项目可以从提供的链接下载为压缩文件,随时可以在 Visual Studio 中使用。

IronPDF 在将 CSHTML 或 Razor 视图转换为 PDF 时是否兼容 .NET 10?

是的。IronPDF 完全兼容 .NET 10,可将 CSHTML/Razor 视图转换为 PDF。您的项目无需额外配置即可面向 .NET 10—— RenderRazorToPdfChromePdfRenderer和异步 PDF 生成等功能均可正常工作。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

审核者
Jeff Fritz
Jeffrey T. Fritz
首席项目经理 - .NET 社区团队
Jeff 也是 .NET 和 Visual Studio 团队的首席项目经理。他是 .NET Conf 虚拟会议系列的执行制片人,并主持“Fritz and Friends”直播节目,每周两次与观众一起谈论技术并编写代码。Jeff 撰写研讨会、演示文稿并计划包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP 峰会在内的最大型微软开发者活动的内容。
准备开始了吗?
Nuget 下载 16,154,058 | 版本: 2025.11 刚刚发布