如何使用 C# 在 Blazor Server 中將 Razor 轉換為 PDF

使用 C# 在 Blazor Server 中將 Razor 轉換為 PDF PdfDocument

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

使用 IronPDF 的 RenderRazorComponentToPdf 方法,在 Blazor Server 中將 Razor 元件轉換為 PDF。 只需少量程式碼,即可將 C# UI 元件轉換為 PDF,並可完全自訂頁首、頁尾及頁面格式。

快速入門:幾分鐘內將 Razor 元件轉換為 PDF

在 Blazor Server 應用程式中,使用 IronPDF 將 Razor 元件轉換為 PDF。 RenderRazorComponentToPdf 方法只需幾行程式碼,即可將您的 Razor 元件轉換為 PDF 檔案。 請遵循本指南,以最少的設定和靈活的自訂選項,將 Razor 轉 PDF 功能整合至您的專案中。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 請複製並執行此程式碼片段。

    // Install-Package IronPdf.Extensions.Blazor
    var pdf = new IronPdf.ChromePdfRenderer()
        .RenderRazorComponentToPdf<MyComponent>(new Dictionary<string,object> { {"persons",personsList} })
        .SaveAs("component-to-pdf.pdf");
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronPDF

    arrow pointer

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

IronPdf.Extensions.Blazor 套件擴展了主要的 IronPdf 套件。 這兩套套件皆為在 Blazor Server 應用程式中將 Razor 元件渲染為 PDF 文件所必需。此擴充套件為 Blazor Server 應用程式提供整合點,讓您無需進行大規模重構,即可將現有的 Razor 元件轉換為 PDF 文件。

安裝 IronPdf.Extensions.Blazor 時,會自動將核心 IronPdf 函式庫作為依賴項一併包含。 此擴充套件新增了如 RenderRazorComponentToPdf 等方法,這些方法能理解 Blazor 的元件模型,並正確渲染具有綁定資料的元件。 為獲得最佳效能與最新功能,請使用這兩套套件的最新版本。 請查閱更新日誌以了解最新更新與改進。

Install-Package IronPdf.Extensions.Blazor
用於 PDF 的 C# NuGet 函式庫

透過 NuGet 安裝

Install-Package IronPdf.Extensions.Blazor

如何在 Blazor Server 中將 Razor 元件渲染為 PDF?

需建立一個 Blazor Server App 專案,以將 Razor 元件轉換為 PDF 檔案。 Blazor Server 應用程式在伺服器端執行,並透過 SignalR 連線渲染 UI 更新,因此非常適合需要伺服器端處理的 PDF 生成情境。 此架構確保 PDF 渲染在伺服器端進行,無論客戶端使用何種瀏覽器或裝置,皆能提供一致的渲染結果。

開始之前,請確認您已安裝 .NET SDK,並具備 Visual Studio 2019 或更新版本,且已安裝 ASP.NET 及網頁開發工作負載。 透過 Visual Studio 的專案範本,或使用 .NET CLI 搭配 dotnet new blazorserver 建立新的 Blazor Server 應用程式。 有關詳細的安裝說明及特定平台的要求,請參閱《安裝概覽》。

我應該使用哪種模型類別結構?

新增一個名為 PersonInfo 的標準 C# 類別。 此類別用作儲存個人資訊的模型。 插入以下程式碼:

:path=/static-assets/pdf/content-code-examples/how-to/razor-to-pdf-blazor-server-model.cs
namespace BlazorSample.Data
{
    public class PersonInfo
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
    }
}
Namespace BlazorSample.Data
	Public Class PersonInfo
		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 元件並渲染至 PDF 中的資料結構。 IronPDF 可與任何 C# 物件模型配合使用,從簡單的 POCO 到複雜的Entity Framework模型皆可。 在設計 PDF 生成模型時,請考量資料在最終文件中的呈現方式,並據此設定屬性結構。

如何實作 Razor 元件來產生 PDF?

請使用 RenderRazorComponentToPdf 方法將 Razor 元件轉換為 PDF 檔案。 透過實例化 ` 類別來存取此方法。 此方法會傳回一個PdfDocument` 物件,供匯出或進一步修改使用。

產出的 PdfDocument 支援進一步的修改,包括轉換為 PDF/APDF/UA 格式。 您可以合併或拆分文件、旋轉頁面,以及新增註解書籤。 請視需要套用自訂浮水印

新增一個名為 Person.razor 的 Razor 元件。 請輸入以下程式碼:

@page "/Person"
@using BlazorSample.Data;
@using IronPdf;
@using IronPdf.Extensions.Blazor;

<h3>Person</h3>

@code {
    // A parameter to receive a list of persons from the parent component.
    [Parameter]
    public IEnumerable<PersonInfo> persons { get; set; }

    // Dictionary to hold parameters that will be passed to the PDF renderer.
    public Dictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();

    protected override async Task OnInitializedAsync()
    {
        // Initialize the persons list with some sample data.
        persons = new List<PersonInfo>
        {
            new PersonInfo { Name = "Alice", Title = "Mrs.", Description = "Software Engineer" },
            new PersonInfo { Name = "Bob", Title = "Mr.", Description = "Software Engineer" },
            new PersonInfo { Name = "Charlie", Title = "Mr.", Description = "Software Engineer" }
        };
    }

    private async void PrintToPdf()
    {
        ChromePdfRenderer renderer = new ChromePdfRenderer();

        // Apply text footer to the PDF pages.
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            LeftText = "{date} - {time}",
            DrawDividerLine = true,
            RightText = "Page {page} of {total-pages}",
            Font = IronSoftware.Drawing.FontTypes.Arial,
            FontSize = 11
        };

        Parameters.Add("persons", persons);

        // Render Razor component to PDF and save it.
        PdfDocument pdf = renderer.RenderRazorComponentToPdf<Person>(Parameters);
        File.WriteAllBytes("razorComponentToPdf.pdf", pdf.BinaryData);
    }
}

<table class="table">
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>Description</th>
    </tr>
    @foreach (var person in persons)
    {
        <tr>
            <td>@person.Name</td>
            <td>@person.Title</td>
            <td>@person.Description</td>
        </tr>
    }
</table>

<button class="btn btn-primary" @onclick="PrintToPdf">Print to Pdf</button>

此方法可存取所有 RenderingOptions 功能。 請添加文字及 HTML 頁首與頁尾,包含頁碼,並調整頁面尺寸與版面配置。 RenderingOptions 支援自訂邊距、適用於響應式設計的視口設定,以及用於動態內容的 JavaScript 執行延遲。

針對複雜版面配置或 Bootstrap 等 CSS 框架,請運用響應式 CSS 渲染功能,確保 PDF 在不同頁面尺寸下皆能正確顯示。

如何在我的 Razor 元件中新增導覽功能?

  • 導航至"共用資料夾"並開啟 NavMenu.razor。 請新增將開啟我們的 Razor 元件的區段,Person。 我們的 Person 元件將是第二個選項。
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <nav class="flex-column">
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="Person">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Person
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <span class="oi oi-plus" aria-hidden="true"></span> Counter
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
            </NavLink>
        </div>
    </nav>
</div>

此導覽設定與 Blazor 的路由系統整合,讓使用者能透過應用程式的首頁導覽選單存取 PDF 生成功能。 NavLink 元件可確保正確標示當前路徑。

PDF 生成流程是怎樣的?

執行專案並產生 PDF 文件。 點擊"列印為 PDF"按鈕。 IronPDF 會處理您的 Razor 元件,將其轉換為 HTML,並透過其基於 Chrome 的渲染引擎將其渲染為 PDF。這能維持與現代網頁瀏覽器相同的視覺保真度。

Visual Studio debugging Blazor app with PDF generation code using `ChromePdfRenderer` and Razor components

生成的 PDF 檔案將儲存於您的專案輸出目錄中。 自訂儲存位置、實作直接瀏覽器下載功能,或將 PDF 檔案儲存至 Azure Blob Storage 等雲端儲存空間。 針對生產環境的應用程式,請針對 PDF 生成可能失敗或耗時超出預期等情境,實作錯誤處理與使用者回饋機制。

哪裡可以下載完整的運作範例?

請下載本指南的完整程式碼(ZIP 檔)。在 Visual Studio 中以 Blazor Server App 專案開啟該檔案。 此範例包含所有依賴項、設定及範例程式碼,讓您能立即在 Blazor 應用程式中開始進行 Razor 轉 PDF 的轉換。

下載 Blazor 範例專案,用於 Razor 轉 PDF

準備好探索更多可能性了嗎? 請點此查看我們的教學頁面:PDF 轉換

如需更進階的應用情境,請參閱我們的 Blazor 教學指南,其中涵蓋了在 Blazor 應用程式中使用 IronPDF 的其他整合模式與最佳實務。

常見問題

在 Blazor Server 中,將 Razor 元件轉換為 PDF 的最快方法是什麼?

最快速的方法是使用 IronPDF 的 RenderRazorComponentToPdf 方法。只需一行程式碼,即可將任何 Razor 元件轉換為 PDF:var pdf = new IronPdf.ChromePdfRenderer().RenderRazorComponentToPdf(new Dictionary { {"persons",personsList} }).SaveAs("component-to-pdf.pdf");

在 Blazor Server 中進行 Razor 轉 PDF 轉換需要哪些 NuGet 套件?

您需要 IronPdf.Extensions.Blazor 套件,該套件會自動將核心 IronPDF 函式庫作為依賴項包含在內。請使用以下指令安裝:Install-Package IronPdf.Extensions.Blazor

將 Razor 元件轉換為 PDF 時,我可以添加自訂的頁首和頁尾嗎?

是的,當您使用 RenderRazorComponentToPdf 方法轉換 Razor 元件時,IronPDF 提供完整的頁首、頁尾及頁面格式自訂選項。

為何建議使用 Blazor Server 從 Razor 元件生成 PDF?

Blazor Server 應用程式在伺服器端運行,並透過 SignalR 連線渲染 UI 更新,使其成為生成 PDF 的理想選擇。此架構確保 IronPDF 的渲染在伺服器端進行,無論客戶端使用何種瀏覽器或裝置,皆能提供一致的結果。

我需要重構現有的 Razor 元件才能將其轉換為 PDF/A 嗎?

不,IronPdf.Extensions.Blazor 套件可讓您無需進行大規模重構,即可將現有的 Razor 元件轉換為 PDF。此擴充套件提供了能理解 Blazor 元件模型的整合點。

在轉換為 PDF 時,該如何將資料傳遞給我的 Razor 元件?

您可以在 RenderRazorComponentToPdf 方法中使用 Dictionary 參數傳遞資料。例如:new Dictionary { {"persons", personsList} },其中 "persons" 是參數名稱,personsList 則是您的資料。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 19,014,616 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 轉為 PDF。