如何使用 C# 透過 Razor 無頭模式將 CSHTML 轉換為 PDF | IronPDF

How to Convert Razor Views to PDFs Headlessly in C

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

透過 C# 將 Razor 檢視轉換為 PDF:使用 Razor.Templating.Co/recshtml 檔案轉換為 HTML,接著利用 IronPDF 的 RenderHtmlAsPdf 方法生成 PDF 文件,無需使用 GUI 或瀏覽器視窗。

無頭渲染是在不使用圖形使用者介面的情況下處理網頁內容。 雖然 IronPdf.Extensions.Razor 相當實用,但缺乏無頭渲染功能。 本指南旨在填補此缺口。

我們將使用 Razor.Templating.Co/recshtml 轉換為 HTML,再透過 IronPDF 產生 PDF 檔案。

快速入門:數秒內將 Razor 檢視轉換為 PDF

利用 IronPDF 的無頭轉換功能,將 Razor 檢視轉為 PDF 檔案。 請使用 IronPdf.HtmlToPdf.StaticRender.RenderHtmlAsPdf 將 Razor 檢視中的 HTML 渲染至 PDF 檔案中。 此方法可在 ASP.NET Core 環境中無縫運作。

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

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

    var html = await RazorTemplateEngine.RenderAsync("Views/Template.cshtml", model); 
    new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf(html).SaveAs("output.pdf");
  3. 部署至您的生產環境進行測試

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

    arrow pointer

安裝 Razor.Templating.Co/re 以將 ASP.NET Core Web Apps 中的 Razor 檢視轉換為 HTML。

# Install the Razor.Templating.Co/re package using NuGet Package Manager
Install-Package Razor.Templating.Co/re
# Install the Razor.Templating.Co/re package using NuGet Package Manager
Install-Package Razor.Templating.Co/re
SHELL

如何設定我的 ASP.NET Core 專案以進行 Razor 轉 PDF 轉換?

您需要一個 ASP.NET Core Web App(模型-視圖-控制器)專案,才能將視圖轉換為 PDF 檔案。 設定流程包含在 Visual Studio 中建立專案、安裝 NuGet 套件,以及配置專案結構。 如需類似技術,請參閱 MVC Core 中將 CSHTML 轉換為 PDF,或使用 Razor Pages 將 CSHTML 轉換為 PDF

為什麼我需要使用 Razor.Templating.Co/re 而不是 IronPdf.Extensions.Razor

Razor.Templating.Co/re 提供真正的無頭渲染功能——無需網頁執行環境或瀏覽器視窗,即可將 Razor 檢視轉換為 HTML。 此方案適用於後台服務、主控台應用程式或無使用者介面的環境。 IronPdf.Extensions.Razor 需在網頁環境中運作。

哪種專案類型最適合用於無頭 PDF 生成?

ASP.NET Core Web App (Model-View-Controller) 專案提供必要的 Razor 視圖基礎架構,並具備靈活的部署選項。 請在背景服務、Azure Functions 或主控台應用程式中使用此方法。 請參閱《將 IronPDF 部署至 Azure》以進行雲端生成。

如何安裝所需的 NuGet 套件?

請使用 NuGet 套件管理員安裝套件。 您需要 IronPdfRazor.Templating.Co/re

// Install via Package Manager Console
Install-Package IronPdf
Install-Package Razor.Templating.Co/re

// Or add to your .csproj file
// <PackageReference Include="IronPdf" Version="2024.x.x" />
// <PackageReference Include="Razor.Templating.Co/re" Version="1.x.x" />
// Install via Package Manager Console
Install-Package IronPdf
Install-Package Razor.Templating.Co/re

// Or add to your .csproj file
// <PackageReference Include="IronPdf" Version="2024.x.x" />
// <PackageReference Include="Razor.Templating.Co/re" Version="1.x.x" />
' Install via Package Manager Console
' Install-Package IronPdf
' Install-Package Razor.Templating.Co/re

' Or add to your .vbproj file
' <PackageReference Include="IronPdf" Version="2024.x.x" />
' <PackageReference Include="Razor.Templating.Co/re" Version="1.x.x" />
$vbLabelText   $csharpLabel

如何建立並設定用於產生 PDF 的 Razor 檢視?

  • 右鍵點擊"首頁"資料夾。 選擇"新增",然後選擇"新增檢視"。
  • 建立一個名為"Data.cshtml"的空白 Razor 檢視。

Visual Studio 解決方案資源管理員的右鍵選單,顯示

我應該在 Razor 視圖中加入哪些 HTML 內容?

請輸入您要渲染為 PDF/A 的 HTML 內容:

<table class="table">
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>Description</th>
    </tr>
    <tr>
        <td>John Doe</td>
        <td>Software Engineer</td>
        <td>Experienced software engineer specializing in web development.</td>
    </tr>
    <tr>
        <td>Alice Smith</td>
        <td>Project Manager</td>
        <td>Seasoned project manager with expertise in agile methodologies.</td>
    </tr>
    <tr>
        <td>Michael Johnson</td>
        <td>Data Analyst</td>
        <td>Skilled data analyst proficient in statistical analysis and data visualization.</td>
    </tr>
</table>
<table class="table">
    <tr>
        <th>Name</th>
        <th>Title</th>
        <th>Description</th>
    </tr>
    <tr>
        <td>John Doe</td>
        <td>Software Engineer</td>
        <td>Experienced software engineer specializing in web development.</td>
    </tr>
    <tr>
        <td>Alice Smith</td>
        <td>Project Manager</td>
        <td>Seasoned project manager with expertise in agile methodologies.</td>
    </tr>
    <tr>
        <td>Michael Johnson</td>
        <td>Data Analyst</td>
        <td>Skilled data analyst proficient in statistical analysis and data visualization.</td>
    </tr>
</table>
HTML

對於複雜的版面配置,請使用 CSS 和 PRINT 樣式以確保 PDF 完美呈現。 IronPDF 支援現代 CSS3 功能,可實現精緻的文件版面配置。

為何使用表格來顯示 PDF 資料?

表格能提供結構化且條理分明的資訊,非常適合轉譯為印刷文件。 這些工具在各平台上格式一致,且以 PDF 格式呈現時仍具可讀性。 IronPDF 的渲染引擎能妥善處理表格佈局,完整保留邊框、間距及對齊方式。 若需進階排版,請嘗試調整自訂邊距以優化版面配置。

PDF 輸出時常見的樣式考量有哪些?

針對 PDF 輸出,請使用專為列印設計的 CSS 媒體查詢、固定像素值(而非相對單位),並採用內嵌字型以確保渲染效果一致。 IronPDF 支援網頁字型與圖示字型,以確保品牌一致性。 針對多頁文件,請考慮分頁設定,並設定適當的邊距以呈現 Professional 外觀。

如何設定 Program.cs 以進行無頭 PDF 渲染?

Program.cs 中加入此程式碼。 它使用 RenderAsyncRazor.Templating.Co/re 將 Razor 檢視轉換為 HTML,然後實例化 ChromePdfRenderer 並將 HTML 傳遞給 RenderHtmlAsPdf。 請使用 RenderingOptions 來處理自訂文字、頁首、頁尾、邊距及頁碼。

app.MapGet("/PrintPdf", async () =>
{
    // Set your IronPDF license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Enable detailed logging for troubleshooting
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

    // Render the Razor view to an HTML string
    string html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");

    // Create a new instance of ChromePdfRenderer 
    ChromePdfRenderer renderer = new ChromePdfRenderer();

    // Configure rendering options for professional output
    renderer.RenderingOptions.PaperSize = IronPdf.PdfPaperSize.A4;
    renderer.RenderingOptions.MarginTop = 25;
    renderer.RenderingOptions.MarginBottom = 25;
    renderer.RenderingOptions.MarginLeft = 20;
    renderer.RenderingOptions.MarginRight = 20;

    // Render the HTML string as a PDF document
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");

    // Return the PDF file as a response
    return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
});
app.MapGet("/PrintPdf", async () =>
{
    // Set your IronPDF license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Enable detailed logging for troubleshooting
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

    // Render the Razor view to an HTML string
    string html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");

    // Create a new instance of ChromePdfRenderer 
    ChromePdfRenderer renderer = new ChromePdfRenderer();

    // Configure rendering options for professional output
    renderer.RenderingOptions.PaperSize = IronPdf.PdfPaperSize.A4;
    renderer.RenderingOptions.MarginTop = 25;
    renderer.RenderingOptions.MarginBottom = 25;
    renderer.RenderingOptions.MarginLeft = 20;
    renderer.RenderingOptions.MarginRight = 20;

    // Render the HTML string as a PDF document
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");

    // Return the PDF file as a response
    return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
});
Imports IronPdf
Imports Microsoft.AspNetCore.Builder

app.MapGet("/PrintPdf", Async Function()
    ' Set your IronPDF license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"

    ' Enable detailed logging for troubleshooting
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All

    ' Render the Razor view to an HTML string
    Dim html As String = Await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml")

    ' Create a new instance of ChromePdfRenderer 
    Dim renderer As New ChromePdfRenderer()

    ' Configure rendering options for professional output
    renderer.RenderingOptions.PaperSize = IronPdf.PdfPaperSize.A4
    renderer.RenderingOptions.MarginTop = 25
    renderer.RenderingOptions.MarginBottom = 25
    renderer.RenderingOptions.MarginLeft = 20
    renderer.RenderingOptions.MarginRight = 20

    ' Render the HTML string as a PDF document
    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, "./wwwroot")

    ' Return the PDF file as a response
    Return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")
End Function)
$vbLabelText   $csharpLabel

我可以對 PDF 檔案套用哪些渲染選項?

IronPDF 提供豐富的渲染選項。 新增頁首與頁尾、設定自訂紙張尺寸、控制頁面方向,以及添加浮水印ChromePdfRenderer 提供超過 50 個屬性,用於自訂 PDF 生成。

如何處理 PDF 生成過程中的錯誤?

實作錯誤處理機制以確保 PDF 生成過程的穩健性:

try
{
    var html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");
    return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
}
catch (Exception ex)
{
    // Log the error details
    IronPdf.Logging.Logger.Log($"PDF generation failed: {ex.Message}");
    return Results.Problem("Failed to generate PDF", statusCode: 500);
}
try
{
    var html = await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml");
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot");
    return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf");
}
catch (Exception ex)
{
    // Log the error details
    IronPdf.Logging.Logger.Log($"PDF generation failed: {ex.Message}");
    return Results.Problem("Failed to generate PDF", statusCode: 500);
}
Imports IronPdf
Imports System.Threading.Tasks

Public Class PdfGenerator
    Public Shared Async Function GeneratePdfAsync() As Task(Of IResult)
        Try
            Dim html = Await RazorTemplateEngine.RenderAsync("Views/Home/Data.cshtml")
            Dim renderer = New ChromePdfRenderer()
            Dim pdf = renderer.RenderHtmlAsPdf(html, "./wwwroot")
            Return Results.File(pdf.BinaryData, "application/pdf", "razorViewToPdf.pdf")
        Catch ex As Exception
            ' Log the error details
            IronPdf.Logging.Logger.Log($"PDF generation failed: {ex.Message}")
            Return Results.Problem("Failed to generate PDF", statusCode:=500)
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

何時應啟用詳細記錄?

在開發與疑難排解期間啟用詳細記錄功能。 IronPDF 的日誌記錄功能可提供渲染過程的深入分析,有助於識別 HTML 解析、資源載入或設定相關的問題。 在正式部署時,請使用自訂記錄功能以整合至您的應用程式記錄基礎架構中。

為什麼我需要修改資產連結路徑?

請導航至"檢視">"共用"> _Layout.cshtml。 在連結標籤中,請將 "~/" 改為 "./",因為 "~/" 與 IronPDF 相容性不佳。

我還應注意哪些與路徑相關的問題?

除波浪號 (~) 路徑問題外,請確保圖片來源使用絕對路徑或正確的相對路徑。 針對外部資源,請使用基礎網址以確保資源能正確載入。 關於 Azure Blob Storage 圖片,請參閱"從 Azure Blob Storage 嵌入圖片"。

靜態資產如何影響 PDF 生成?

靜態資源(CSS、JavaScript、圖片)會影響 PDF 生成效能與品質。 請確保渲染過程中資源可存取,使用最佳化圖片,並考慮將關鍵 CSS 內嵌於頁面中以加快渲染速度。 瞭解 JavaScript 密集型內容的渲染延遲與超時問題。

如何測試我的無頭 PDF 生成功能?

執行專案以產生 PDF 文件。

Visual Studio showing running ASP.NET Core MVC app with Program.cs open and successful debug output

輸出 PDF

最終的 PDF 檔案應呈現何種樣貌?

您的 PDF 檔案應完整保留所有 Razor View 格式設定——包括表格結構、字型、顏色及版面配置。 版面應適當調整,邊距整潔且外觀專業。 為驗證輸出品質,請使用 IronPDF 的光柵化功能將頁面預覽為圖片。

如何排除常見的 PDF 渲染問題?

常見問題包括樣式缺失、版面錯亂或內容不完整。 啟用詳細記錄、驗證資產路徑,並確保 HTML 能正確通過驗證。 若遇到複雜的版面配置,請在轉換前使用 Chrome 除錯工具預覽 HTML。 若遇到特定的渲染問題,請使用 WaitFor 延遲機制,以確保內容載入完畢後再進行渲染。

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

請下載完整的程式碼,此為 ZIP 格式的 Visual Studio ASP.NET Core Web App (Model-View-Controller) 專案。

點擊此處下載專案。

執行範例專案有哪些先決條件?

您需要 Visual Studio 2019 或更新版本,並搭配 .NET 6.0 SDK 或更高版本。 本專案需連線至網際網路以進行 NuGet 套件還原。 執行前請在 Program.cs 中更新您的 IronPDF 授權金鑰。 關於部署,請參閱 Windows 安裝指南以了解其他需求。

如何根據我的使用情境自訂範例?

此範例可作為您根據具體需求進行調整的基礎。 新增動態資料模型、為經常產生的 PDF 實作快取功能,或與現有的驗證機制整合。 針對進階情境,可探索使用非同步 PDF 生成以提升效能,或實作 PDF 壓縮以減小檔案大小。 為文件真實性添加數位簽章,或為敏感文件設定密碼保護

常見問題

如何在 C# 中不使用 GUI 將 Razor 檢視轉換為 PDF?

使用 Razor.Templating.Core 將 cshtml 檔案轉換為 HTML,接著使用 IronPDF 的 RenderHtmlAsPdf 方法進行無頭 PDF 生成。透過這個兩步驟流程,您無需圖形使用者介面或瀏覽器視窗,即可將 Razor 檢視轉換為 PDF 文件。

將 Razor 視圖無頭渲染為 PDF 的最快方法是什麼?

最快速的方法是使用兩行程式碼:首先透過 RazorTemplateEngine.RenderAsync 將您的 Razor 檢視轉換為 HTML,接著使用 IronPDF 的 ChromePdfRenderer().RenderHtmlAsPdf(html).SaveAs() 方法來建立並儲存 PDF 檔案。

為什麼應該使用 Razor.Templating.Core 而不是 IronPdf.Extensions.Razor?

Razor.Templating.Core 提供真正的無頭渲染功能,讓您無需網頁執行環境或瀏覽器視窗,即可將 Razor 檢視轉換為 HTML。雖然 IronPdf.Extensions.Razor 相當實用,但其運作需依賴網頁執行環境,因此 Razor.Templating.Core 更適合用於背景服務及主控台應用程式。

進行無頭 PDF 生成時,我需要哪種類型的 ASP.NET Core 專案?

請使用 ASP.NET Core Web App(模型-視圖-控制器)專案,該專案提供必要的 Razor 視圖基礎架構,並具備靈活的部署選項。此設定適用於 IronPDF for .NET 的背景服務、Azure Functions 或主控台應用程式。

如何安裝 Razor 轉 PDF 所需的套件?

請使用 NuGet 套件管理員,透過指令 'Install-Package Razor.Templating.Core' 安裝 Razor.Templating.Core。此外,您的專案中還需安裝 IronPDF,以處理 HTML 轉 PDF 的步驟。

我可以在雲端環境中使用這種無頭 PDF 生成方法嗎?

是的,IronPDF 的無頭 Razor 轉 PDF 轉換功能在雲端環境(包括 Azure Functions、AWS Lambda 及容器化應用程式)中運作極佳,使其成為可擴展文件生成服務的理想選擇。

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。