IronPDF 操作指南 CSHTML 轉換為 PDF (MVC Core) 如何在 C# ASP.NET Core MVC 中將視圖轉換為 PDF Curtis Chau 更新:2026年1月10日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 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將ASP.NET Core MVC 視圖轉換為 PDF。 只需一行程式碼,即可將您的".cshtml"檔案渲染成PDF文件。 將此功能直接整合到您的 MVC 應用程式中,即可從動態 HTML 視圖無縫產生 PDF。 請按照本指南設定您的環境並開始轉換。 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPdf PM > Install-Package IronPdf 複製並運行這段程式碼。 // using IronPdf.Extensions.Mvc.Core new IronPdf.ChromePdfRenderer().RenderRazorViewToPdf(HttpContext, "Views/Home/Report.cshtml", model).SaveAs("report.pdf"); 部署到您的生產環境進行測試 今天就在您的專案中開始使用免費試用IronPDF Free 30 Day Trial ASP.NET Core Web App MVC(模型-視圖-控制器)是微軟提供的 Web 應用程式框架,用於使用ASP.NET Core建立 Web 應用程式。 -模型:表示資料和業務邏輯,管理資料交互,與資料來源通訊。 -視圖:呈現使用者介面,顯示數據,向使用者呈現資訊。 -控制器:處理使用者輸入,回應請求,與模型通信,協調模型-視圖互動。 IronPDF允許從ASP.NET Core MVC 專案中的視圖直接建立 PDF 檔案。 這使得在ASP.NET Core MVC 中產生 PDF 變得簡單,支援包括CSS 樣式、 JavaScript執行和自訂字體在內的現代功能。 最簡工作流程(5個步驟) 下載用於在ASP.NET Core MVC 中將視圖轉換為 PDF 的 C# 程式庫 新增一個用於資料的模型類 編輯"HomeController.cs"檔案並使用`RenderRazorViewToPdf`方法 建立一個新的視圖,並編輯".cshtml"檔案以渲染PDF。 下載範例項目,快速入門 我需要哪個軟體包才能使用IronPDF擴充功能? IronPdf.Extensions.Mvc.Core 套件是主 IronPdf 套件的擴充。 在ASP.NET Core MVC 中,要將視圖渲染為 PDF 文檔,需要 IronPdf.Extensions.Mvc.Core 和 IronPdf 套件。 此擴充包提供了與ASP.NET Core 的依賴注入系統和Razor視圖渲染管線整合的特定功能。 Install-PackageIronPDF包 為什麼我需要IronPDF和擴充包? IronPDF主程式包包含核心 PDF 渲染引擎和基本功能,而 Extensions.Mvc.Core 程式包提供與ASP.NET Core MVC 視圖渲染系統的專門整合。 這種分離方式可以實現更好的模組化,並確保您只包含專案類型所需的特定功能。 此擴充包包含將Razor視圖轉換為 HTML 後再產生 PDF 所需的 IRazorViewRenderer 介面和實作。 我應該使用哪個NuGet套件版本? 為確保相容性,請務必使用符合版本的IronPDF和 IronPdf.Extensions.Mvc.Core。 有關最新穩定版本和版本相容性信息,請查看NuGet包文件。 更新時,請確保兩個軟體包同時更新,以保持其正常運作。 常見的安裝問題有哪些? 常見的安裝問題包括核心包和擴充包之間的版本不匹配、缺少依賴項或平台特定的要求。 如果您遇到問題,請確保您的專案面向受支援的.NET版本,並查看安裝概述以取得故障排除步驟。 使用NuGet安裝 Install-PackageIronPDF包 nuget.org/packages/IronPdf.Extensions.Mvc.Core/ 如何將視圖渲染成 PDF? 您需要一個ASP.NET Core Web 應用程式(模型-視圖-控制器)專案才能將視圖轉換為 PDF 檔案。 這個過程涉及建立一個控制器操作,該操作使用 IronPDF 的 RenderRazorViewToPdf 方法將Razor視圖轉換為 PDF 文件。 這種方法充分利用了Razor語法的強大功能,使您可以建立具有動態內容的複雜、資料驅動的 PDF。 我應該使用哪種項目類型? 使用ASP.NET Core Web App(模型-視圖-控制器)範本可獲得與 IronPDF 視圖渲染功能的最佳相容性。 此專案類型提供視圖渲染所需的基礎設施,包括Razor視圖引擎和正確的路由。 對於現有項目,請確保它們遵循 MVC 模式,並已安裝所需的視圖渲染功能。 我可以使用最小API來實現這個功能嗎? 雖然 Minimal API 沒有內建視圖支持,但您仍然可以使用 IronPDF 的 HTML 轉換 PDF 轉換功能。 對於基於視圖的 PDF 生成,可以使用傳統的 MVC 方法,或考慮使用Razor Pages 作為替代方案。 如何新增模型類別? 進入"模型"資料夾。 建立一個名為"Person"的新C#類別檔案。此類將作為表示個人資料的模型。 請使用以下程式碼片段: :path=/static-assets/pdf/content-code-examples/how-to/cshtml-to-pdf-mvc-core-model.cs namespace ViewToPdfMVCCoreSample.Models { public class Person { public int Id { get; set; } public string Name { get; set; } public string Title { get; set; } public string Description { get; set; } } } $vbLabelText $csharpLabel 為什麼我需要PDF生成模型? 模型提供結構化數據,可以將其傳遞給視圖進行渲染。 這種關注點分離確保了您的 PDF 生成邏輯保持清晰且易於維護。 該模型充當控制器和視圖之間的契約,確保類型安全並啟用Razor視圖中的 IntelliSense 支援。 哪些資料類型最適合用於視圖? 簡單的資料類型和集合最適合產生 PDF 檔案。 可以使用複雜的嵌套對象,但可能需要額外的視圖邏輯。 為了獲得最佳效能,請在將複雜資料結構傳遞給視圖之前,請在控制器中將其扁平化。 當您的領域模型過於複雜時,請考慮使用專為 PDF 輸出設計的 ViewModel。 以下是一個適用於生成 PDF 的更複雜的模型結構範例: public class InvoiceViewModel { public string InvoiceNumber { get; set; } public DateTime InvoiceDate { get; set; } public decimal TotalAmount { get; set; } public List<InvoiceLineItem> LineItems { 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; } } public class InvoiceViewModel { public string InvoiceNumber { get; set; } public DateTime InvoiceDate { get; set; } public decimal TotalAmount { get; set; } public List<InvoiceLineItem> LineItems { 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; } } $vbLabelText $csharpLabel 如何編輯控制器? 導航至"Controllers"資料夾並開啟"HomeController"檔案。我們將僅對Persons操作。 請參考以下程式碼: 下面的程式碼首先實例化 ChromePdfRenderer 類,將 IRazorViewRenderer、我們的 Views/Home/Persons.cshtml 的路徑以及包含所需資料的清單傳遞給 RenderRazorViewToPdf 方法。 使用者可以使用 RenderingOptions 存取一系列功能,例如新增自訂文字、在產生的 PDF 中新增 HTML 頁首和頁尾、定義自訂邊距以及套用頁碼。 有關更進階的渲染選項,請參閱渲染選項文件。 請注意可使用下列程式碼在瀏覽器中檢視 PDF 文件:File(pdf.BinaryData, "application/pdf")。 但是,在瀏覽器中查看後再下載 PDF 檔案會導致 PDF 文件損壞。 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<HomeController> _logger; private readonly IRazorViewRenderer _viewRenderService; private readonly IHttpContextAccessor _httpContextAccessor; public HomeController(ILogger<HomeController> logger, IRazorViewRenderer viewRenderService, IHttpContextAccessor httpContextAccessor) { _logger = logger; _viewRenderService = viewRenderService; _httpContextAccessor = httpContextAccessor; } public IActionResult Index() { return View(); } public async Task<IActionResult> Persons() { // Example list of persons var 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" } }; // 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 }); } } } 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<HomeController> _logger; private readonly IRazorViewRenderer _viewRenderService; private readonly IHttpContextAccessor _httpContextAccessor; public HomeController(ILogger<HomeController> logger, IRazorViewRenderer viewRenderService, IHttpContextAccessor httpContextAccessor) { _logger = logger; _viewRenderService = viewRenderService; _httpContextAccessor = httpContextAccessor; } public IActionResult Index() { return View(); } public async Task<IActionResult> Persons() { // Example list of persons var 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" } }; // 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 }); } } } $vbLabelText $csharpLabel 使用 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 屬性提供廣泛的自訂選項。 以下是一個使用更高級設定的範例: // 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 = "<div style='text-align: center; font-size: 12px;'>Page {page} of {total-pages}</div>" }; // 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 } }; // 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 = "<div style='text-align: center; font-size: 12px;'>Page {page} of {total-pages}</div>" }; // 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 } }; $vbLabelText $csharpLabel 常見的控制器錯誤有哪些? 常見錯誤包括服務未正確注入時出現的空引用異常、指定視圖位置時出現的路徑問題、模型綁定問題。 確保所有必需的服務都已在 Program.cs 中註冊,並在指定視圖位置時使用相對於專案根目錄的相對路徑。 為了進行故障排除,請在開發模式下啟用詳細錯誤訊息。 如何新增視圖? 右鍵點選新新增的 Person 操作,然後選擇"新增檢視"。 為新建的 Scaffolded 專案選擇"Razor View"。 選擇"清單"範本和 Person 模型類別。 這將會建立一個名為 Persons 的 .cshtml 檔案。 導覽至"Views"資料夾 -> "Home"資料夾 -> Persons.cshtml 檔案。 若要新增一個按鈕來呼叫 Persons 操作,請使用下列程式碼: @using (Html.BeginForm("Persons", "Home", FormMethod.Post)) { <input type="submit" value="Print Person" /> } @using (Html.BeginForm("Persons", "Home", FormMethod.Post)) { <input type="submit" value="Print Person" /> } HTML 為什麼要使用 FormMethod.Post 產生 PDF 檔案? 使用 POST 產生 PDF 遵循 Web 最佳實踐,明確操作,防止因瀏覽器刷新或書籤 URL 而產生不必要的 PDF。 GET 請求應該是冪等的(不改變伺服器狀態),而 POST 請求表示產生結果的操作-在本例中,是產生 PDF 文件。 如何設定PDF列印按鈕的樣式? 使用 CSS 類別設定列印按鈕樣式,並使用JavaScript增強其功能,以獲得更好的使用者體驗。 以下是增強版: @using (Html.BeginForm("Persons", "Home", FormMethod.Post, new { @class = "pdf-form" })) { <button type="submit" class="btn btn-primary pdf-download-btn"> <i class="fas fa-file-pdf"></i> Download as PDF </button> } <style> .pdf-download-btn { background-color: #dc3545; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; transition: background-color 0.3s ease; } .pdf-download-btn:hover { background-color: #c82333; } .pdf-download-btn:active { transform: translateY(1px); } </style> <script> // Optional: Show loading indicator during PDF generation document.querySelector('.pdf-form').addEventListener('submit', function() { const button = this.querySelector('button'); button.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Generating PDF...'; button.disabled = true; }); </script> @using (Html.BeginForm("Persons", "Home", FormMethod.Post, new { @class = "pdf-form" })) { <button type="submit" class="btn btn-primary pdf-download-btn"> <i class="fas fa-file-pdf"></i> Download as PDF </button> } <style> .pdf-download-btn { background-color: #dc3545; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; transition: background-color 0.3s ease; } .pdf-download-btn:hover { background-color: #c82333; } .pdf-download-btn:active { transform: translateY(1px); } </style> <script> // Optional: Show loading indicator during PDF generation document.querySelector('.pdf-form').addEventListener('submit', function() { const button = this.querySelector('button'); button.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Generating PDF...'; button.disabled = true; }); </script> HTML 哪些視圖模板最適合 PDF 檔案? List 和 Details 範本特別適合產生 PDF,因為它們提供了結構化的佈局。 專為PDF輸出設計的自訂模板通常能獲得最佳效果。 考慮建立專門針對列印佈局而非螢幕顯示的 PDF 視圖,移除導航元素,專注於內容呈現。 如何在頂部導覽列新增版塊? 在同一個"Views"資料夾中,導覽至"Shared"資料夾 -> _Layout.cshtml。 將 Person 導航項目放在 Home 之後。 確保 asp-action 屬性的值與我們的檔案名稱完全匹配,在本例中為 Persons。 <header> <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3"> <div class="container-fluid"> <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">ViewToPdfMVCCoreSample</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-controller="Home" asp-action="Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Persons">Person</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="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-fluid"> <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">ViewToPdfMVCCoreSample</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-controller="Home" asp-action="Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Persons">Person</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> </li> </ul> </div> </div> </nav> </header> HTML 為什麼asp-action需要完全匹配? asp-action 屬性使用ASP.NET Core 的標記助手,根據您的路由配置產生正確的 URL。 完全匹配可確保連結解析到正確的控制器操作。 不匹配會導致 404 錯誤或路由到非預期操作。 標籤助手系統區分大小寫,必須與控制器中的方法名稱完全相符。 如果導航連結不符會發生什麼? 當導航連結與控制器操作不符時,使用者會遇到 404 錯誤或被路由到錯誤的頁面。 在開發過程中, ASP.NET Core 的開發者異常頁面會顯示詳細的路由錯誤。 在生產環境中,使用者會看到通用錯誤頁面。 務必確保導航連結與控制器操作名稱完全匹配,以防止使用者體驗問題。 如何編輯 Program.cs 檔案? 將 IHttpContextAccessor 和 IRazorViewRenderer 介面註冊到依賴注入 (DI) 容器。 請參考以下程式碼。 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<IHttpContextAccessor, HttpContextAccessor>(); builder.Services.AddSingleton<ITempDataProvider, CookieTempDataProvider>(); // Register IRazorViewRenderer here builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>(); // 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(); 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<IHttpContextAccessor, HttpContextAccessor>(); builder.Services.AddSingleton<ITempDataProvider, CookieTempDataProvider>(); // Register IRazorViewRenderer here builder.Services.AddSingleton<IRazorViewRenderer, RazorViewRenderer>(); // 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(); $vbLabelText $csharpLabel 為什麼要將服務註冊為單例? 單例服務會建立一次,並在應用程式的整個生命週期中重複使用,因此對於像 IRazorViewRenderer 這樣的無狀態服務來說非常有效率。 這種模式減少了記憶體開銷並提高了效能,因為視圖渲染服務不維護特定於請求的狀態。 IHttpContextAccessor 必須是單例才能在不同的服務生命週期中存取。 ITempDataProvider 的用途是什麼? ITempDataProvider 允許在請求之間暫時儲存數據,通常用於在重定向後顯示訊息。 在 PDF 生成過程中,它確保在將視圖渲染為 PDF 時正確維護視圖狀態。 CookieTempDataProvider 將此暫存資料儲存於加密 cookie 中,為狀態管理提供安全機制。 我可以使用作用域服務嗎? 雖然在某些情況下可以使用作用域服務,但 IRazorViewRenderer 作為單例效果最好,因為它不持有特定於請求的狀態。 使用作用域服務會為每個請求建立新實例,增加記憶體使用量而沒有帶來任何好處。 但是,如果需要將作用域服務注入到視圖中,請確保正確管理服務生命週期,以避免執行階段錯誤。 運行專案 本範例展示如何運行專案並產生 PDF 文件。 執行應用程式時,使用頂部導覽功能表導覽至 Persons 頁面,然後按一下 Print Person 按鈕產生並下載 PDF。 哪裡可以下載ASP.NET Core MVC 專案? 下載本指南的完整程式碼。它以壓縮檔案的形式提供,您可以在 Visual Studio 中將其作為ASP.NET Core Web 應用程式(模型-視圖-控制器)專案開啟。 下載ASP.NET Core MVC 範例項目 範例項目包含哪些內容? 此範例專案包含一個完全配置的ASP.NET Core MVC 應用程序,整合了IronPDF ,示範了視圖到 PDF 的轉換。 它包含 Person 模型、HomeController 以及 PDF 生成邏輯、Persons 以及具有正確Razor語法的視圖,以及 Program.cs 中的所有必要服務註冊。 該專案還包括針對 PDF 輸出最佳化的範例樣式和佈局配置。 我該使用哪個版本的 Visual Studio? 為獲得最佳的.NET 6+ 專案體驗,建議使用 Visual Studio 2022(版本 17.0 或更高版本)。 Visual Studio Code 搭配 C# 擴充功能也適用於跨平台開發。 請確保您已安裝ASP.NET和 Web 開發工作負載。 此專案預設為.NET 6.0,但可以更新到更新的版本。 如何排查項目設定問題? 常見的安裝問題包括缺少NuGet套件、 .NET SDK 版本不正確或設定問題。 首先,使用 dotnet restore 或透過 Visual Studio 的套件管理器還原NuGet套件。 使用 dotnet --version 驗證您的.NET SDK 版本是否符合專案要求。 有關許可問題,請參閱許可密鑰文件。 如果出現渲染問題,請查看故障排除指南以取得解決方案。 準備好要看看你還能做什麼了嗎? 請造訪我們的教學頁面:轉換 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 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 審核人 Jeffrey T. Fritz 首席程序经理 - .NET 社群团队 Jeff 也是 .NET 和 Visual Studio 团队的首席程序经理。他是 .NET Conf 虚拟会议系列的执行制作人,并主持“Fritz 和朋友”这一每周两次的開發者的直播节目,在节目上讨论技術并与观众一起编写代碼。Jeff 撰写研讨会、主持演讲,并计划大型 Microsoft 開發者活動(包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit)的內容。 準備好開始了嗎? Nuget 下載 17,803,474 | 版本: 2026.3 剛剛發布 開始免費試用 免費 NuGet 下載 總下載量:17,803,474 查看許可證 還在滾動嗎? 想快速取得證據? PM > Install-Package IronPdf 運行範例看著你的HTML程式碼變成PDF檔。 免費 NuGet 下載 總下載量:17,803,474 查看許可證