如何在ASP.NET Core C#应用程序中将Razor页面HTML转PDF
IronPDF能够使用 RenderRazorToPdf 方法在ASP.NET Core应用程序中将Razor Pages(.cshtml 文件)无缝转换为 PDF 文档,简化从 Web 内容生成 PDF 的过程,并完全支持 C# 和 HTML 渲染。
Razor Page 是一个扩展名为 .cshtml 的文件,它结合了 C# 和 HTML 来生成 Web 内容。 在 ASP.NET Core 中,Razor Pages 是一种更简单的网络应用程序代码组织方式,非常适合只读或进行简单数据输入的简单页面。
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 HTML转PDF
在 ASP.NET Core 应用程序中将您的 Razor 页面转换为高质量 PDF。 通过使用 RenderRazorToPdf 方法,您可以将 CSHTML 文件转换为 PDF 文档,从而优化您的工作流程并增强文档分发。 本指南将指导您在几分钟内完成所需的简单步骤。
最小工作流程(5 个步骤)
- 下载用于在 ASP.NET Core Web App 中将 Razor 页面转换为 PDF 的 C# 库。
- 添加一个数据模型类
- 创建一个新的 Razor 页面并编辑".cshtml "文件以显示数据
- 编辑".cs "文件并使用 `RenderRazorToPdf` 方法
- 下载样本项目以快速开始
简介
Razor Pages 为在 ASP.NET Core 应用程序中构建动态网页内容提供了一种强大而直观的方法。 当与 IronPDF 的渲染功能相结合时,开发人员可以直接从他们的网页内容创建专业的 PDF 文档。 这种方法去除了复杂的 PDF 生成逻辑,让您可以使用现有的 HTML 和 CSS 技能。
IronPdf 和 Razor Pages 之间的集成对于生成报告、发票、证书和任何其他需要动态数据展示的文档尤为重要。 通过使用您已经熟悉的 Razor 语法,您可以保持网页视图和 PDF 输出之间的一致性。
将 Razor 转换为 PDF 需要哪些 NuGet 软件包?
IronPdf.Extensions.Razor 包是主IronPdf包的扩展。 在ASP.NET Core Web 应用程序中,要将Razor Pages 渲染为 PDF 文档,需要安装 IronPdf.Extensions.Razor 和 IronPdf 这两个软件包。有关详细的安装说明,请访问我们的安装概述指南。
# Command to install IronPdf.Extensions.Razor package using NuGet Package Manager
安装-打包 IronPdf.Extensions.Razor
# Command to install IronPdf.Extensions.Razor package using NuGet Package Manager
安装-打包 IronPdf.Extensions.Razor
通过 NuGet 安装
Install-Package IronPdf.Extensions.Razor
如何在 ASP.NET Core 中将 Razor 页面转换为 PDF?
您需要一个 ASP.NET Core Web App 项目来将 Razor Pages 转换为 PDF 文件。 该过程包括创建数据模型、设置Razor页面以显示该数据,然后使用 IronPDF 的 RenderRazorToPdf 方法生成 PDF 输出。
为什么我需要一个用于生成 PDF 的模型类?
模型类是 Razor 页面中数据表示的支柱。 它们提供了一种结构化的方式,将数据从控制器逻辑传递到视图,确保了类型安全性和可维护性。 在生成 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
如何为 PDF 转换设置 Razor 页面?
向"Pages"文件夹中添加一个空的Razor Page,并命名为"persons.cshtml"。
- 使用下面提供的代码示例修改新创建的 "Persons.cshtml "文件。
下面的代码会在浏览器中显示信息。 请注意 Razor 语法如何将 C# 代码无缝集成到 HTML 中,使其非常适合生成可转换为 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>
将Razor Pages渲染为PDF
接下来,代码首先实例化ChromePdfRenderer类。 将此传递给 RenderRazorToPdf 方法即可将此Razor页面转换为 PDF 文档。
您可以完全访问 RenderingOptions中提供的功能。 这些功能包括在生成的 PDF 中应用 页码、设置 自定义页边距、添加自定义 文本以及 HTML 页眉和页脚。 您还可以为 PDF 配置 metadata 以确保文档的正确标识和可搜索性。
- 打开"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
RenderRazorToPdf 方法返回一个PdfDocument对象,该对象可以进行额外的处理和编辑。 您可以将 PDF 导出为 PDFA 或 PDFUA,对渲染的 PDF 文档应用数字签名,或者合并和拆分 PDF 文档。 该方法还允许您旋转页面、添加注释或书签,以及在 PDF 上加盖自定义水印。
为了加强文档管理,您还可以压缩 PDF 文件,在不影响质量的前提下减小文件大小。 这在处理大型报告或带宽问题时尤其有用。 此外,IronPDF 提供的广泛编辑功能已在我们全面的 PDF 编辑教程中进行了记录。
如何为 PDF 生成页面添加导航?
导航对于 ASP.NET Core 应用程序的用户体验至关重要。 通过将 PDF 生成页面集成到主导航中,用户可以轻松访问该功能,而无需手动键入 URL。
- 导航至Pages文件夹 -> Shared文件夹 -> _Layout.cshtml。 将"Person"导航项放在"Home"之后。
请确保 asp-page 属性的值与我们的文件名完全匹配,在本例中为"Persons"。 这可确保在您的 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>
运行 PDF 生成时会发生什么?
这将向您展示如何运行项目并生成 PDF 文档。 点击 "人员 "导航链接后,您将看到以表格格式显示的数据。 点击 "打印 "按钮会触发 PDF 生成过程,将当前的 Razor 页面视图转换为可下载的 PDF 文档。
生成的 PDF 将保留 Razor 页面的所有样式和格式,确保网页视图和 PDF 输出的外观保持一致。 这种方法尤其适用于生成报告、发票或任何需要从应用程序数据库或业务逻辑中获取数据的文档。
在哪里可以下载完整的 ASP.NET Core Web 应用程序示例?
您可以下载本指南的完整代码作为压缩文件,并在Visual Studio中打开为ASP.NET Core Web App项目。
常见问题解答
如何在 ASP.NET Core 中将 Razor Pages 转换为 PDF?
您可以使用 IronPDF 的 RenderRazorToPdf 方法在 ASP.NET Core 中将 Razor 页面转换为 PDF。只需安装 IronPDF.Extensions.Razor 包,并使用 ChromePdfRenderer 将 .cshtml 文件直接渲染为 PDF 文档即可。
Razor 转换为 PDF 需要哪些 NuGet 软件包?
您需要两个 NuGet 软件包:IronPDF.Extensions.Razor(扩展包)和 IronPDF(主包)。在 ASP.NET Core Web 应用程序中将 Razor 页面渲染为 PDF 文档需要这两个包。
转换为PDF时,我可以在Razor页面中使用动态数据吗?
是的,IronPDF 完全支持 Razor 页面中的动态数据。在转换为PDF时,您可以使用C#代码、模型绑定和所有标准的Razor语法功能,使其成为生成具有动态内容的报告、发票和证书的理想选择。
我可以从 Razor Pages 生成哪些类型的文档?
IronPDF 的 Razor to PDF 转换功能非常适合生成各种文档类型,包括报告、发票、证书、收据以及任何其他需要动态数据展示的文档,同时还能保持您现有的 HTML 和 CSS 风格。
如何在我的项目中快速实现 Razor 到 PDF 的转换?
使用 IronPDF,您可以在几分钟内实现 Razor 到 PDF 的转换。最简单的工作流程只需5个步骤:安装库、添加模型类、创建Razor页面、编辑.cs文件以使用RenderRazorToPdf方法,然后运行应用程序。
转换是否会保留我的 HTML 和 CSS 样式?
是的,在将 Razor Pages 转换为 PDF 时,IronPDF 会保留您的 HTML 和 CSS 风格。这使您可以使用已经创建的相同样式和布局,保持网页视图和 PDF 输出之间的一致性。

