如何在 ASP.NET Core MVC 中將視圖轉換為 PDF | IronPDF for .NET

如何在 C## ASP.NET Core MVC 中將視圖轉換為 PDF。

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

使用 IronPDF 的 RenderRazorViewToPdf 方法將 ASP.NET Core MVC 視圖轉換為 PDF,在您的 MVC 應用程式中只需一行程式碼即可將 .cshtml 檔案轉換為高品質的 PDF 文件。

View 是 ASP.NET 框架中的一個元件,用於在 Web 應用程式中產生 HTML 標記。 它是模型-視圖-控制器 (MVC) 模式的一部分,常用於 ASP.NET MVC 和 ASP.NET Core MVC 應用程式。 視圖負責透過動態呈現 HTML 內容,將資料呈現給使用者。 視圖通常使用 Razor 語法,這是一種將基於伺服器的程式碼嵌入網頁的標記語法,使其成為建立資料驅動 PDF 文件的強大工具。

快速入門:在 ASP.NET Core 中將 CSHTML 轉換為 PDF

使用 IronPDF for .NET 將 ASP.NET Core MVC 視圖轉換為 PDF。 只需一行代碼,即可將您的 '.cshtml' 檔案渲染為 PDF 文件。 將此功能直接整合至您的 MVC 應用程式,以便從動態 HTML 視圖無縫產生 PDF。 按照本指南設定您的環境並開始轉換。

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

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

    PM > Install-Package IronPdf

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

    // using IronPdf.Extensions.Mvc.Core
    new IronPdf.ChromePdfRenderer().RenderRazorViewToPdf(HttpContext, "Views/Home/Report.cshtml", model).SaveAs("report.pdf");
  3. 部署到您的生產環境進行測試

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

ASP.NET Core Web App MVC(模型-視圖-控制器)是微軟提供的 Web 應用程式框架,用於使用 ASP.NET Core 建立 Web 應用程式。

  • 模型:代表資料和商業邏輯、管理資料互動、與資料來源溝通。
  • 檢視:呈現使用者介面、顯示資料、渲染資訊給使用者。
  • 控制器:處理使用者輸入、回應請求、與模型溝通、協調模型與視圖的互動。

IronPDF 可從 ASP.NET Core MVC 專案中的 View 直接建立 PDF 檔案。 這可讓 PDF 在 ASP.NET Core MVC 中直接生成,支援的現代功能包括CSS 造型JavaScript 執行,以及自訂字型

IronPDF 擴充套件需要哪些套件? `IronPdf.Extensions.Mvc.Core`包是`IronPdf`主包的擴充。 `IronPdf.Extensions.Mvc.Core` 和 `IronPdf` 兩個套件都需要在 ASP.NET Core MVC 中為 PDF 文件渲染視圖。 擴充套件提供與 ASP.NET Core 的相依性注入系統和 Razor 視圖渲染管道整合的特定功能。 ```shell :InstallCmd 安裝 IronPdf.Extensions.Mvc.Core 套件 ```

為什麼我需要 IronPDF 和擴充套件? IronPDF 的主套件包含核心 PDF 渲染引擎和基本功能,而 Extensions.Mvc.Core 套件則提供與 ASP.NET Core MVC 的視圖渲染系統的專門整合。 這樣的分離可以讓模組化更完善,並確保您只包含專案類型所需的特定功能。 該擴充套件包含 `IRazorViewRenderer` 介面以及在 PDF 生成前將 Razor 視圖轉換為 HTML 所需的實作。

我應該使用哪個 NuGet 套件版本? 請務必使用與 IronPDF 和 `IronPdf.Extensions.Mvc.Core` 相匹配的版本,以確保相容性。 如需最新的穩定版本和版本相容性資訊,請查看 NuGet 套件文件。 更新時,確保兩個套件一起更新,以維持適當的功能。

哪些是常見的安裝問題? 常見的安裝問題包括核心與擴充套件之間的版本不匹配、遺失的相依性或特定平台需求。 如果您遇到問題,請確保您的專案以支援的 .NET 版本為目標,並檢閱安裝概述以瞭解疑難排解步驟。
C# NuGet PDF 庫

使用 NuGet 安裝

安裝 IronPdf.Extensions.Mvc.Core 套件
(按鈕)

如何將視圖繪製成 PDF? 您需要一個 ASP.NET Core Web App (Model-View-Controller) 專案,將 View 轉換成 PDF 檔案。 這個過程包括建立一個控制器動作,使用 IronPDF 的 `RenderRazorViewToPdf` 方法來將您的 Razor 視圖轉換成 PDF 文件。 此方法充分利用 Razor 語法的全部功能,讓您可以建立複雜、資料驅動且內容動態的 PDF。

我應該使用何種專案類型? 使用 ASP.NET Core Web App (Model-View-Controller) 模板,以獲得與 IronPDF 視圖渲染功能的最佳相容性。 此專案類型提供檢視渲染所需的基礎架構,包括 Razor 檢視引擎和適當的路由。 對於現有的專案,請確保其遵循 MVC 模式,並安裝所需的檢視呈現功能。

我可以使用 Minimal APIs 嗎? 雖然 Minimal API 沒有內建檢視支援,但您仍可使用 IronPdf 的 HTML 至 PDF 轉換功能。 對於基於視圖的 PDF 生成,請使用傳統的 MVC 方法或考慮使用 Razor Pages 作為替代方案。

如何新增模型類別? - 進入"模型"資料夾。 - 建立一個新的 C# class 檔案,命名為 "Person"。該類將作為表示個人資料的模型。 請使用以下程式碼片段: ```csharp :path=/static-assets/pdf/content-code-examples/how-to/cshtml-to-pdf-mvc-core-model.cs ```

為什麼我需要 PDF 生成模型? 模型提供結構化的資料,這些資料可傳遞至檢視以進行呈現。 這樣的分工可確保您的 PDF 生成邏輯保持乾淨且可維護。 模型作為控制器與視圖之間的契約,可確保類型安全,並在 Razor 視圖中啟用 IntelliSense 支援。

哪些資料類型最適合使用視圖? 簡單的資料類型和集合最適合用來產生 PDF。 可以使用複雜的嵌套物件,但可能需要額外的檢視邏輯。 為了達到最佳效能,請先在控制器中將複雜的資料結構扁平化,然後再傳送到檢視。 當您的領域模型太複雜時,請考慮使用專為 PDF 輸出設計的 ViewModels。 以下是一個適合產生 PDF 的較複雜模型結構範例: ```csharp public class InvoiceViewModel { public string InvoiceNumber { get; set; } public DateTime InvoiceDate { get; set; } public decimal TotalAmount { get; set; } public ListLineItems { get; set; } public CustomerInfo Customer { get; set; } // Computed property for PDF display public string FormattedTotal => TotalAmount.ToString("C"); } public class InvoiceLineItem { public string Description { get; set; } public int Quantity { get; set; } public decimal UnitPrice { get; set; } public decimal LineTotal => Quantity * UnitPrice; } public class CustomerInfo { public string Name { get; set; } public string Email { get; set; } public string Address { get; set; } } ```

如何編輯控制器? 導覽至"Controllers"資料夾,並開啟"HomeController"檔案。我們將只變更 `HomeController` 並新增 `Persons` 動作。 請參考以下程式碼以取得指引: 下面的程式碼首先實體化 `ChromePdfRenderer` 類別,傳入 `IRazorViewRenderer` 、到我們的 `Views/Home/Persons.cshtml 的路徑`,以及包含所需資料的 List 到 `RenderRazorViewToPdf` 方法。 使用者可以使用 `RenderingOptions` 來存取一系列功能,例如新增自訂文字、在產生的 PDF 中加入 HTML 標頭和頁腳、定義自訂邊距,以及套用頁碼。 如需更多進階的渲染選項,請參閱渲染選項文件。 [{i:(可以使用以下程式碼在瀏覽器中檢視 PDF 文件: `File(pdf.BinaryData, "application/pdf")` 。 但是,在瀏覽器中查看 PDF 文件後再下載會導致 PDF 文件損壞。 ```csharp using IronPdf.Extensions.Mvc.Core; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; using ViewToPdfMVCCoreSample.Models; namespace ViewToPdfMVCCoreSample.Controllers { public class HomeController : Controller { private readonly ILogger_logger; private readonly IRazorViewRenderer _viewRenderService; private readonly IHttpContextAccessor _httpContextAccessor; public HomeController(ILoggerlogger, IRazorViewRenderer viewRenderService, IHttpContextAccessor httpContextAccessor) { _logger = logger; _viewRenderService = viewRenderService; _httpContextAccessor = httpContextAccessor; } public IActionResult Index() { return View(); } public async TaskPersons() { // Example list of persons var persons = new List{ 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" } }; // Check if the request method is POST if (_httpContextAccessor.HttpContext.Request.Method == HttpMethod.Post.Method) { // Create a new PDF renderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Configure rendering options for better output renderer.RenderingOptions.MarginTop = 40; renderer.RenderingOptions.MarginBottom = 40; renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait; renderer.RenderingOptions.Title = "Persons Report"; // Render View to PDF document PdfDocument pdf = renderer.RenderRazorViewToPdf(_viewRenderService, "Views/Home/Persons.cshtml", persons); Response.Headers.Add("Content-Disposition", "inline"); // Output PDF document return File(pdf.BinaryData, "application/pdf", "viewToPdfMVCCore.pdf"); } return View(persons); } public IActionResult Privacy() { return View(); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } } ``` 在使用 `RenderRazorViewToPdf` 方法之後,您會收到一個 `PdfDocument` 物件,該物件可進一步加強和修改。 您可以將 PDF 轉換為 PDF/A 或 PDF/UA 格式,在生成的 PDF 上加入您的數位簽章,或根據需要合併和分割 PDF 文件。 此外,該庫還允許您旋轉頁面、插入註釋或書籤,以及在 PDF 文件上添加獨特的浮水印。

什麼是 IRazorViewRenderer 服務? `IRazorViewRenderer` 是由 `IronPdf.Extensions.Mvc.Core` 套件提供的服務介面,用來處理將 Razor 視圖轉換為 HTML。 它與 ASP.NET Core 的視圖引擎整合,可處理 .cshtml 檔案及其相關模型,執行所有 Razor 語法並產生 IronPDF 轉換為 PDF 的最終 HTML。

為什麼要在渲染前檢查 POST 方法? 檢查 POST 可確保 PDF 只會在透過表單提交明確要求時產生。 這可以防止在頁面載入時意外產生 PDF,並允許同一動作同時提供 HTML 檢視 (在 GET 上) 和 PDF 下載 (在 POST 上)。 此模式遵循 RESTful 原則,並提供更好的使用者體驗。

如何自訂 PDF 輸出? IronPDF 透過 `RenderingOptions` 屬性提供廣泛的客製化選項。 以下是一個進階設定的範例: ```csharp // Advanced rendering configuration example var renderer = new ChromePdfRenderer(); // Page setup renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; renderer.RenderingOptions.MarginLeft = 20; renderer.RenderingOptions.MarginRight = 20; // Headers and footers with merge fields renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { Height = 25, HtmlFragment = "
Page {page} of {total-pages}
" }; // JavaScript execution delay for dynamic content renderer.RenderingOptions.WaitFor = new WaitFor() { RenderDelay = 500, // Wait 500ms for JS execution NetworkIdle = NetworkIdleTypes.NetworkIdle0 // Wait for network requests }; // Apply watermark renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { DrawDividerLine = true, CenterText = "CONFIDENTIAL", Font = new FontTypes() { FontSize = 16 } }; ```

哪些是常見的控制器錯誤? 常見的錯誤包括服務未正確注入時的 null reference 異常、指定檢視位置時的路徑問題,以及模型綁定問題。 確保所有必要的服務都註冊在 `Program.cs` 中,並在指定檢視位置時使用專案根目錄的相對路徑。 為了排除故障,請在開發模式下啟用詳細的錯誤訊息。

如何新增檢視? - 在新新增的 `Person` 動作上按一下滑鼠右鍵,然後選擇"新增檢視"。 ![右鍵按一下 Persons() 方法時,Visual Studio 的上下文功能表顯示"新增檢視..."選項高亮顯示](/static-assets/pdf/how-to/cshtml-to-pdf-mvc-core/right-click-on-Persons.webp)。 - 為新建的 Scaffolded 專案選擇"Razor View"。 ![在 Visual Studio 中新增 Razor View 對話框,顯示 List 模板和 Person 模型類別選擇與佈局選項](/static-assets/pdf/how-to/cshtml-to-pdf-mvc-core/select-scaffold.webp)。 - 選擇"List"範本和 `Person` 模型類別。 ![在 Visual Studio 中新增 Razor View 對話框,顯示 List 模板和 Person 模型類別選擇與佈局選項](/static-assets/pdf/how-to/cshtml-to-pdf-mvc-core/add-view.webp)。 這會建立一個名為 `Persons` 的 .cshtml 檔案。 - 導覽至"Views"資料夾 -> "Home"資料夾 -> `Persons.cshtml` 檔案。 若要新增呼叫 `Persons` 動作的按鈕,請使用下列程式碼: ```html @using (Html.BeginForm("Persons", "Home", FormMethod.Post)) { } ```

為何使用 FormMethod.Post 來產生 PDF? 使用 `POST` 來產生 PDF,可明確表達動作,並防止因瀏覽器刷新或書籤 URL 而產生不想要的 PDF,因此符合網頁最佳實務。 `GET`請求應該是idempotent(不會改變伺服器狀態),而`POST`請求則表示會產生結果的動作 - 在本例中,就是產生 PDF 文件。

如何設定 PDF 列印按鈕的樣式? 使用 CSS 類別設定列印按鈕的樣式,並使用 JavaScript 加以強化,以獲得更好的使用者體驗。 以下是增強版: ```html @using (Html.BeginForm("Persons", "Home", FormMethod.Post, new { @class = "pdf-form" })) { }```

哪些檢視範本最適合 PDF? `List` 和 `Details` 模版提供了結構化的佈局,因此特別適合 PDF 生成。 專為 PDF 輸出而設計的自訂範本通常能產生最佳效果。 考慮建立專屬的 PDF 檢視,針對印刷排版而非螢幕顯示進行最佳化,移除導覽元素並專注於內容呈現。

我該如何在頂部導覽列中加入一個區段? - 在相同的"Views"資料夾中,導覽至"Shared"資料夾 -> `_Layout.cshtml` 。 將 `Person` 導覽項放在 `Home` 之後。 確保 `asp-action` 屬性的值與我們的檔案名稱完全符合,在此例中,檔案名稱為 `Persons`。 ```html
```

為什麼 asp-action 需要完全匹配? `asp-action` 屬性會使用 ASP.NET Core 的標籤輔助程式,根據您的路由設定產生正確的 URL。 精確的匹配可確保連結能解析到正確的控制器動作。 不匹配會導致 404 錯誤或路由到非預期的動作。 標籤輔助系統是區分大小寫的,並且必須與您控制器中的方法名稱完全相同。

如果導覽連結不匹配會怎樣? 當導覽連結與控制器動作不一致時,使用者會遇到 404 錯誤或被導引至錯誤的頁面。 在開發過程中,ASP.NET Core 的開發人員異常頁面會顯示詳細的路由錯誤。 在生產中,使用者會看到一般的錯誤網頁。 務必確認導覽連結與控制器動作名稱完全相符,以防止使用者體驗受損。

如何編輯 Program.cs 檔案? 註冊 `IHttpContextAccessor` 和 `IRazorViewRenderer` 介面至依賴注入 (DI) 容器。 請查看以下程式碼以供參考。 ```csharp using IronPdf.Extensions.Mvc.Core; using Microsoft.AspNetCore.Mvc.ViewFeatures; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); // Register IRazorViewRenderer here builder.Services.AddSingleton(); // Optional: Configure IronPDF license if you have one IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"; var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run(); ```

為何要將服務註冊為單元? 單件式服務只需建立一次,並在應用程式的整個生命週期中重複使用,因此對於像 `IRazorViewRenderer` 之類的無狀態服務而言,單件式服務非常有效率。 由於檢視呈現服務不需維護特定於請求的狀態,因此此模式可減少記憶體開銷並提昇效能。 `IHttpContextAccessor` 必須是單一的,以便在不同的服務生命週期中都能存取。

ITempDataProvider 用來做什麼? `ITempDataProvider`可在請求間暫存資料,常用於重定向後顯示訊息。 在 PDF 產生的情況下,可確保將檢視渲染為 PDF 時,檢視狀態能被適當地維護。 `CookieTempDataProvider` 將這些臨時資料儲存於加密的 cookies 中,提供安全的狀態管理機制。

我可以使用範圍服務來取代嗎? 雖然您可以在某些情況下使用範圍服務,但 `IRazorViewRenderer` 作為單例最為有效,因為它不會持有特定於請求的狀態。 使用範圍服務會為每個請求建立新的實體,增加記憶體使用量卻沒有好處。 不過,如果您需要在檢視中注入範圍服務,請確保正確的服務生命週期管理,以避免執行時出錯。 #### 運行專案 這顯示如何執行專案並產生 PDF 文件。 當您執行應用程式時,請使用頂部導覽功能表導覽到 `Persons` 頁面,然後按一下 `Print Person` 按鈕以產生並下載 PDF。 Visual Studio showing HomeController.cs with ASP.NET Core MVC controller code and IntelliSense assistance

在哪裡可以下載 ASP.NET Core MVC 專案? 下載本指南的完整程式碼。它以壓縮檔的形式提供,您可以在 Visual Studio 中以 ASP.NET Core Web App (Model-View-Controller) 專案的形式開啟。 [下載 ASP.NET Core MVC 範例項目](/static-assets/pdf/how-to/cshtml-to-pdf-mvc-core/ViewToPdfMVCCoreSample.zip)

範例專案包含哪些內容? 範例專案包含一個完整配置的 ASP.NET Core MVC 應用程式,並與 IronPDF 整合,示範視圖到 PDF 的轉換。 它包含 `Person` 模型、具有 PDF 生成邏輯的 `HomeController` 、具有正確 Razor 語法的 `Persons` 檢視,以及 `Program.cs` 中所有必要的服務註冊。 本專案也包含針對 PDF 輸出最佳化的樣式與版面配置範例。

我應該使用哪個 Visual Studio 版本? 建議使用 Visual Studio 2022 (17.0 或更新版本),以獲得 .NET 6+ 專案的最佳體驗。 具有 C# 擴充功能的 Visual Studio Code 也能很好地進行跨平台開發。 確保您已安裝 ASP.NET 和網頁開發工作量。 本專案預設以 .NET 6.0 為目標,但可更新至更新的版本。

如何排除專案設定問題? 常見的設定問題包括 NuGet 套件遺失、.NET SDK 版本不正確或組態問題。 首先,使用 `dotnet restore` 或透過 Visual Studio 的套件管理員還原 NuGet 套件。 使用 `dotnet --version` 驗證您的 .NET SDK 版本是否符合專案需求。 有關授權問題,請參閱授權金鑰文件。 如果出現渲染問題,請查看疑難排解指南以瞭解解決方案。 準備好看看您還能做些什麼嗎? 請造訪我們的教學頁面:[轉換 PDF 文件](https://ironpdf.com/tutorials/convert-pdf/)

常見問題解答

在 ASP.NET Core MVC 中將 CSHTML 視圖轉換為 PDF 的最簡單方法是什麼?

最簡單的方法是使用 IronPDF 的 RenderRazorViewToPdf 方法,只需一行代碼即可將您的 .cshtml 檔案轉換為 PDF 文件。只需呼叫:new IronPdf.ChromePdfRenderer().RenderRazorViewToPdf(HttpContext, "Views/Home/Report.cshtml",model).SaveAs("report.pdf");

要在 ASP.NET Core MVC 中將 View 轉換為 PDF,我需要哪些 NuGet 套件?

您需要兩個套件:IronPDF(主套件)和 IronPdf.Extensions.Mvc.Core(擴展套件)。擴充套件提供與 ASP.NET Core 的相依性注入系統和 Razor 視圖渲染管道整合的特定功能。

將 CSHTML 轉換為 PDF 時,可以套用 CSS 定義與 JavaScript 嗎?

是的,IronPDF 在將「視圖」渲染為 PDF 時,完全支援 CSS 定義、JavaScript 執行和自訂字型。這可確保您的 PDF 能維持與網頁檢視相同的外觀和功能,包括回應式 CSS 和動態 JavaScript 內容。

在我的 ASP.NET Core MVC 專案中實作 View 到 PDF 轉換的主要步驟是什麼?

工作流程包括 5 個步驟:1) 下載 IronPDF 及其 MVC Core 延伸;2) 為您的資料新增一個模型類別;3) 編輯您的 Controller 以使用 RenderRazorViewToPdf 方法;4) 建立或修改 View (.cshtml 檔案) 以進行 PDF 渲染;以及 5) 執行您的應用程式以產生 PDF。

MVC 模式如何從 View 生成 PDF?

在 ASP.NET Core MVC 中,Model 包含您的資料和業務邏輯,View(您的 .cshtml 檔案)呈現 UI 並顯示資料,而 Controller 則處理請求,並使用 IronPDF 的 RenderRazorViewToPdf 方法來協調從 View 生成 PDF。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

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

經審核
傑夫·弗里茨
傑弗裡·T·弗里茨
.NET 社群團隊首席專案經理
Jeff 同時也是 .NET 和 Visual Studio 團隊的首席專案經理。他是 .NET Conf 虛擬會議系列的執行製片人,並主持每週兩次的開發者直播節目“Fritz and Friends”,在節目中他會與觀眾一起探討技術並編寫程式碼。 Jeff 也為包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit 在內的微軟大型開發者活動撰寫研討會、簡報並策劃內容。
準備好開始了嗎?
Nuget 下載 17,012,929 | 版本: 2025.12 剛剛發布