如何在 ASP.NET Core C# 應用程式中將 Razor Pages 轉換為 PDF
IronPDF 透過 RenderRazorToPdf 方法,可在 ASP.NET Core 應用程式中將 Razor Pages(.cshtml 檔案)無縫轉換為 PDF 文件,透過完整支援 C# 和 HTML 渲染,簡化從網頁內容生成 PDF 的流程。
Razor 頁面是一種副檔名為 .cshtml 的檔案,它結合了 C# 和 HTML 來產生網頁內容。 在 .NET Core 中,Razor Pages 提供了一種更簡便的方式來組織 Web 應用程式的程式碼,使其非常適合用於僅供讀取或進行簡單資料輸入的簡易頁面。
ASP.NET Core Web App 是一種使用 .NET Core 建置的網頁應用程式,.NET Core 是一個用於開現代網頁應用程式的跨平台框架。
IronPDF 簡化了在 ASP.NET Core Web App 專案中,透過 Razor Pages 建立 PDF 檔案的流程。 這使得在 ASP.NET Core Web Apps 中生成 PDF 變得輕而易舉。
快速入門:數秒內將 Razor Pages 轉換為 PDF
在 .NET Core 應用程式中,將您的 Razor Pages 轉換為高品質的 PDF 檔案。 透過使用 RenderRazorToPdf 方法,您可以將 CSHTML 檔案轉換為 PDF 文件,藉此優化工作流程並提升文件分發效率。 本指南將引導您透過簡單的步驟,在幾分鐘內完成這項任務。
簡化工作流程(5 個步驟)
- 下載用於在 ASP.NET Core Web App 中將 Razor 頁面轉換為 PDF 的 C# 函式庫
- 為資料新增一個模型類別
- 建立一個新的 Razor 頁面,並編輯 ".cshtml" 檔案以顯示資料
- 編輯 ".cs" 檔案並使用
RenderRazorToPdf方法 - 下載範例專案以快速上手
簡介
Razor Pages 提供了一種強大且直觀的方式,用於在 .NET Core 應用程式中建置動態網頁內容。 結合 IronPDF 的渲染功能,開發人員可直接從網頁內容建立專業的 PDF 文件。 此方法省去了複雜的 PDF 生成邏輯,讓您能運用現有的 HTML 和 CSS 技能。
IronPDF 與 Razor Pages 的整合對於生成報告、發票、證書以及任何其他需要動態資料呈現的文件而言,具有特別高的價值。 透過使用您已熟悉的 Razor 語法,您可以確保網頁檢視與 PDF 輸出之間的一致性。
進行 Razor 轉 PDF 轉換需要哪些 NuGet 套件?
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
透過 NuGet 安裝
Install-Package IronPdf.Extensions.Razor
IronPdf.Extensions.Razor/如何在 .NET Core 中將 Razor Pages 轉換為 PDF?
您需要一個 ASP.NET Core Web App 專案,才能將 Razor Pages 轉換為 PDF 檔案。 此流程包含建立資料模型、設定 Razor 頁面以顯示該資料,然後使用 IronPDF 的 RenderRazorToPdf 方法來產生 PDF 輸出。
為什麼我需要一個用於 PDF 生成的模型類別?
模型類別是 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
如何設定 Razor 頁面以進行 PDF 轉換?
在"Pages"資料夾中新增一個空的 Razor 頁面,並將其命名為 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 檔案設定元資料,以確保文件能被正確識別並具備可搜尋性。
- 開啟
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 生成頁面整合至您的主要導覽列,使用者無需手動輸入網址,即可輕鬆存取此功能。
- 導航至 Pages 資料夾 -> Shared 資料夾 -> _Layout.cshtml。 將"Person"導覽項目置於"首頁"之後。
請確保 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 文件。 點擊"Person"導覽連結後,您將看到資料以表格格式呈現。 點擊"PRINT"按鈕將觸發 PDF 生成流程,將當前的 Razor Page 檢視轉換為可下載的 PDF 文件。
生成的 PDF 將完整保留您的 Razor 頁面中的所有樣式與格式,確保網頁檢視與 PDF 輸出之間的外觀一致。 此方法特別適用於生成報告、發票,或任何需要從應用程式資料庫或業務邏輯中提取資料的文件。
哪裡可以下載完整的 ASP.NET Core Web 應用程式範例?
您可以下載本指南的完整程式碼(ZIP 檔),並在 Visual Studio 中將其開啟為 .NET Core Web App 專案。
常見問題
如何在 ASP.NET Core 中將 Razor Pages 轉換為 PDF?
您可以在 ASP.NET Core 中使用 IronPDF 的 RenderRazorToPdf 方法,將 Razor Pages 轉換為 PDF。只需安裝 IronPdf.Extensions.Razor 套件,並使用 ChromePdfRenderer 將您的 .cshtml 檔案直接渲染為 PDF 文件。
將 Razor 轉換為 PDF 需要哪些 NuGet 套件?
您需要兩個 NuGet 套件:IronPdf.Extensions.Razor(擴充套件)和 IronPdf(主套件)。這兩套套件皆為在 ASP.NET Core Web Apps 中將 Razor Pages 渲染為 PDF 文件所必需。
在將 Razor Pages 轉換為 PDF/A 時,我可以使用動態資料嗎?
是的,IronPDF 完全支援 Razor Pages 中的動態資料。在轉換為 PDF 時,您可以使用 C# 程式碼、模型綁定以及所有標準的 Razor 語法功能,使其成為生成包含動態內容的報告、發票和證書的理想選擇。
我可以在 Razor Pages 中建立哪些類型的文件?
IronPDF 的 Razor 轉 PDF 功能非常適合生成各類文件類型,包括報告、發票、證書、收據,以及任何其他需要動態呈現資料且需保留現有 HTML 和 CSS 樣式的文件。
我能在專案中多快實現 Razor 轉 PDF 的功能?
using IronPDF,您可在數分鐘內完成 Razor 轉 PDF 的轉換。最簡化的工作流程僅需 5 個步驟:安裝函式庫、新增模型類別、建立 Razor 頁面、編輯 .cs 檔案以使用 RenderRazorToPdf 方法,以及執行您的應用程式。
轉換後是否能保留我的 HTML 和 CSS 樣式?
是的,IronPDF 在將 Razor Pages 轉換為 PDF 時會保留您的 HTML 和 CSS 樣式。這讓您能夠利用已建立的樣式和版面配置,確保網頁檢視與 PDF 輸出之間保持一致性。

