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

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

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

IronPDF能夠使用 RenderRazorToPdf 方法在ASP.NET Core應用程式中將Razor Pages(.cshtml 文件)無縫轉換為 PDF 文檔,簡化從 Web 內容生成 PDF 的過程,並完全支援 C# 和 HTML 渲染。

Razor Page 是一個副檔名為 .cshtml 的文件,它結合了 C# 和 HTML 來產生 Web 內容。 在ASP.NET Core中, Razor Pages 是一種更簡單的 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

在ASP.NET Core應用程式中將Razor Pages 轉換為高品質 PDF。 透過使用 RenderRazorToPdf 方法,您可以將 CSHTML 文件轉換為 PDF 文檔,從而優化您的工作流程並增強文檔分發。 本指南將引導您完成幾分鐘內實現此目標所需的簡單步驟。

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 複製並運行這段程式碼。

    // Install-PackageIronPDFRazor
    var pdf = new IronPdf.ChromePdfRenderer().RenderRazorToPdf("Views/Home/Index.cshtml");
  3. 部署到您的生產環境進行測試

    今天就在您的專案中開始使用免費試用IronPDF

    arrow pointer

介紹

Razor Pages 為在ASP.NET Core應用程式中建立動態 Web 內容提供了一種強大且直覺的方式。 結合 IronPDF 的渲染功能,開發人員可以直接從其 Web 內容建立專業的 PDF 文件。 這種方法簡化了複雜的 PDF 生成邏輯,讓您能夠運用現有的 HTML 和 CSS 技能。

IronPDF和Razor Pages 的整合對於產生報告、發票、證書以及任何其他需要動態資料呈現的文件都特別有價值。 透過使用您已經熟悉的Razor語法,您可以保持 Web 視圖和 PDF 輸出之間的一致性。

我需要哪些NuGet套件才能將Razor轉換為 PDF 檔案?

IronPdf.Extensions.Razor 套件是主IronPdf套件的擴充。 在ASP.NET Core Web 應用程式中,要將Razor Pages 渲染為 PDF 文檔,需要安裝 IronPdf.Extensions.RazorIronPdf 這兩個軟體包。有關詳細的安裝說明,請造訪我們的安裝概述指南。

# Command to install IronPdf.Extensions.Razor package using NuGet Package Manager
Install-PackageIronPDFRazor
# Command to install IronPdf.Extensions.Razor package using NuGet Package Manager
Install-PackageIronPDFRazor
SHELL
用於 PDF 的 C# NuGet庫

使用NuGet安裝

Install-PackageIronPDFRazor

如何在ASP.NET Core中將Razor頁面轉換為 PDF?

你需要一個ASP.NET Core Web 應用程式專案才能將Razor Pages 轉換為 PDF 檔案。 流程包括建立資料模型、設定Razor頁面以顯示該數據,然後使用 IronPDF 的 RenderRazorToPdf 方法產生 PDF 輸出。

為什麼我需要一個用於生成 PDF 的模型類別?

模型類別是Razor Pages 中資料表示的支柱。 它們提供了一種結構化的方式,可以將資料從控制器邏輯傳遞到視圖,從而確保類型安全性和可維護性。 在產生 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

如何設定用於 PDF 轉換的Razor頁面?

在"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>
HTML

將Razor Pages 渲染為 PDF

接下來,下面的程式碼首先實例化ChromePdfRenderer類別。 將此傳遞給 RenderRazorToPdf 方法即可將此Razor頁面轉換為 PDF 文件。

您可以完全存取渲染選項中提供的所有功能。 這些功能包括為產生的 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
$vbLabelText   $csharpLabel

RenderRazorToPdf 方法傳回一個PdfDocument對象,該對象可以進行額外的處理和編輯。 您可以將 PDF 匯出為 PDFAPDFUA,對渲染的 PDF 文件套用數位簽名,或合併和分割 PDF 文件。 該方法還允許您旋轉頁面、添加註釋或書籤,並在 PDF 上添加自訂浮水印。

為了更好地管理文檔,您還可以壓縮 PDF 文件以減小文件大小,而不會影響品質。 這在處理大型報告或頻寬有限的情況下尤其有用。 此外, IronPDF提供的強大編輯功能已在我們的綜合 PDF 編輯教學中進行了詳細說明。

如何為PDF產生頁面新增導航?

在ASP.NET Core應用程式中,導航對於使用者體驗至關重要。 透過將 PDF 生成頁面整合到主導航中,使用者無需手動輸入 URL 即可輕鬆存取該功能。

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

請確保 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>
HTML

運行 PDF 生成程式時會發生什麼?

本文檔將向您展示如何執行專案並產生 PDF 文件。 點擊"人員"導覽連結後,您將看到以表格形式顯示的資料。 點擊"列印"按鈕會觸發 PDF 產生過程,將目前Razor頁面視圖轉換為可下載的 PDF 文件。

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

產生的 PDF 檔案保留了Razor頁面中的所有樣式和格式,確保網頁視圖和 PDF 輸出之間外觀一致。 這種方法對於產生報表、發票或任何需要從應用程式資料庫或業務邏輯中取得資料的文件特別有用。

哪裡可以下載完整的ASP.NET Core Web 應用程式範例?

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

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

常見問題解答

如何在 ASP.NET Core 中將 Razor Pages 轉換為 PDF?

您可以在 ASP.NET Core 中使用 IronPDF 的 RenderRazorToPdf 方法將 Razor Pages 轉換為 PDF。只需安裝 IronPDF.Extensions.Razor 套件,並使用 ChromePdfRenderer 直接將您的 .cshtml 檔案渲染為 PDF 文件。

Razor to PDF 轉換需要哪些 NuGet 套件?

您需要兩個 NuGet 套件:IronPDF.Extensions.Razor (擴充套件) 和 IronPDF (主套件)。在 ASP.NET Core Web Apps 中將 Razor 頁面呈現為 PDF 文件需要這兩個套件。

當轉換成PDF時,我可以在我的Razor Pages中使用動態資料嗎?

是的,IronPDF 完全支援 Razor Pages 中的動態資料。在轉換為 PDF 時,您可以使用 C# 程式碼、模型綁定,以及所有標準的 Razor 語法功能,使其非常適合於產生具有動態內容的報表、發票和證書。

我可以從 Razor Pages 產生哪些類型的文件?

IronPDF 的 Razor to PDF 轉換功能非常適合生成各種類型的文件,包括報告、發票、證書、收據以及任何其他需要動態資料展示的文件,同時還能保持您現有的 HTML 和 CSS 定義。

如何在我的專案中快速實現 Razor 到 PDF 的轉換?

使用 IronPDF,您可以在幾分鐘內實現 Razor 到 PDF 的轉換。最低限度的工作流程僅包含 5 個步驟:安裝函式庫、新增模型類別、建立 Razor 頁面、編輯 .cs 檔案以使用 RenderRazorToPdf 方法,以及執行您的應用程式。

轉換是否會維護我的 HTML 和 CSS 設定?

是的,IronPDF 在將 Razor Pages 轉換為 PDF 時會保留您的 HTML 和 CSS 定義。這允許您使用您已經創建的相同的樣式和佈局來保持您的網頁視圖和 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 下載 18,120,209 | 版本: 2026.4 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 變成 PDF。