USING IRONPDF How to Convert HTML to PDF in ASP.NET Core Curtis Chau 更新:2025年11月10日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 IronPDF 使用基於 Chrome 的渲染引擎,在 ASP.NET Core 中實現 HTML 到 PDF 的無縫轉換,並保留格式、CSS 和 JavaScript——這對於在現代 Web 應用程式中產生發票、報告和可下載文件至關重要。 在現代 ASP.NET 應用程式中,將動態 HTML 轉換為 PDF 文件是一項基本要求。 無論您是產生發票、建立報告還是產生可下載文件,將 HTML 內容轉換為專業的 PDF 對於提供完善的使用者體驗至關重要。 IronPDF 透過提供強大的基於 Chrome 的渲染引擎簡化了轉換過程,該引擎可在生成的文件中完美地保留 HTML 格式、CSS 樣式和 JavaScript 功能。 本教學將引導您了解使用IronPDF 庫在 ASP.NET Core 應用程式中將 HTML 轉換為 PDF 的有效方法。 為什麼開發人員需要將 HTML 轉換為 PDF? ASP.NET Core 應用程式經常產生動態 HTML 內容,使用者需要下載、分享或將其存檔為 PDF。 將 HTML 轉換為 PDF 相比簡單地保存網頁或截圖具有幾個關鍵優勢。 PDF 檔案在所有裝置和平台上都能保持一致的格式,確保您的發票無論是在 Windows、Mac 還是行動裝置上查看,看起來都完全相同。 它們非常適合需要數位簽名、安全設定或專業列印的文件。 伺服器端轉換消除了使用者安裝特定軟體的需求,並提供了對最終輸出的更好控制。 常見用例包括從儀表板資料產生財務報告、從訂單資訊建立可下載的發票、產生帶有二維碼的門票和通行證,以及將表單提交內容轉換為永久記錄。 透過在伺服器端處理轉換,您可以確保無論使用者的瀏覽器或裝置功能如何,都能獲得一致的結果。 PDF/A 歸檔格式可確保文件的長期保存,而PDF 壓縮可減少檔案大小,從而實現高效的儲存和傳輸。 對於DevOps工程師而言,這種伺服器端方法可以與容器化部署和CI/CD 管道無縫集成,確保在不同的環境中可靠地產生 PDF。 效能最佳化功能可實現生產部署中的高效資源利用。 Azure 部署指南和AWS Lambda 整合提供了特定於平台的最佳化策略。 IronPDF的安裝過程是怎麼樣的? 在 ASP.NET Core 專案中使用 IronPDF 非常簡單。 該程式庫支援 .NET Core 2.0 及更高版本,以及 .NET 5、6、7 和 8,使其與所有現代 ASP.NET Core 應用程式相容。 對於容器化環境,IronPDF 提供官方的 Docker 支援。 安裝概述涵蓋所有部署方案。 最快的安裝方法是什麼? 將 IronPDF 新增至專案中的最快方法是透過 Visual Studio 中的 NuGet 套件管理器。 在解決方案資源管理器中右鍵單擊您的項目,選擇"管理 NuGet 套件",然後搜尋 IronPDF。 點擊最新版本上的"安裝"按鈕,將其新增至您的專案。 有關詳細的安裝說明,請參閱IronPDF 安裝指南。 其他方法包括使用Windows Installer或進階 NuGet 配置。 Install-Package IronPdf 對於容器化部署,請使用IronPdf.Slim 包,它可以減少初始部署大小: dotnet add package IronPdf.Slim dotnet add package IronPdf.Slim SHELL 這種方法有利於對套件大小有嚴格限制的AWS Lambda 部署或Azure Functions 。 本地引擎與遠端引擎的比較有助於選擇最佳部署策略。 我需要哪些命名空間? 安裝完成後,將 IronPDF 命名空間新增至任何需要處理 PDF 產生的 C# 檔案: using IronPdf; using IronPdf; Imports IronPdf $vbLabelText $csharpLabel 此導入語句可讓您存取 IronPDF 的所有功能,包括用於 HTML 轉換的ChromePdfRenderer類別以及用於自訂輸出的各種配置選項。 API 參考文件提供了所有可用類別和方法的全面說明。 我應該設定哪些配置選項? 對於大多數 ASP.NET Core 應用程序,IronPDF 安裝後無需額外配置即可立即使用。 不過,您可以在Program.cs或Startup.cs檔案中設定全域選項: // Optional: Configure IronPDF settings Installation.TempFolderPath = @"C:\Temp\IronPdf\"; Installation.LinuxAndDockerDependenciesAutoConfig = true; // Configure license key for production IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Optional: Configure IronPDF settings Installation.TempFolderPath = @"C:\Temp\IronPdf\"; Installation.LinuxAndDockerDependenciesAutoConfig = true; // Configure license key for production IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; ' Optional: Configure IronPDF settings Installation.TempFolderPath = "C:\Temp\IronPdf\" Installation.LinuxAndDockerDependenciesAutoConfig = True ' Configure license key for production IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY" $vbLabelText $csharpLabel 這些配置選項有助於針對您的特定託管環境最佳化 IronPDF,無論是在Windows 、 Linux或 Docker 容器中執行。 確保腳本檔案和應用程式檔案不位於同一目錄下,以防止衝突。 許可證金鑰指南解釋了正確的許可證配置方法,而故障排除部署問題指南則有助於解決常見問題。 對於生產環境部署,請考慮新增健康檢查端點以監控 PDF 產生服務: // Add health checks for monitoring services.AddHealthChecks() .AddCheck("pdf-service", () => { try { var renderer = new ChromePdfRenderer(); var test = renderer.RenderHtmlAsPdf("<p>Health Check</p>"); return HealthCheckResult.Healthy(); } catch (Exception ex) { return HealthCheckResult.Unhealthy(ex.Message); } }); // Add health checks for monitoring services.AddHealthChecks() .AddCheck("pdf-service", () => { try { var renderer = new ChromePdfRenderer(); var test = renderer.RenderHtmlAsPdf("<p>Health Check</p>"); return HealthCheckResult.Healthy(); } catch (Exception ex) { return HealthCheckResult.Unhealthy(ex.Message); } }); ' Add health checks for monitoring services.AddHealthChecks() _ .AddCheck("pdf-service", Function() Try Dim renderer = New ChromePdfRenderer() Dim test = renderer.RenderHtmlAsPdf("<p>Health Check</p>") Return HealthCheckResult.Healthy() Catch ex As Exception Return HealthCheckResult.Unhealthy(ex.Message) End Try End Function) $vbLabelText $csharpLabel 對於Kubernetes 部署,實施就緒探測和存活探測,以確保服務可用性。 效能優化指南提供了更多優化策略。 如何將HTML字串轉換為PDF? IronPDF 最基本的操作是將HTML 字串直接轉換為 PDF 文件。 當您在 ASP.NET 應用程式中動態建立 HTML 內容或使用範本時,這種方法非常有效。 該綜合教程涵蓋了高級場景。 // Create a PDF converter instance var renderer = new ChromePdfRenderer(); // Convert HTML string to PDF document var pdf = renderer.RenderHtmlAsPdf("<h1>Sales Report</h1><p>Generated on: " + DateTime.Now + "</p>"); // Save the resultant PDF document to a file pdf.SaveAs("report.pdf"); // Create a PDF converter instance var renderer = new ChromePdfRenderer(); // Convert HTML string to PDF document var pdf = renderer.RenderHtmlAsPdf("<h1>Sales Report</h1><p>Generated on: " + DateTime.Now + "</p>"); // Save the resultant PDF document to a file pdf.SaveAs("report.pdf"); ' Create a PDF converter instance Dim renderer = New ChromePdfRenderer() ' Convert HTML string to PDF document Dim pdf = renderer.RenderHtmlAsPdf("<h1>Sales Report</h1><p>Generated on: " & DateTime.Now & "</p>") ' Save the resultant PDF document to a file pdf.SaveAs("report.pdf") $vbLabelText $csharpLabel 這段程式碼創造了一個新的ChromePdfRenderer實例,它使用 Chromium 引擎來渲染你的 HTML 內容。 RenderHtmlAsPdf方法接受任何有效的 HTML 字串,並傳回一個PdfDocument物件。 然後您可以將此文件儲存到磁碟,或將其作為位元組數組直接串流傳輸給使用者。 了解更多關於ChromePdfRenderer 類別及其功能的資訊。 建立 PDF 指南提供了其他建立方法。 對於高併發的生產環境,應實施適當的資源管理: // Implement using statement for proper disposal using (var renderer = new ChromePdfRenderer()) { // Configure for optimal performance renderer.RenderingOptions.CreatePdfFormsFromHtml = false; renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print; renderer.RenderingOptions.PrintHtmlBackgrounds = true; var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Use memory stream for better resource management using (var ms = new MemoryStream()) { pdf.SaveAs(ms); return ms.ToArray(); } } // Implement using statement for proper disposal using (var renderer = new ChromePdfRenderer()) { // Configure for optimal performance renderer.RenderingOptions.CreatePdfFormsFromHtml = false; renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print; renderer.RenderingOptions.PrintHtmlBackgrounds = true; var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Use memory stream for better resource management using (var ms = new MemoryStream()) { pdf.SaveAs(ms); return ms.ToArray(); } } Imports IronPdf Imports System.IO ' Implement Using block for proper disposal Using renderer As New ChromePdfRenderer() ' Configure for optimal performance renderer.RenderingOptions.CreatePdfFormsFromHtml = False renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print renderer.RenderingOptions.PrintHtmlBackgrounds = True Dim pdf = renderer.RenderHtmlAsPdf(htmlContent) ' Use memory stream for better resource management Using ms As New MemoryStream() pdf.SaveAs(ms) Return ms.ToArray() End Using End Using $vbLabelText $csharpLabel 記憶體流程指南解釋如何有效率地在記憶體中處理 PDF 檔案。 對於非同步操作,請使用非同步渲染方法來提高吞吐量。 如何處理 CSS 和圖片? IronPDF 完全支援CSS 樣式,並且可以嵌入來自各種來源的圖像。 轉換器能夠完全忠實地處理所有元素,包括各種標籤和圖像 URL 。 SVG圖形支援確保向量圖像完美渲染。 var html = @" <style> body { font-family: Arial, sans-serif; margin: 40px; } h1 { color: #2c3e50; border-bottom: 2px solid #3498db; } .highlight { background-color: #f1c40f; padding: 5px; } </style> <h1>Monthly Report</h1> <p>This HTML document includes <span class='highlight'>highlighted text</span> and styling.</p> <img src='data:image/png;base64,iVBORw0KGgoAAAANS...' alt='Logo' />"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); var html = @" <style> body { font-family: Arial, sans-serif; margin: 40px; } h1 { color: #2c3e50; border-bottom: 2px solid #3498db; } .highlight { background-color: #f1c40f; padding: 5px; } </style> <h1>Monthly Report</h1> <p>This HTML document includes <span class='highlight'>highlighted text</span> and styling.</p> <img src='data:image/png;base64,iVBORw0KGgoAAAANS...' alt='Logo' />"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); Dim html As String = " <style> body { font-family: Arial, sans-serif; margin: 40px; } h1 { color: #2c3e50; border-bottom: 2px solid #3498db; } .highlight { background-color: #f1c40f; padding: 5px; } </style> <h1>Monthly Report</h1> <p>This HTML document includes <span class='highlight'>highlighted text</span> and styling.</p> <img src='data:image/png;base64,iVBORw0KGgoAAAANS...' alt='Logo' />" Dim renderer As New ChromePdfRenderer() Dim pdf = renderer.RenderHtmlAsPdf(html) $vbLabelText $csharpLabel 渲染器可以處理內聯樣式、CSS 文件,甚至是base64 編碼的圖像。 這樣可以確保您的頁面保持 HTML 內容的精確外觀,包括現代 CSS3 功能,如flexbox 和網格佈局。 轉換過程中會保留所有標籤和樣式,而不會產生空白頁面。 完全支援網頁字體和圖示字體,包括Google Fonts 。 對於容器化環境,請確保外部資源可存取或已嵌入: // Configure base URL for resource loading renderer.RenderingOptions.BaseUrl = new Uri("___PROTECTED_URL_105___"); // Or embed resources using data URIs for self-contained PDFs var htmlWithEmbeddedResources = @" <style> @font-face { font-family: 'CustomFont'; src: url(data:font/woff2;base64,...) format('woff2'); } </style>"; // Configure base URL for resource loading renderer.RenderingOptions.BaseUrl = new Uri("___PROTECTED_URL_105___"); // Or embed resources using data URIs for self-contained PDFs var htmlWithEmbeddedResources = @" <style> @font-face { font-family: 'CustomFont'; src: url(data:font/woff2;base64,...) format('woff2'); } </style>"; ' Configure base URL for resource loading renderer.RenderingOptions.BaseUrl = New Uri("___PROTECTED_URL_105___") ' Or embed resources using data URIs for self-contained PDFs Dim htmlWithEmbeddedResources As String = " <style> @font-face { font-family: 'CustomFont'; src: url(data:font/woff2;base64,...) format('woff2'); } </style>" $vbLabelText $csharpLabel 基本 URL 指南解釋了正確的資源參考策略。 為了支援國際語言,請確保正確使用 UTF-8 編碼。 如何將 ASP.NET Core 視圖轉換為 PDF? 將整個 ASP.NET Core 視圖轉換為 PDF 是很常見的做法,尤其是根據現有範本產生報表時。 IronPDF 針對這種情況提供了多種方法,無論處理的是單頁還是多頁。 CSHTML 轉 PDF 教學涵蓋了特定框架的實作。 如何轉換 MVC 視圖? 在 ASP.NET Core 控制器中,將視圖渲染為 HTML,然後使用 IronPDF 強大的渲染功能將其轉換為 PDF: [HttpGet] public async Task<IActionResult> DownloadPdf() { var invoiceModel = new InvoiceModel { InvoiceNumber = 12345, Date = DateTime.Now, CustomerName = "Acme Corporation", Items = new List<InvoiceItem> { new InvoiceItem { Description = "Service", Quantity = 1, Price = 100.0 } }, Total = 100.0 }; // Render the view to HTML string var htmlContent = await RenderViewToString("Invoice", invoiceModel); // Convert HTML to PDF var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Return PDF to browser var contentType = "application/pdf"; var fileName = $"invoice_{DateTime.Now:yyyyMMdd}.pdf"; return File(pdf.BinaryData, contentType, fileName); } private async Task<string> RenderViewToString(string viewName, object model) { ViewData.Model = model; using (var writer = new StringWriter()) { var viewResult = viewEngine.FindView(ControllerContext, viewName, false); var viewContext = new ViewContext( ControllerContext, viewResult.View, ViewData, TempData, writer, new HtmlHelperOptions() ); await viewResult.View.RenderAsync(viewContext); return writer.GetStringBuilder().ToString(); } } [HttpGet] public async Task<IActionResult> DownloadPdf() { var invoiceModel = new InvoiceModel { InvoiceNumber = 12345, Date = DateTime.Now, CustomerName = "Acme Corporation", Items = new List<InvoiceItem> { new InvoiceItem { Description = "Service", Quantity = 1, Price = 100.0 } }, Total = 100.0 }; // Render the view to HTML string var htmlContent = await RenderViewToString("Invoice", invoiceModel); // Convert HTML to PDF var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Return PDF to browser var contentType = "application/pdf"; var fileName = $"invoice_{DateTime.Now:yyyyMMdd}.pdf"; return File(pdf.BinaryData, contentType, fileName); } private async Task<string> RenderViewToString(string viewName, object model) { ViewData.Model = model; using (var writer = new StringWriter()) { var viewResult = viewEngine.FindView(ControllerContext, viewName, false); var viewContext = new ViewContext( ControllerContext, viewResult.View, ViewData, TempData, writer, new HtmlHelperOptions() ); await viewResult.View.RenderAsync(viewContext); return writer.GetStringBuilder().ToString(); } } Imports System Imports System.Collections.Generic Imports System.IO Imports System.Threading.Tasks Imports Microsoft.AspNetCore.Mvc <HttpGet> Public Async Function DownloadPdf() As Task(Of IActionResult) Dim invoiceModel = New InvoiceModel With { .InvoiceNumber = 12345, .Date = DateTime.Now, .CustomerName = "Acme Corporation", .Items = New List(Of InvoiceItem) From { New InvoiceItem With {.Description = "Service", .Quantity = 1, .Price = 100.0} }, .Total = 100.0 } ' Render the view to HTML string Dim htmlContent = Await RenderViewToString("Invoice", invoiceModel) ' Convert HTML to PDF Dim renderer = New ChromePdfRenderer() Dim pdf = renderer.RenderHtmlAsPdf(htmlContent) ' Return PDF to browser Dim contentType = "application/pdf" Dim fileName = $"invoice_{DateTime.Now:yyyyMMdd}.pdf" Return File(pdf.BinaryData, contentType, fileName) End Function Private Async Function RenderViewToString(viewName As String, model As Object) As Task(Of String) ViewData.Model = model Using writer = New StringWriter() Dim viewResult = viewEngine.FindView(ControllerContext, viewName, False) Dim viewContext = New ViewContext( ControllerContext, viewResult.View, ViewData, TempData, writer, New HtmlHelperOptions() ) Await viewResult.View.RenderAsync(viewContext) Return writer.GetStringBuilder().ToString() End Using End Function $vbLabelText $csharpLabel 這種方法首先將Razor 視圖渲染成 HTML 字串,然後將其轉換為 PDF。 PDF 檔案將以文件下載的形式返回到使用者的瀏覽器中,並帶有相應的文件名稱。 它與ASPX 檔案和現代 Razor 視圖都能完美相容。 對於Razor Pages ,請使用專用的渲染方法。 MVC框架指南涵蓋了較舊的ASP.NET版本。 對於生產環境部署,實施快取以降低伺服器負載: private readonly IMemoryCache _cache; [HttpGet] public async Task<IActionResult> DownloadCachedPdf(int invoiceId) { var cacheKey = $"invoice_pdf_{invoiceId}"; if (!_cache.TryGetValue(cacheKey, out byte[] pdfBytes)) { // Generate PDF if not cached var htmlContent = await RenderViewToString("Invoice", model); var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdfBytes = pdf.BinaryData; // Cache for 1 hour _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1)); } return File(pdfBytes, "application/pdf", $"invoice_{invoiceId}.pdf"); } private readonly IMemoryCache _cache; [HttpGet] public async Task<IActionResult> DownloadCachedPdf(int invoiceId) { var cacheKey = $"invoice_pdf_{invoiceId}"; if (!_cache.TryGetValue(cacheKey, out byte[] pdfBytes)) { // Generate PDF if not cached var htmlContent = await RenderViewToString("Invoice", model); var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdfBytes = pdf.BinaryData; // Cache for 1 hour _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1)); } return File(pdfBytes, "application/pdf", $"invoice_{invoiceId}.pdf"); } Imports System Imports System.Threading.Tasks Imports Microsoft.AspNetCore.Mvc Imports Microsoft.Extensions.Caching.Memory Private ReadOnly _cache As IMemoryCache <HttpGet> Public Async Function DownloadCachedPdf(invoiceId As Integer) As Task(Of IActionResult) Dim cacheKey = $"invoice_pdf_{invoiceId}" Dim pdfBytes As Byte() = Nothing If Not _cache.TryGetValue(cacheKey, pdfBytes) Then ' Generate PDF if not cached Dim htmlContent = Await RenderViewToString("Invoice", model) Dim renderer = New ChromePdfRenderer() Dim pdf = renderer.RenderHtmlAsPdf(htmlContent) pdfBytes = pdf.BinaryData ' Cache for 1 hour _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1)) End If Return File(pdfBytes, "application/pdf", $"invoice_{invoiceId}.pdf") End Function $vbLabelText $csharpLabel 無頭渲染指南展示如何在沒有 GUI 上下文的情況下產生 PDF,非常適合後台服務。 我可以轉換外部網址嗎? 對於現有的網頁,可以使用 IronPDF 將任何URL 直接轉換為 PDF 。 只需提供HTTP或HTTPS位址即可: [HttpGet] public IActionResult GeneratePdfFromUrl() { var renderer = new ChromePdfRenderer(); // Convert a specified URL to PDF document var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_106___"); // Stream the PDF file to the browser return File(pdf.BinaryData, "application/pdf", "invoice.pdf"); } [HttpGet] public IActionResult GeneratePdfFromUrl() { var renderer = new ChromePdfRenderer(); // Convert a specified URL to PDF document var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_106___"); // Stream the PDF file to the browser return File(pdf.BinaryData, "application/pdf", "invoice.pdf"); } <HttpGet> Public Function GeneratePdfFromUrl() As IActionResult Dim renderer = New ChromePdfRenderer() ' Convert a specified URL to PDF document Dim pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_106___") ' Stream the PDF file to the browser Return File(pdf.BinaryData, "application/pdf", "invoice.pdf") End Function $vbLabelText $csharpLabel 如果您已經擁有格式良好的網頁,並希望將其作為可下載的 PDF 文件提供,則此方法非常有效。 該庫處理所有外部資源,包括樣式表、腳本和圖像,確保完整渲染。 如果轉換器遇到無效的 URL,則會傳回對應的 HTTP 狀態碼。 對於JavaScript 程式碼較多的頁面,請配置適當的渲染延遲。 對於容器化環境,請正確配置網路設定: // Configure for Docker/Kubernetes environments renderer.RenderingOptions.Timeout = 60000; // 60 second timeout renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.WaitFor = new WaitFor() { RenderDelay = 500, // Wait 500ms after page load NetworkIdle = IronPdf.Engines.Chrome.NetworkIdle.NetworkIdle2 }; // Configure for Docker/Kubernetes environments renderer.RenderingOptions.Timeout = 60000; // 60 second timeout renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.WaitFor = new WaitFor() { RenderDelay = 500, // Wait 500ms after page load NetworkIdle = IronPdf.Engines.Chrome.NetworkIdle.NetworkIdle2 }; ' Configure for Docker/Kubernetes environments renderer.RenderingOptions.Timeout = 60000 ' 60 second timeout renderer.RenderingOptions.EnableJavaScript = True renderer.RenderingOptions.WaitFor = New WaitFor() With { .RenderDelay = 500, ' Wait 500ms after page load .NetworkIdle = IronPdf.Engines.Chrome.NetworkIdle.NetworkIdle2 } $vbLabelText $csharpLabel 渲染選項指南提供了全面的配置詳情。 對於WebGL 內容,請啟用 GPU 加速。 如何處理已認證頁面? 使用.NET 表單驗證或其他安全機制轉換已驗證頁面時,請傳遞 cookie 或標頭以維護使用者會話。 這樣可以防止在轉換過程中重定向到登入頁面: var renderer = new ChromePdfRenderer(); // Set cookies for authenticated requests with user database credentials renderer.RenderingOptions.CustomCookies.Add("auth_token", Request.Cookies["auth_token"]); // Convert protected web pages to PDF var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_107___"); var renderer = new ChromePdfRenderer(); // Set cookies for authenticated requests with user database credentials renderer.RenderingOptions.CustomCookies.Add("auth_token", Request.Cookies["auth_token"]); // Convert protected web pages to PDF var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_107___"); Dim renderer As New ChromePdfRenderer() ' Set cookies for authenticated requests with user database credentials renderer.RenderingOptions.CustomCookies.Add("auth_token", Request.Cookies("auth_token")) ' Convert protected web pages to PDF Dim pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_107___") $vbLabelText $csharpLabel 這樣可以確保受保護的內容在轉換為 PDF 格式的同時保持安全性。 轉換過程會遵守您應用程式的基本驗證和表單驗證,防止未經授權存取敏感文件。 在需要進行基本身份驗證時,您還可以傳遞使用者名稱和密碼參數。 Cookie 管理指南解釋了進階 Cookie 處理方法。 對於Kerberos 驗證,請設定對應的憑證。 對於微服務架構,請考慮服務間身份驗證: // Add service authentication headers renderer.RenderingOptions.ExtraHttpHeaders.Add("X-Service-Token", GetServiceToken()); renderer.RenderingOptions.ExtraHttpHeaders.Add("X-Request-ID", Activity.Current?.Id); // Configure for internal service mesh renderer.RenderingOptions.BaseUrl = new Uri("___PROTECTED_URL_108___"); // Add service authentication headers renderer.RenderingOptions.ExtraHttpHeaders.Add("X-Service-Token", GetServiceToken()); renderer.RenderingOptions.ExtraHttpHeaders.Add("X-Request-ID", Activity.Current?.Id); // Configure for internal service mesh renderer.RenderingOptions.BaseUrl = new Uri("___PROTECTED_URL_108___"); ' Add service authentication headers renderer.RenderingOptions.ExtraHttpHeaders.Add("X-Service-Token", GetServiceToken()) renderer.RenderingOptions.ExtraHttpHeaders.Add("X-Request-ID", Activity.Current?.Id) ' Configure for internal service mesh renderer.RenderingOptions.BaseUrl = New Uri("___PROTECTED_URL_108___") $vbLabelText $csharpLabel 如何自訂PDF輸出? IronPDF 提供豐富的自訂選項,可控制如何從 HTML 產生文件。 這些設定可協助您建立符合特定頁面佈局和格式要求的專業 PDF 檔案。 渲染設定範例展示了實際應用。 如何控制頁面佈局? var renderer = new ChromePdfRenderer(); // Set default page size for PDF pages renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; // Control page width and margins for the resultant PDF document renderer.RenderingOptions.MarginTop = 25; renderer.RenderingOptions.MarginBottom = 25; renderer.RenderingOptions.MarginLeft = 20; renderer.RenderingOptions.MarginRight = 20; var renderer = new ChromePdfRenderer(); // Set default page size for PDF pages renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; // Control page width and margins for the resultant PDF document renderer.RenderingOptions.MarginTop = 25; renderer.RenderingOptions.MarginBottom = 25; renderer.RenderingOptions.MarginLeft = 20; renderer.RenderingOptions.MarginRight = 20; Dim renderer As New ChromePdfRenderer() ' Set default page size for PDF pages renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait ' Control page width and margins for the resultant PDF document renderer.RenderingOptions.MarginTop = 25 renderer.RenderingOptions.MarginBottom = 25 renderer.RenderingOptions.MarginLeft = 20 renderer.RenderingOptions.MarginRight = 20 $vbLabelText $csharpLabel 這些設定控制頁面的實體佈局。 您可以選擇標準紙張尺寸或自訂尺寸,設定縱向或橫向方向,並調整邊距以滿足您的設計要求。 圖形模板系統可確保所有頁面樣式一致。 對於分頁符,請使用 CSS 屬性來控制內容流。 關於響應式設計的考量: // Configure viewport for mobile-friendly PDFs renderer.RenderingOptions.ViewportWidth = 1024; renderer.RenderingOptions.ViewportHeight = 768; renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; renderer.RenderingOptions.FitToPaperMode = FitToPaperModes.Zoom; renderer.RenderingOptions.Zoom = 100; // Configure viewport for mobile-friendly PDFs renderer.RenderingOptions.ViewportWidth = 1024; renderer.RenderingOptions.ViewportHeight = 768; renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; renderer.RenderingOptions.FitToPaperMode = FitToPaperModes.Zoom; renderer.RenderingOptions.Zoom = 100; ' Configure viewport for mobile-friendly PDFs renderer.RenderingOptions.ViewportWidth = 1024 renderer.RenderingOptions.ViewportHeight = 768 renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print renderer.RenderingOptions.FitToPaperMode = FitToPaperModes.Zoom renderer.RenderingOptions.Zoom = 100 $vbLabelText $csharpLabel 視窗配置指南解釋了不同內容類型的最佳設定。對於灰階輸出,請啟用對應的渲染選項。 如何新增頁首和頁尾? 新增統一的頁首和頁尾可以提昇文件的專業外觀: renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align: center'>Company Report</div>", MaxHeight = 20 }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align: center'>Page {page} of {total-pages}</div>", MaxHeight = 20 }; renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align: center'>Company Report</div>", MaxHeight = 20 }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align: center'>Page {page} of {total-pages}</div>", MaxHeight = 20 }; Imports System renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With { .HtmlFragment = "<div style='text-align: center'>Company Report</div>", .MaxHeight = 20 } renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With { .HtmlFragment = "<div style='text-align: center'>Page {page} of {total-pages}</div>", .MaxHeight = 20 } $vbLabelText $csharpLabel 頁首和頁尾支援 HTML 格式,所有頁面上都有用於頁碼、日期和其他動態內容的特殊佔位符。 以下程式碼示範如何為產生的文件新增專業頁首。 HTML 頭部指南展示了進階格式設定選項。 對於純文字標題,請使用更簡單的 API 方法。 對於具有動態內容的進階頁首/頁尾配置: // Create dynamic headers with metadata var headerHtml = $@" <div style='display: flex; justify-content: space-between; font-size: 10px;'> <span>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</span> <span>Environment: {Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}</span> </div>"; renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = headerHtml, MaxHeight = 30, DrawDividerLine = true }; // Create dynamic headers with metadata var headerHtml = $@" <div style='display: flex; justify-content: space-between; font-size: 10px;'> <span>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</span> <span>Environment: {Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}</span> </div>"; renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = headerHtml, MaxHeight = 30, DrawDividerLine = true }; ' Create dynamic headers with metadata Dim headerHtml = $" <div style='display: flex; justify-content: space-between; font-size: 10px;'> <span>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</span> <span>Environment: {Environment.GetEnvironmentVariable(""ASPNETCORE_ENVIRONMENT"")}</span> </div>" renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With { .HtmlFragment = headerHtml, .MaxHeight = 30, .DrawDividerLine = True } $vbLabelText $csharpLabel 特定頁面上的頁首指南示範了條件頁首/頁尾的應用。 Docker部署最佳實務有哪些? 在容器化環境中部署 IronPDF 需要考慮一些特殊因素才能獲得最佳效能和可靠性。 以下是一個可用於生產環境的 Dockerfile 範例: FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 # Install IronPDF Linux dependencies RUN apt-get update && apt-get install -y \ libgdiplus \ libx11-6 \ libxcomposite1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxrandr2 \ libxrender1 \ libxtst6 \ fonts-liberation \ libnss3 \ libatk-bridge2.0-0 \ libdrm2 \ libxkbcommon0 \ libgbm1 \ libasound2 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY ["YourProject.csproj", "."] RUN dotnet restore COPY . . RUN dotnet build -c Release -o /app/build FROM build AS publish RUN dotnet publish -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . # Set IronPDF temp folder for container environment ENV IRONPDF_TEMP_FOLDER=/tmp/ironpdf ENTRYPOINT ["dotnet", "YourProject.dll"] Docker整合指南提供了完整的部署說明。 為了最大限度地減小容器大小,請使用多階段建置。 Linux 部署指南涵蓋了特定於平台的依賴項。 對於 Kubernetes 部署,請設定適當的資源限制: apiVersion: apps/v1 kind: Deployment metadata: name: pdf-service spec: replicas: 3 template: spec: containers: - name: pdf-generator image: your-registry/pdf-service:latest resources: requests: memory: "512Mi" cpu: "500m" limits: memory: "2Gi" cpu: "2000m" env: - name: IRONPDF_LICENSE_KEY valueFrom: secretKeyRef: name: ironpdf-license key: key livenessProbe: httpGet: path: /health port: 80 initialDelaySeconds: 30 periodSeconds: 10 apiVersion: apps/v1 kind: Deployment metadata: name: pdf-service spec: replicas: 3 template: spec: containers: - name: pdf-generator image: your-registry/pdf-service:latest resources: requests: memory: "512Mi" cpu: "500m" limits: memory: "2Gi" cpu: "2000m" env: - name: IRONPDF_LICENSE_KEY valueFrom: secretKeyRef: name: ironpdf-license key: key livenessProbe: httpGet: path: /health port: 80 initialDelaySeconds: 30 periodSeconds: 10 YAML 運行時資料夾指南解釋了容器中的依賴項管理。 對於Red Hat Enterprise Linux ,可能需要額外的設定。 生產環境部署的最佳實務是什麼? 為確保將 HTML 轉換為 PDF 時達到最佳效能和質量,請遵循以下行之有效的做法。 在高流量情境下,考慮採用非同步處理以提高資源利用率。 並行處理指南示範了並發 PDF 生成技術。 在產生 PDF 之前,請務必先在瀏覽器中測試 HTML 渲染效果,以驗證樣式和佈局。 盡可能使用外部資源的絕對 URL,因為相對路徑在轉換過程中可能會導致問題。 對於包含大量JavaScript 程式碼的複雜頁面,請新增渲染延遲以確保頁面完全載入。 考慮對頻繁產生的文件實施緩存,以降低伺服器負載。 有關 ASP.NET Core 的更多最佳實踐,請參閱微軟官方文件。 像素級精確渲染指南確保最佳輸出品質。 部署到生產環境時,請設定適當的臨時資料夾路徑,並確保您的託管環境已安裝必要的依賴項,特別是對於Linux 部署。 避免將腳本和轉換邏輯放在同一目錄下,以防止衝突。 請查看我們的故障排除指南,以了解常見的部署場景。 當您打算處理直接 HTML 內容時,請務必驗證輸入是否為 URL,以避免意外行為。 初步渲染優化指南旨在解決常見的效能瓶頸問題。 對於高效能應用場景,應實現連線池和資源管理: public class PdfGeneratorService : IDisposable { private readonly SemaphoreSlim _semaphore; private readonly ILogger<PdfGeneratorService> _logger; public PdfGeneratorService(ILogger<PdfGeneratorService> logger) { _logger = logger; // Limit concurrent PDF generations _semaphore = new SemaphoreSlim(Environment.ProcessorCount * 2); } public async Task<byte[]> GeneratePdfAsync(string html) { await _semaphore.WaitAsync(); try { using (var renderer = new ChromePdfRenderer()) { var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(html)); return pdf.BinaryData; } } finally { _semaphore.Release(); } } public void Dispose() { _semaphore?.Dispose(); } } public class PdfGeneratorService : IDisposable { private readonly SemaphoreSlim _semaphore; private readonly ILogger<PdfGeneratorService> _logger; public PdfGeneratorService(ILogger<PdfGeneratorService> logger) { _logger = logger; // Limit concurrent PDF generations _semaphore = new SemaphoreSlim(Environment.ProcessorCount * 2); } public async Task<byte[]> GeneratePdfAsync(string html) { await _semaphore.WaitAsync(); try { using (var renderer = new ChromePdfRenderer()) { var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(html)); return pdf.BinaryData; } } finally { _semaphore.Release(); } } public void Dispose() { _semaphore?.Dispose(); } } Imports System Imports System.Threading Imports System.Threading.Tasks Imports Microsoft.Extensions.Logging Public Class PdfGeneratorService Implements IDisposable Private ReadOnly _semaphore As SemaphoreSlim Private ReadOnly _logger As ILogger(Of PdfGeneratorService) Public Sub New(logger As ILogger(Of PdfGeneratorService)) _logger = logger ' Limit concurrent PDF generations _semaphore = New SemaphoreSlim(Environment.ProcessorCount * 2) End Sub Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte()) Await _semaphore.WaitAsync() Try Using renderer As New ChromePdfRenderer() Dim pdf = Await Task.Run(Function() renderer.RenderHtmlAsPdf(html)) Return pdf.BinaryData End Using Finally _semaphore.Release() End Try End Function Public Sub Dispose() Implements IDisposable.Dispose _semaphore?.Dispose() End Sub End Class $vbLabelText $csharpLabel 多線程指南提供了高級並發模式。 為防止記憶體洩漏,請實施正確的記憶體釋放機制。 使用自訂日誌記錄監控效能指標: // Configure logging for production monitoring Installation.LoggingMode = IronPdf.Logging.LoggingModes.Custom; Installation.CustomLogger = (level, message) => { _logger.Log( level == IronPdf.Logging.LogLevels.Error ? LogLevel.Error : LogLevel.Information, "IronPDF: {Message}", message ); }; // Configure logging for production monitoring Installation.LoggingMode = IronPdf.Logging.LoggingModes.Custom; Installation.CustomLogger = (level, message) => { _logger.Log( level == IronPdf.Logging.LogLevels.Error ? LogLevel.Error : LogLevel.Information, "IronPDF: {Message}", message ); }; ' Configure logging for production monitoring Installation.LoggingMode = IronPdf.Logging.LoggingModes.Custom Installation.CustomLogger = Sub(level, message) _logger.Log( If(level = IronPdf.Logging.LogLevels.Error, LogLevel.Error, LogLevel.Information), "IronPDF: {Message}", message ) End Sub $vbLabelText $csharpLabel Azure 日誌檔案指南和AWS 日誌管理解釋了雲端特定的日誌記錄策略。 實施工程支援集成,以快速解決問題。 為了增強安全性,請實施PDF 加密和數位簽章。 安全 CVE 指南旨在解決常見的安全問題。 考慮對使用者上傳的內容進行PDF文件清理。 準備好實施 HTML 到 PDF 的轉換了嗎? 使用 IronPDF,在 ASP.NET Core 應用程式中將 HTML 轉換為 PDF 變得非常簡單。 此函式庫基於 Chrome 的渲染技術可確保準確轉換,同時提供豐富的自訂選項,用於產生專業文件。 無論是處理 HTML 字串、URL 或完整的網頁,IronPDF 都能保留精確的格式、CSS 樣式和 JavaScript 行為。 這款基於 .NET 的工具能夠有效率地處理整個轉換過程。 該程式庫的Docker 支援和效能最佳化功能使其成為現代容器化部署和微服務架構的理想選擇。 立即開始您的 30 天免費試用,或與我們的團隊預約演示。 常見問題解答 IronPDF 在 ASP.NET 應用程式中的主要功能是什麼? IronPDF 用於在 ASP.NET 應用程式中將 HTML 內容轉換成專業的 PDF 文件。它能讓開發人員有效率地產生發票、建立報表,以及製作可下載的 PDF 檔案。 為什麼在 ASP.NET 專案中將 HTML 轉換為 PDF 很重要? 將 HTML 轉換為 PDF 在 ASP.NET 專案中至關重要,因為它可以將動態內容轉換為專業、可分享的 PDF 文件(例如發票和報告),有助於提供精緻的使用者體驗。 IronPDF 可以處理 ASP.NET 中的動態 HTML 內容嗎? 是的,IronPDF 旨在處理動態 HTML 內容,因此非常適合從動態 ASP.NET 網頁和應用程式生成 PDF。 在 ASP.NET 中將 HTML 轉換為 PDF 的常見用例有哪些? 常見的使用案例包括產生發票、建立報告,以及從網路應用程式提供可下載的 PDF 檔案。 IronPDF 是否支援在轉換後的 PDF 文件中加入樣式? 是的,IronPDF 支援 CSS 造型,讓開發人員可以在轉換後的 PDF 文件中維持原始 HTML 內容的外觀和感覺。 IronPDF 如何改善 ASP.NET 應用程式的使用者體驗? IronPDF 可讓開發人員直接從他們的 ASP.NET 應用程式提供高品質的 PDF 文件,例如報告和發票,確保一致性和專業性,進而改善使用者經驗。 是否可以使用 IronPDF 自動生成 PDF? 是的,IronPDF for .NET 允許 PDF 自動生成,使開發人員能夠在他們的 ASP.NET 應用程式中以程式化的方式建立和管理 PDF 文件。 Curtis Chau 立即與工程團隊聊天 技術撰稿人 Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。 相關文章 更新2026年1月22日 How to Create PDF Documents in .NET with IronPDF: Complete Guide Discover effective methods to create PDF files in C# for developers. Enhance your coding skills and streamline your projects. Read the article now! 閱讀更多 更新2026年1月21日 How to Merge PDF Files in VB.NET: Complete Tutorial Merge PDF VB NET with IronPDF. Learn to combine multiple PDF files into one document using simple VB.NET code. Step-by-step examples included. 閱讀更多 更新2026年1月21日 C# PDFWriter Tutorial: Create PDF Documents in .NET Learn to create PDFs efficiently using C# PDFWriter with this step-by-step guide for developers. Read the article to enhance your skills today! 閱讀更多 How to Create a Xamarin PDF GeneratorHow to Convert PDF to TIFF in VB.NET
更新2026年1月22日 How to Create PDF Documents in .NET with IronPDF: Complete Guide Discover effective methods to create PDF files in C# for developers. Enhance your coding skills and streamline your projects. Read the article now! 閱讀更多
更新2026年1月21日 How to Merge PDF Files in VB.NET: Complete Tutorial Merge PDF VB NET with IronPDF. Learn to combine multiple PDF files into one document using simple VB.NET code. Step-by-step examples included. 閱讀更多
更新2026年1月21日 C# PDFWriter Tutorial: Create PDF Documents in .NET Learn to create PDFs efficiently using C# PDFWriter with this step-by-step guide for developers. Read the article to enhance your skills today! 閱讀更多