如何使用 Razor 無頭地在 C# 中將 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

使用Razor將 cshtml 文件轉換為 HTML,然後使用 IronPDF 的 RenderHtmlAsPdf 方法產生 PDF 文檔,無需 GUI 或瀏覽器窗口,即可在 C# 中將Razor視圖轉換為 PDF。

無頭渲染是指在沒有圖形使用者介面的情況下處理網頁內容。 IronPDFRazor很有用,但它缺乏無頭渲染功能。 本指南旨在彌補這一空白。

我們將使用Razor將 cshtml 轉換為 HTML,然後使用IronPDF產生 PDF。

快速入門:秒速將Razor視圖轉換為 PDF

使用 IronPDF 的無頭轉換功能,將Razor視圖轉換為 PDF。 使用 IronPdf.HtmlToPdf.StaticRender.RenderHtmlAsPdf 將Razor視圖中的 HTML 渲染成 PDF。 這種方法在ASP.NET Core環境中可以無縫運作。

  1. 使用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 ,即可在ASP.NET Core Web 應用程式中將Razor視圖轉換為 HTML。

# Install the Razor.Templating.Core package using NuGet Package Manager
Install-Package Razor.Templating.Core
# Install the Razor.Templating.Core package using NuGet Package Manager
Install-Package Razor.Templating.Core
SHELL

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

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

為什麼我需要Razor而不是IronPDF ?

Razor提供真正的無頭渲染-無需 Web 上下文或瀏覽器視窗即可將Razor視圖轉換為 HTML。 這適用於後台服務、控制台應用程式或無使用者介面環境。 IronPDF需要 Web 環境才能Razor。

哪種項目類型最適合無頭 PDF 生成?

ASP.NET Core Web App(模型-視圖-控制器)專案提供必要的Razor視圖基礎架構以及靈活的部署選項。 可以在背景服務、Azure Functions 或控制台應用程式中使用此方法。 請參閱將IronPDF部署到 Azure以實現基於雲端的生成。

如何安裝所需的NuGet套件?

使用NuGet套件管理器安裝套件。 您需要IronPDF和Razor:

// Install via Package Manager Console
Install-Package IronPdf
Install-Package Razor.Templating.Core

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

// Or add to your .csproj file
// <PackageReference Include="IronPdf" Version="2024.x.x" />
// <PackageReference Include="Razor.Templating.Core" Version="1.x.x" />
$vbLabelText   $csharpLabel

如何建立和配置用於產生 PDF 的Razor視圖?

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

Visual Studio 解決方案資源管理器上下文選單顯示

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

新增要渲染為 PDF 的 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 和列印樣式來確保完美的 PDF 渲染效果。 IronPDF支援現代 CSS3 功能,可實現複雜的文件佈局。

為什麼在PDF數據展示中使用表格?

表格提供結構化、組織化的信息,可以很好地轉化為印刷文件。 它們在各個平台上保持一致的格式,並且可以以 PDF 格式閱讀。 IronPDF 的渲染引擎能夠很好地處理表格佈局,保留邊框、間距和對齊方式。 如需進階格式設置,請探索自訂邊距以最佳化佈局。

PDF 輸出的常見樣式註意事項有哪些?

對於 PDF 輸出,請使用列印專用 CSS 媒體查詢、固定像素值而不是相對單位,並嵌入字體以保持一致的渲染效果。 IronPDF支援網頁字體和圖示字體,以保持品牌一致性。 多頁文件請考慮分頁符,並設定適當的頁邊距以保持專業外觀。

如何配置 Program.cs 以實現無頭 PDF 渲染?

在"Program.cs"檔案中,加入以下程式碼。 它使用Razor中的 RenderAsync 將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");
});
$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);
}
$vbLabelText   $csharpLabel

何時應該啟用詳細日誌記錄?

在開發和故障排除過程中啟用詳細日誌記錄。 IronPDF 的日誌記錄功能可以提供有關渲染的深入信息,幫助識別 HTML 解析、資源加載或配置問題。 對於生產環境,請使用自訂日誌記錄與應用程式的日誌記錄基礎架構整合。

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

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

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

除了波浪號 (~) 路徑問題之外,還要確保影像來源使用絕對路徑或正確的相對引用。 對於外部資源,請使用基本 URL以確保資源正確載入。 如需 Azure Blob 儲存映像,請參閱嵌入 Azure Blob 儲存體中的映像

靜態資源如何影響 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 延遲來確保內容載入完畢後再進行渲染。

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

下載完整的程式碼,格式為壓縮的 Visual Studio ASP.NET Core Web 應用程式(模型-視圖-控制器)專案。

點擊此處下載項目。

運行範例專案需要哪些先決條件?

您需要 Visual Studio 2019 或更高版本,以及.NET 6.0 SDK 或更高版本。 此專案需要網際網路連線以進行NuGet包還原。 運行前請在 Program.cs 檔案中更新IronPDF許可證密鑰。 部署時,請查閱Windows 安裝指南以了解其他要求。

如何根據我的使用場景自訂範例?

此範例可為您的具體需求奠定基礎。 新增動態資料模型,實現頻繁產生的 PDF 的緩存,或與現有身份驗證整合。 對於進階場景,可以探索非同步 PDF 生成以提高效能,或實施PDF 壓縮以減少檔案大小。 新增數位簽章以驗證文件真實性,或為敏感文件新增密碼保護

常見問題解答

如何在 C# 中將 Razor 視圖轉換為 PDF 而無需 GUI?

使用 Razor.Templating.Core 將 cshtml 檔案轉換為 HTML,然後再使用 IronPDF 的 RenderHtmlAsPdf 方法無頭生成 PDF。這兩個步驟讓您可以將 Razor View 轉換成 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 (Model-View-Controller) 專案,提供必要的 Razor View 基礎架構與彈性部署選項。此設定與 IronPDF 的背景服務、Azure Functions 或主控台應用程式搭配使用效果極佳。

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

使用 NuGet 套件管理程式安裝 Razor.Templating.Core,指令為「Install-Package Razor.Templating.Core」。您還需要在專案中安裝 IronPDF,以處理 HTML 到 PDF 的轉換步驟。

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

是的,IronPDF 的無頭 Razor to PDF 轉換在雲端環境中運作出色,包括 Azure Functions、AWS Lambda 和容器化應用程式,使其成為可擴充的文件生成服務的理想選擇。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

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

準備好開始了嗎?
Nuget 下載 17,803,474 | 版本: 2026.3 剛剛發布
Still Scrolling Icon

還在滾動嗎?

想快速取得證據? PM > Install-Package IronPdf
運行範例看著你的HTML程式碼變成PDF檔。