如何在 ASP .NET Core Web App 中將 Razor 頁面轉換成 PDF

如何在 ASP.NET Core C# 應用程式中將 Razor Pages 轉換為 PDF

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

Razor Page 是一個副檔名為 .cshtml 的文件,它結合了 C# 和 HTML 來產生 Web 內容。 在 ASP.NET Core 中,Razor Pages 是一種更簡單的 Web 應用程式程式碼組織方式,因此非常適合只讀或進行簡單資料輸入的簡單頁面。

ASP.NET Core Web 應用程式是使用 ASP.NET Core 建立的 Web 應用程序,ASP.NET Core 是一個用於開發現代 Web 應用程式的跨平台框架。

IronPDF 簡化了在 ASP.NET Core Web 應用程式專案中從 Razor Pages 建立 PDF 檔案的流程。 這使得在 ASP.NET Core Web 應用程式中產生 PDF 檔案變得簡單直接。

快速入門:幾秒鐘內將 Razor Pages 轉換為 PDF

利用 IronPDF 的強大功能,在 ASP.NET Core 應用程式中快速將 Razor Pages 轉換為高品質的 PDF。 透過使用RenderRazorToPdf方法,您可以無縫地將 CSHTML 文件轉換為 PDF 文檔,從而優化您的工作流程並增強文檔分發。 本指南將引導您完成幾分鐘內實現此目標所需的簡單步驟,從而確保開發人員獲得流暢高效的流程。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 IronPDF

    PM > Install-Package IronPdf

  2. 複製並運行這段程式碼。

    // 安裝 IronPdf.Extensions.Razor 套件
    var pdf = new IronPdf.ChromePdfRenderer().RenderRazorToPdf("Views/Home/Index.cshtml");
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronPDF,免費試用!
    arrow pointer

IronPDF 擴充包

IronPdf.Extensions.Razor 套件IronPdf主包的擴充。 在 ASP.NET Core Web 應用程式中,要將 Razor 頁面渲染為 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 套件
SHELL
C# NuGet PDF 庫

使用 NuGet 安裝

安裝 IronPdf.Extensions.Razor 套件

將 Razor Pages 渲染為 PDF

你需要一個 ASP.NET Core Web 應用程式專案才能將 Razor 頁面轉換為 PDF 檔案。

創建模型類

  • 在專案中建立一個新資料夾,並將其命名為"Models"。
  • 在資料夾中新增一個名為"Person"的標準 C# 類別。該類別將作為個人資料的模型。 請使用以下程式碼片段:
: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 頁面

在"Pages"資料夾中新增一個空的 Razor 頁面,並將其命名為"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類別。 將此參數傳遞給RenderRazorToPdf方法即可將此 Razor 頁面轉換為 PDF 文件。

使用者可以完全存取渲染選項中提供的所有功能。 這些功能包括為產生的 PDF 新增頁碼、設定自訂邊距、新增自訂文字以及 HTML 頁首和頁尾

  • 開啟"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對象,該物件可以進行額外的處理和編輯。 您可以將 PDF 匯出為PDFAPDFUA 格式,對渲染後的 PDF 文件套用數位簽名,或合併和分割PDF 文件。 該方法還允許您旋轉頁面、添加註釋書籤,並在 PDF 上添加自訂浮水印

在頂部導覽列新增一個版塊

  • 導覽至 Pages 資料夾 -> Shared 資料夾 -> _Layout.cshtml。 將"人物"導覽項目放在"首頁"之後。

請確保 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 文件。

Execute ASP.NET Core Web App Project

下載 ASP.NET Core Web 應用程式項目

您可以下載本指南的完整程式碼壓縮文件,然後在 Visual Studio 中將其作為 ASP.NET Core Web 應用程式專案開啟。

下載 RazorPageSample.zip ASP.NET Core Web 應用程式項目

常見問題解答

ASP.NET Core 中的 Razor Pages 用於什麼?

在 ASP.NET Core 中,Razor Pages 被用來組織網頁應用程序的代碼,允許開發人員高效地結合 C# 和 HTML 來創建 web 內容。

如何在 C# 中將 Razor Pages 轉換為 PDF 文件?

您可以使用 IronPDF 的 RenderRazorToPdf 方法將 Razor Pages 轉換為 PDF 文件,該方法利用 ChromePdfRenderer 類從 CSHTML 文件生成 PDF。

渲染 Razor Pages 為 PDF 所必需的 NuGet 包是哪些?

渲染 Razor Pages 為 PDF 所必需的 NuGet 包是 IronPdf 和 IronPdf.Extensions.Razor。

如何在 ASP.NET Core 中安裝 PDF 轉換所需的包?

您可以通過使用 NuGet 包管理器和命令 Install-Package IronPdf.Extensions.Razor 來安裝 PDF 轉換所需的包。

在將 Razor Pages 轉換為 PDF 的過程中,模型類起哪些作用?

模型類,例如 'Person',定義了應用程序的數據結構,有助於組織顯示在 Razor Page 上的信息,該信息將轉換為 PDF。

渲染 Razor Pages 為 PDF 文件使用了什麼方法?

RenderRazorToPdf 方法用於將 Razor Pages 渲染為 PDF 文檔,利用 IronPDF 的 ChromePdfRenderer 類。

在轉換 Razor Pages 時是否可以增強 PDF 的輸出?

是的,IronPDF 允許您通過 RenderingOptions 增強 PDF 的輸出,例如頁碼、自定義邊距以及 HTML 頁眉和頁腳。

使用 IronPDF 生成 PDF 時有哪些高級功能?

IronPDF 的高級功能包括導出為 PDFA 或 PDFUA,添加數字簽名,合併或拆分 PDF,旋轉頁面以及應用自定義水印。

在哪裡可以找到完整的 ASP.NET Core Web App 項目來練習 Razor Page 到 PDF 的轉換?

完整的 ASP.NET Core Web App 項目可作為壓縮文件下載,用於練習 Razor Page 到 PDF 的轉換,準備在 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 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

審核人
Jeff Fritz
Jeffrey T. Fritz
首席程序经理 - .NET 社区团队
Jeff 也是 .NET 和 Visual Studio 团队的首席程序经理。他是 .NET Conf 虚拟会议系列的执行制作人,并主持“Fritz 和朋友”这一每周两次的开发者的直播节目,在节目上讨论技术并与观众一起编写代码。Jeff 撰写研讨会、主持演讲,并计划大型 Microsoft 开发者活动(包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit)的内容。
準備好開始了嗎?
Nuget 下載 16,493,056 | Version: 2025.11 剛發表