USING IRONPDF How to Convert HTML to PDF Using Azure and IronPDF Curtis Chau 更新:2026年1月14日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 在 Azure Functions 中將 HTML 轉換為 PDF 需要IronPDF 的 Chrome 渲染引擎和正確的Azure 配置(最低 B1 層),使您能夠將任何 HTML 內容(從簡單的字串到 JavaScript 密集的頁面)轉換為像素級完美的 PDF,同時處理 Azure 的沙盒限制和 GDI+ 限制。 為什麼學習HTML轉PDF轉換值得? 在雲端環境中將 HTML 內容轉換為PDF 文件可能比想像中更具挑戰性。 如果您曾經嘗試將PDF 生成器部署到 Azure Functions,您可能遇到過有關 GDI+ 或沙箱限制的神秘錯誤。 好消息是什麼? 使用IronPDF和正確的設置,您可以將任何 HTML 內容轉換為像素級完美的 PDF 檔案。 本教學將向您展示如何使用 IronPDF 在 Azure Functions 中部署可用於生產的HTML 到 PDF 轉換器。 您將學習如何處理從簡單的HTML 字串到 JavaScript 密集型網頁的所有內容,同時也要應對Azure 獨特的環境限制。 無論您是建立簡單的發票還是複雜的報告,到最後,您都將掌握使用 IronPDF 和 Azure將 HTML 轉換為 PDF 的技巧。 !{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110-- 為什麼在 Azure 中將 HTML 轉換為 PDF 具有挑戰性? 在深入了解PDF 轉換之前,讓我們先來了解為什麼這項任務對 Azure 中的開發人員來說是一個挑戰。 Azure 的無伺服器服務和應用服務運行在安全沙箱中,限制了傳統PDF 庫所依賴的操作: *有限的 GDI+ 存取:*較低層級的 Windows 圖形呼叫被阻止。 字體渲染限制:自訂字體和SVG 字體面臨限制。 記憶體限制: HTML 轉 PDF需要大量資源。 進程隔離:**執行瀏覽器引擎需要特殊權限。 這些限制在 Azure 的按需付費方案和免費/共享層級中最為嚴格。 因此,要成功將 HTML 轉換為 PDF,至少需要 Azure Basic B1 層或進階訂閱。 這些權限和資源為IronPDF 的 Chrome 渲染引擎正常運作提供了必要的權限和資源。 有關 Azure 託管層和PDF 渲染效能的更多信息,請查看IronPDF 的 Azure 部署指南。 哪種 Azure 部署選項最適合產生 PDF 檔案? 您有三種部署選項( Windows 、 Linux或容器)。 雖然建議使用Azure 函數應用容器,但任何選項都可以正常運作。 今天我們將重點介紹容器方法,它提供了一個隔離的環境,配置最少,並且與IronPDF 的渲染引擎具有更好的兼容性。 對於 Azure 政府雲端或 Azure 中國等特殊環境,同樣的原則也適用-只需相應地調整部署終點。 為什麼 IronPDF 在 Azure 中能夠出色地完成 HTML 轉 PDF 任務? IronPDF憑藉其Chrome渲染引擎,在Azure中實現了強大的HTML到PDF轉換功能,因此脫穎而出。 這不僅僅是一個基本的 HTML 解析器——它採用的是與 Google Chrome 相同的技術,確保您的PDF 文件與在現代瀏覽器中顯示的效果完全相同。 Chrome渲染引擎的哪些特性最重要? Chrome 引擎為HTML 轉 PDF帶來了關鍵優勢: *完全支援 CSS3:現代CSS 樣式完美呈現。 JavaScript 執行:完全支援動態 JavaScript 渲染。 *網頁字體渲染:* Google 字體和自訂字體顯示正常。 現代 Web 標準:**支援 HTML5 元素、 SVG 圖形和 Canvas。 這表示您可以將任何現代網頁(包括Bootstrap 樣式、JavaScript 框架或複雜的視覺效果)轉換為 PDF,而不會出現相容性問題。 IronPDF 能夠處理在 Azure 受限環境中執行無頭 Chrome 執行個體。 了解更多關於IronPDF 的 Chrome 渲染功能和像素級完美 PDF 渲染的資訊。 如何設定 Microsoft Azure 環境以將 HTML 轉換為 PDF? 讓我們一起來了解如何使用 IronPDF 設定針對HTML 到 PDF 轉換進行最佳化的Azure 函數應用程式。 開始之前我需要具備哪些先決條件? 在開始之前,請確保您已準備好: 一個有效的 Azure 訂閱 Visual Studio 2022 或 Visual Studio Code .NET 6.0 SDK 或更高版本(可從微軟下載) Azure Functions 核心工具(安裝指南) 有關 Azure Functions 中PDF 產生的完整設定說明,請參閱IronPDF 的 Azure Functions 教學。 如何建立 Azure 函數應用程式? 導覽至 Azure 入口網站並按一下"建立資源" 搜尋"函數應用程式",然後點擊"建立"。 配置基本功能: 1.選擇主機方案:選擇符合您需求的方案 2.訂閱:選擇您的 Azure 訂閱 3.資源組:建立新資源組或選擇現有資源組 4.功能應用程式名稱:選擇獨一無二的名稱 5.發布:選擇"容器" 6.地區:選擇您偏好的地點 配置主機方案: 在 Azure 應用程式服務計劃下,按一下"建立新計劃"。 2.定價級別:選擇至少 B1(基礎)或更高級別 請注意:免費、分享和按需付費方案不適用於PDF 渲染。 審核並建立您的函數應用 如何在我的專案中安裝 IronPDF? 首先,在 Visual Studio 中建立一個新的 Azure Functions 專案(或載入一個現有專案),然後新增IronPDF 套件: Install-Package IronPdf #For Windows Deployment Install-Package IronPdf #For Windows Deployment SHELL Install-Package IronPdf.Linux #For Docker Container deployment (recommended) Install-Package IronPdf.Linux #For Docker Container deployment (recommended) SHELL 有關詳細的安裝說明,包括NuGet 套件配置和特定於平台的注意事項,請造訪IronPDF 安裝指南。 Azure 有哪些必備的設定? 配置函數應用的 .cs 文件,以獲得最佳的HTML 到 PDF 轉換效果: using IronPdf; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.Extensions.Logging; public class HtmlToPdfFunction { private readonly ILogger _logger; public HtmlToPdfFunction(ILoggerFactory loggerFactory) { _logger = loggerFactory.CreateLogger<HtmlToPdfFunction>(); // Configure IronPDF for Azure ConfigureIronPdf(); } private void ConfigureIronPdf() { // Set your license key (get a trial key from ___PROTECTED_URL_132___ IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Essential Azure configurations IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true; IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled; IronPdf.Installation.CustomDeploymentDirectory = "/tmp"; // Optional: Enable logging for troubleshooting IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All; } } using IronPdf; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.Extensions.Logging; public class HtmlToPdfFunction { private readonly ILogger _logger; public HtmlToPdfFunction(ILoggerFactory loggerFactory) { _logger = loggerFactory.CreateLogger<HtmlToPdfFunction>(); // Configure IronPDF for Azure ConfigureIronPdf(); } private void ConfigureIronPdf() { // Set your license key (get a trial key from ___PROTECTED_URL_132___ IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Essential Azure configurations IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true; IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled; IronPdf.Installation.CustomDeploymentDirectory = "/tmp"; // Optional: Enable logging for troubleshooting IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All; } } $vbLabelText $csharpLabel 如何將HTML字串轉換為PDF? 讓我們從最常見的場景開始:將HTML 字串直接轉換為 PDF 。 這種方法適用於動態產生的內容,例如發票、報表或確認電子郵件。 如何進行基本的HTML字串轉換? [Function("ConvertHtmlToPdf")] public async Task<HttpResponseData> ConvertHtmlToPdf( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { _logger.LogInformation("Starting HTML to PDF conversion"); try { // Simple HTML invoice example string htmlContent = @" <!DOCTYPE html> <html> <head> <meta charset='UTF-8'> <style> body { font-family: Arial, sans-serif; margin: 40px; } .header { color: #333; border-bottom: 2px solid #0066cc; } .invoice-details { margin: 20px 0; } table { width: 100%; border-collapse: collapse; } th, td { padding: 10px; text-align: left; border-bottom: 1px solid #ddd; } .total { font-weight: bold; font-size: 1.2em; } </style> </head> <body> <div class='header'> <h1>Invoice #12345</h1> <p>Date: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p> </div> <div class='invoice-details'> <table> <tr> <th>Item</th> <th>Quantity</th> <th>Price</th> </tr> <tr> <td>Professional Services</td> <td>10 hours</td> <td>$1,000.00</td> </tr> <tr> <td colspan='2' class='total'>Total</td> <td class='total'>$1,000.00</td> </tr> </table> </div> </body> </html>"; // Create Chrome renderer var renderer = new ChromePdfRenderer(); // Configure rendering options renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 25; renderer.RenderingOptions.MarginBottom = 25; renderer.RenderingOptions.MarginLeft = 25; renderer.RenderingOptions.MarginRight = 25; // Convert HTML to PDF var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Return PDF as response var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); response.Headers.Add("Content-Disposition", "attachment; filename=invoice.pdf"); await response.Body.WriteAsync(pdf.BinaryData); _logger.LogInformation("PDF generated successfully"); return response; } catch (Exception ex) { _logger.LogError(ex, "Error generating PDF"); var errorResponse = req.CreateResponse(HttpStatusCode.InternalServerError); await errorResponse.WriteStringAsync($"Error: {ex.Message}"); return errorResponse; } } [Function("ConvertHtmlToPdf")] public async Task<HttpResponseData> ConvertHtmlToPdf( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { _logger.LogInformation("Starting HTML to PDF conversion"); try { // Simple HTML invoice example string htmlContent = @" <!DOCTYPE html> <html> <head> <meta charset='UTF-8'> <style> body { font-family: Arial, sans-serif; margin: 40px; } .header { color: #333; border-bottom: 2px solid #0066cc; } .invoice-details { margin: 20px 0; } table { width: 100%; border-collapse: collapse; } th, td { padding: 10px; text-align: left; border-bottom: 1px solid #ddd; } .total { font-weight: bold; font-size: 1.2em; } </style> </head> <body> <div class='header'> <h1>Invoice #12345</h1> <p>Date: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p> </div> <div class='invoice-details'> <table> <tr> <th>Item</th> <th>Quantity</th> <th>Price</th> </tr> <tr> <td>Professional Services</td> <td>10 hours</td> <td>$1,000.00</td> </tr> <tr> <td colspan='2' class='total'>Total</td> <td class='total'>$1,000.00</td> </tr> </table> </div> </body> </html>"; // Create Chrome renderer var renderer = new ChromePdfRenderer(); // Configure rendering options renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 25; renderer.RenderingOptions.MarginBottom = 25; renderer.RenderingOptions.MarginLeft = 25; renderer.RenderingOptions.MarginRight = 25; // Convert HTML to PDF var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Return PDF as response var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); response.Headers.Add("Content-Disposition", "attachment; filename=invoice.pdf"); await response.Body.WriteAsync(pdf.BinaryData); _logger.LogInformation("PDF generated successfully"); return response; } catch (Exception ex) { _logger.LogError(ex, "Error generating PDF"); var errorResponse = req.CreateResponse(HttpStatusCode.InternalServerError); await errorResponse.WriteStringAsync($"Error: {ex.Message}"); return errorResponse; } } $vbLabelText $csharpLabel 它會接收給定的 HTML 字串,並將其渲染成高品質的PDF 文檔,同時應用我們使用RenderingOptions類配置的自訂渲染選項。 PDF輸出檔是什麼樣的? PDF 檢視器顯示一份簡單的發票(#12345),其中只有一行,內容為 10 小時的專業服務,總計 1000 美元。 如何將網址轉換為PDF? 對於現有網頁或複雜應用程序,您可以直接轉換 URL : [Function("ConvertUrlToPdf")] public async Task<HttpResponseData> ConvertUrlToPdf( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { var requestBody = await req.ReadAsStringAsync(); var urlRequest = JsonSerializer.Deserialize<UrlRequest>(requestBody); try { var renderer = new ChromePdfRenderer(); // Configure for web page rendering renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; renderer.RenderingOptions.PrintHtmlBackgrounds = true; renderer.RenderingOptions.CreatePdfFormsFromHtml = true; // Enable JavaScript execution (important for dynamic content) renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS to execute // Convert URL to PDF var pdf = renderer.RenderUrlAsPdf(urlRequest.Url); var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); await response.Body.WriteAsync(pdf.BinaryData); return response; } catch (Exception ex) { _logger.LogError(ex, "Error converting URL to PDF"); throw; } } public class UrlRequest { public string Url { get; set; } } [Function("ConvertUrlToPdf")] public async Task<HttpResponseData> ConvertUrlToPdf( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { var requestBody = await req.ReadAsStringAsync(); var urlRequest = JsonSerializer.Deserialize<UrlRequest>(requestBody); try { var renderer = new ChromePdfRenderer(); // Configure for web page rendering renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; renderer.RenderingOptions.PrintHtmlBackgrounds = true; renderer.RenderingOptions.CreatePdfFormsFromHtml = true; // Enable JavaScript execution (important for dynamic content) renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS to execute // Convert URL to PDF var pdf = renderer.RenderUrlAsPdf(urlRequest.Url); var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); await response.Body.WriteAsync(pdf.BinaryData); return response; } catch (Exception ex) { _logger.LogError(ex, "Error converting URL to PDF"); throw; } } public class UrlRequest { public string Url { get; set; } } $vbLabelText $csharpLabel URL轉換結果輸出是什麼樣的? 蘋果官網首頁分割畫面顯示,左側展示 iPhone 16 系列產品,右側展示 Apple Watch Series 10 以及以舊換新和 Apple Card 促銷活動。 如何使用 JavaScript 處理複雜的 HTML 內容? 現代Web應用程式嚴重依賴JavaScript來渲染內容。 無論是圖表、動態表單還是單頁應用程序, IronPDF 的渲染引擎都能輕鬆應付。 如何處理大量使用 JavaScript 的內容? 在這個範例中,我們將使用一個包含JavaScript 內容的HTML 文件,並將其轉換為 PDF 文件。 分析儀表板顯示公司關鍵績效指標 (KPI),包括 45,200 美元的總收入、1 月至 6 月的月度銷售趨勢、每週網站流量模式以及排名前 4 的產品業績表。 [Function("ConvertComplexHtmlToPdf")] public async Task<HttpResponseData> ConvertComplexHtmlToPdf( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { try { // Load complex HTML from file // [USER TO PROVIDE: complex-dashboard.html with charts and JavaScript] string complexHtml = File.ReadAllText("Templates/complex-dashboard.html"); var renderer = new ChromePdfRenderer(); // JavaScript-specific configurations renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.WaitFor.JavaScript(3000); // Wait 3 seconds for JS // Optional: Set the CSS media type for print or screen styles renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print; // Set viewport for responsive designs renderer.RenderingOptions.ViewPortWidth = 1920; renderer.RenderingOptions.ViewPortHeight = 1080; var pdf = renderer.RenderHtmlAsPdf(complexHtml); // Add metadata pdf.MetaData.Author = "Azure Function"; pdf.MetaData.CreationDate = DateTime.Now; pdf.MetaData.Title = "Complex Dashboard Report"; var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); await response.Body.WriteAsync(pdf.BinaryData); return response; } catch (Exception ex) { _logger.LogError(ex, "Error with complex HTML conversion"); throw; } } [Function("ConvertComplexHtmlToPdf")] public async Task<HttpResponseData> ConvertComplexHtmlToPdf( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { try { // Load complex HTML from file // [USER TO PROVIDE: complex-dashboard.html with charts and JavaScript] string complexHtml = File.ReadAllText("Templates/complex-dashboard.html"); var renderer = new ChromePdfRenderer(); // JavaScript-specific configurations renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.WaitFor.JavaScript(3000); // Wait 3 seconds for JS // Optional: Set the CSS media type for print or screen styles renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print; // Set viewport for responsive designs renderer.RenderingOptions.ViewPortWidth = 1920; renderer.RenderingOptions.ViewPortHeight = 1080; var pdf = renderer.RenderHtmlAsPdf(complexHtml); // Add metadata pdf.MetaData.Author = "Azure Function"; pdf.MetaData.CreationDate = DateTime.Now; pdf.MetaData.Title = "Complex Dashboard Report"; var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); await response.Body.WriteAsync(pdf.BinaryData); return response; } catch (Exception ex) { _logger.LogError(ex, "Error with complex HTML conversion"); throw; } } $vbLabelText $csharpLabel JavaScript 內容在 PDF 中是什麼樣子的? 該公司分析儀錶板 PDF 文件展示了關鍵業務指標,包括 45,200 美元的總收入、每月銷售趨勢、網站流量模式和暢銷產品表。 如何處理圖表和數據視覺化? 現在讓我們轉換一個包含圖表的HTML檔: 長條圖顯示了1月至6月的月度銷售數據,整體呈上升趨勢,數值範圍在1200美元至2400美元之間,其中6月份銷售額最高。 [Function("ConvertChartToPdf")] public async Task<HttpResponseData> ConvertChartToPdf( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { try { // Load chart template string chartHtml = File.ReadAllText("Templates/chart-template.html"); // Replace placeholders with actual data var chartData = await GetChartDataAsync(); chartHtml = chartHtml.Replace("{{CHART_DATA}}", JsonSerializer.Serialize(chartData)); var renderer = new ChromePdfRenderer(); // Ensure charts render completely renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Set paper orientation for charts renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Landscape; var pdf = renderer.RenderHtmlAsPdf(chartHtml); var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); await response.Body.WriteAsync(pdf.BinaryData); return response; } catch (Exception ex) { _logger.LogError(ex, "Chart conversion error"); throw; } } [Function("ConvertChartToPdf")] public async Task<HttpResponseData> ConvertChartToPdf( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { try { // Load chart template string chartHtml = File.ReadAllText("Templates/chart-template.html"); // Replace placeholders with actual data var chartData = await GetChartDataAsync(); chartHtml = chartHtml.Replace("{{CHART_DATA}}", JsonSerializer.Serialize(chartData)); var renderer = new ChromePdfRenderer(); // Ensure charts render completely renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Set paper orientation for charts renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Landscape; var pdf = renderer.RenderHtmlAsPdf(chartHtml); var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); await response.Body.WriteAsync(pdf.BinaryData); return response; } catch (Exception ex) { _logger.LogError(ex, "Chart conversion error"); throw; } } $vbLabelText $csharpLabel PDF 中的圖表視覺化效果是什麼樣的? PDF 檢視器正在顯示一份月度銷售報告,其中包含一個藍色長條圖,顯示了 1 月至 6 月的銷售數據,數值範圍約為 1200 美元至 2400 美元。 IronPDF 在最終的PDF 輸出中保留了原始的 JavaScript 互動性。 如何新增HTML頁首和頁尾? 專業PDF文件通常要求所有頁面都使用一致的頁首和頁尾。 IronPDF 透過基於 HTML 的模板,為進階頁首和頁尾選項提供了簡單易用的方案。 如何建立動態頁首和頁尾? [Function("ConvertWithHeaderFooter")] public async Task<HttpResponseData> ConvertWithHeaderFooter( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { try { string mainContent = @" <html> <body> <h1>Annual Report 2024</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit...</p> </body> </html>"; var renderer = new ChromePdfRenderer(); // Configure margins to accommodate headers/footers renderer.RenderingOptions.MarginTop = 45; renderer.RenderingOptions.MarginBottom = 45; renderer.RenderingOptions.MarginLeft = 25; renderer.RenderingOptions.MarginRight = 25; // HTML Header with merge fields renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { Height = 35, HtmlFragment = @" <div style='text-align: center; font-size: 12px; padding: 10px;'> <div style='float: left;'>Annual Report 2024</div> <div style='float: right;'>Page {page} of {total-pages}</div> <div style='clear: both;'></div> </div>", DrawDividerLine = true }; // HTML Footer renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { Height = 30, HtmlFragment = @" <div style='text-align: center; font-size: 10px; padding: 5px;'> <div>Generated on {date} at {time}</div> <div>© 2024 Your Company. All rights reserved.</div> </div>", DrawDividerLine = true }; var pdf = renderer.RenderHtmlAsPdf(mainContent); var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); await response.Body.WriteAsync(pdf.BinaryData); return response; } catch (Exception ex) { _logger.LogError(ex, "Header/Footer conversion error"); throw; } } [Function("ConvertWithHeaderFooter")] public async Task<HttpResponseData> ConvertWithHeaderFooter( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req, FunctionContext executionContext) { try { string mainContent = @" <html> <body> <h1>Annual Report 2024</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit...</p> </body> </html>"; var renderer = new ChromePdfRenderer(); // Configure margins to accommodate headers/footers renderer.RenderingOptions.MarginTop = 45; renderer.RenderingOptions.MarginBottom = 45; renderer.RenderingOptions.MarginLeft = 25; renderer.RenderingOptions.MarginRight = 25; // HTML Header with merge fields renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { Height = 35, HtmlFragment = @" <div style='text-align: center; font-size: 12px; padding: 10px;'> <div style='float: left;'>Annual Report 2024</div> <div style='float: right;'>Page {page} of {total-pages}</div> <div style='clear: both;'></div> </div>", DrawDividerLine = true }; // HTML Footer renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { Height = 30, HtmlFragment = @" <div style='text-align: center; font-size: 10px; padding: 5px;'> <div>Generated on {date} at {time}</div> <div>© 2024 Your Company. All rights reserved.</div> </div>", DrawDividerLine = true }; var pdf = renderer.RenderHtmlAsPdf(mainContent); var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/pdf"); await response.Body.WriteAsync(pdf.BinaryData); return response; } catch (Exception ex) { _logger.LogError(ex, "Header/Footer conversion error"); throw; } } $vbLabelText $csharpLabel 頁眉如何改善 PDF 輸出? 如何為不同的頁面範圍套用自訂頁首? public async Task<PdfDocument> CreatePdfWithCustomHeaders(string htmlContent) { var renderer = new ChromePdfRenderer(); // First page header (cover page) renderer.RenderingOptions.FirstPageNumber = 0; // Cover page is page 0 renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { Height = 50, HtmlFragment = "<div style='text-align: center; font-size: 24px;'>Company Logo</div>", DrawDividerLine = false }; // Different header for content pages var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Apply different headers to specific pages after rendering for (int i = 1; i < pdf.PageCount; i++) { // Add page-specific content if needed pdf.StampHtml(i, @" <div style='position: absolute; top: 10px; right: 10px; font-size: 10px;'> Section " + GetSectionName(i) + @" </div>"); } return pdf; } private string GetSectionName(int pageNumber) { // Logic to determine section based on page number return pageNumber <= 5 ? "Introduction" : "Main Content"; } public async Task<PdfDocument> CreatePdfWithCustomHeaders(string htmlContent) { var renderer = new ChromePdfRenderer(); // First page header (cover page) renderer.RenderingOptions.FirstPageNumber = 0; // Cover page is page 0 renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { Height = 50, HtmlFragment = "<div style='text-align: center; font-size: 24px;'>Company Logo</div>", DrawDividerLine = false }; // Different header for content pages var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Apply different headers to specific pages after rendering for (int i = 1; i < pdf.PageCount; i++) { // Add page-specific content if needed pdf.StampHtml(i, @" <div style='position: absolute; top: 10px; right: 10px; font-size: 10px;'> Section " + GetSectionName(i) + @" </div>"); } return pdf; } private string GetSectionName(int pageNumber) { // Logic to determine section based on page number return pageNumber <= 5 ? "Introduction" : "Main Content"; } $vbLabelText $csharpLabel 這會將您的頁首套用至指定的PDF 頁面範圍。 Azure 中常見的 HTML 轉 PDF 使用場景有哪些? IronPDF 的多功能性使其適用於多種用途: *發票產生:*轉換帶有動態資料的 HTML 範本。 報表產生:將視覺化內容轉換為可共享的PDF 檔案。 證書創建:產生個人化證書。 文件匯出:將線上文件轉換為離線 PDF 。 電子郵件存檔:儲存格式完整的 HTML 電子郵件。 合約產生:**根據HTML 範本建立文件。 *行銷資料:將網頁設計轉換為可列印的 PDF 檔案。 如何處理常見的 Azure 特有問題? 即使配置正確,您也可能會遇到 Azure 特有的挑戰。 以下是一些常見問題及解決方法: 為什麼我的字體無法正確顯示? 問題:自訂字體顯示不正確或回退到系統字體。 解決方案: Azure 的共用主機層限制了自訂字體所需的 GDI+ 存取權限。 請確保您至少使用 B1 級別,並使用Base64 編碼嵌入字體。 string htmlWithEmbeddedFont = @" <style> @font-face { font-family: 'CustomFont'; src: url(data:font/woff2;base64,YOUR_BASE64_FONT_HERE) format('woff2'); } body { font-family: 'CustomFont', Arial, sans-serif; } </style>"; string htmlWithEmbeddedFont = @" <style> @font-face { font-family: 'CustomFont'; src: url(data:font/woff2;base64,YOUR_BASE64_FONT_HERE) format('woff2'); } body { font-family: 'CustomFont', Arial, sans-serif; } </style>"; $vbLabelText $csharpLabel 如果字體問題持續存在,請參閱IronPDF 的字體故障排除指南。 什麼原因導致"從程式包檔案運行"配置錯誤? 問題:啟用"從套件檔案執行"時,IronPDF 無法載入相依性。 解決方案:此選項會建立一個唯讀環境,阻止 IronPDF 提取必要的檔案。 您可以在發佈設定中停用此選項,或使用IronPdf.Slim 套件,該套件能更好地處理這種情況。 如何處理記憶體和超時問題? 問題:大型 HTML 文件導致逾時或記憶體異常。 解決方案:配置適當的逾時和記憶體設定: // In your Function App configuration renderer.RenderingOptions.Timeout = 120000; // 2 minutes renderer.RenderingOptions.RequestContext = new RequestContext { MaxResponseContentBufferSize = 100 * 1024 * 1024 // 100MB }; // In your Function App configuration renderer.RenderingOptions.Timeout = 120000; // 2 minutes renderer.RenderingOptions.RequestContext = new RequestContext { MaxResponseContentBufferSize = 100 * 1024 * 1024 // 100MB }; $vbLabelText $csharpLabel 有關 Azure Functions 逾時配置,請參閱Microsoft 的逾時文件。 開發者們也在Stack Overflow 的 Azure Functions 標籤下分享了處理大型文件的解決方案。 有關 Azure 中HTML 到 PDF 轉換的更多故障排除方案,請造訪IronPDF 的 Azure 故障排除文件。 如何優化 HTML 轉 PDF 的效能? 根據內容複雜程度, HTML 轉 PDF可能需要消耗大量資源。 以下是 Azure Functions 的一些關鍵最佳化策略: 何時應該對動態內容使用渲染延遲? 處理大量使用 JavaScript 的頁面時,請配置適當的渲染延遲: renderer.RenderingOptions.WaitFor.RenderDelay = 500; // Simple pages renderer.RenderingOptions.WaitFor.RenderDelay = 2000; // Complex JavaScript renderer.RenderingOptions.WaitFor.RenderDelay = 500; // Simple pages renderer.RenderingOptions.WaitFor.RenderDelay = 2000; // Complex JavaScript $vbLabelText $csharpLabel 如何有效率地管理記憶體? 對於高容量場景,應妥善處置資源: using (var renderer = new ChromePdfRenderer()) { using (var pdf = renderer.RenderHtmlAsPdf(html)) { // Process PDF return pdf.BinaryData; } } using (var renderer = new ChromePdfRenderer()) { using (var pdf = renderer.RenderHtmlAsPdf(html)) { // Process PDF return pdf.BinaryData; } } $vbLabelText $csharpLabel 我應該使用哪些快取策略? 當內容不經常更改時,快取生成的 PDF 文件: private static readonly MemoryCache _pdfCache = new MemoryCache(new MemoryCacheOptions { SizeLimit = 100 // Limit cache size }); public async Task<byte[]> GetCachedPdf(string cacheKey, string html) { if (!_pdfCache.TryGetValue(cacheKey, out byte[] cachedPdf)) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); cachedPdf = pdf.BinaryData; _pdfCache.Set(cacheKey, cachedPdf, new MemoryCacheEntryOptions { Size = 1, SlidingExpiration = TimeSpan.FromMinutes(10) }); } return cachedPdf; } private static readonly MemoryCache _pdfCache = new MemoryCache(new MemoryCacheOptions { SizeLimit = 100 // Limit cache size }); public async Task<byte[]> GetCachedPdf(string cacheKey, string html) { if (!_pdfCache.TryGetValue(cacheKey, out byte[] cachedPdf)) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); cachedPdf = pdf.BinaryData; _pdfCache.Set(cacheKey, cachedPdf, new MemoryCacheEntryOptions { Size = 1, SlidingExpiration = TimeSpan.FromMinutes(10) }); } return cachedPdf; } $vbLabelText $csharpLabel 在 Azure 中將 HTML 轉換為 PDF 需要多少費用? 在 Azure 中執行HTML 轉 PDF 轉換涉及兩個成本部分: Azure託管費用是多少? *基礎(B1)層級:* PDF渲染的入門層級,適合輕量級工作負載 標準 (S1) 層級:**更佳的常規 PDF 產生效能 *進階版 (P1V2):建議用於高容量或複雜的 PDF 操作 價格因地區而異,並會隨時間變化。請參閱 IronPDF 的這份指南,選擇最適合您需求的套餐。 IronPDF有哪些授權許可選項? IronPDF 提供靈活的永久許可選項,從單一開發者到無限團隊規模均可適用,所有級別均包含電子郵件支援和 30 天退款保證。 IronPDF 許可 IronPDF提供多種許可選項: *試用許可證:* 免費試用 30 天 精簡版授權:**單一開發者,單一項目 Plus 許可證:適用於擁有多個專案的小型團隊 *專業版:*適用於擁有分送權限的大型團隊 無限制授權:**企業級部署 請造訪IronPDF 的許可頁面,以了解詳細的定價和功能比較。 如何優化成本? 1.實施快取:減少冗餘的 PDF 生成 2.批次處理:在一次函數執行中處理多個 PDF 文件 3.使用基於佇列的處理:將負載分散到一段時間內,以避免擴展需求。 我應該注意哪些安全事項? 雖然我們一直專注於HTML 到 PDF 的轉換,但在處理敏感PDF 文件時,安全性至關重要。 為防止PDF 內容被惡意篡改,請了解更多關於保護 Azure Functions 的資訊: Azure Functions 安全最佳實踐 *在 Azure Functions 中實現身份驗證 IronPDF 安全文檔 成功將 HTML 轉換為 PDF 的關鍵要點是什麼? 在 Azure 中將HTML 轉換為 PDF並不複雜。 透過IronPDF 的 Chrome 渲染引擎和正確的Azure 配置,您可以將任何 HTML 內容轉換為專業的 PDF。 在 Azure 中成功將HTML 轉換為 PDF 的關鍵要點: 請使用 Azure B1 圖層或更高層級以獲得可靠的PDF 渲染效果。 為獲得最佳相容性,請以容器形式部署。 專門針對 Azure 環境配置 IronPDF 設定。 利用HTML 頁首和頁尾建立專業文件。 使用適當的渲染延遲處理JavaScript 內容。 對生產工作負載實施快取和最佳化。 IronPDF提供的功能不僅限於簡單的HTML轉PDF。 本文展示了其在高級 PDF 處理和PDF 影像支援方面的功能。 IronPDF 可以輕鬆整合到您正在開發的任何應用程式中,包括控制台應用程式和.NET Core 應用程式。 準備好在 Azure 應用程式中開始將 HTML 轉換為 PDF 了嗎? !{--01001100010010010100001001010010010000010101001001011001010111110101001101010100010001010101010 10100010111110101010001010010010010010100000101001100010111110100001001001100010011111010000100100110001001111010101 立即試用IronPDF 免費試用版,體驗其強大的功能,並開始在 Azure 應用程式中將 HTML 轉換為 PDF! 對於生產環境部署,請探索IronPDF 的授權選項,找到適合您需求的方案。 IronPDF 提供全面的文件、快速回應的支援和持續的更新,為在 Azure Functions 及其他環境中進行可靠的HTML 到 PDF 轉換提供所需的一切。 常見問題解答 使用 Azure 將 HTML 轉換為 PDF 的目的為何? 使用 Azure 將 HTML 轉換為 PDF,可讓開發人員可靠地產生雲端文件,這對於需要產生和管理文件的應用程式而言至關重要。 IronPDF 如何增強 Azure 上 HTML 到 PDF 的轉換過程? IronPDF 透過提供強大的功能來增強轉換過程,確保產生高品質的 PDF,包括支援複雜的版面設計和樣式,這對於專業文件的製作至關重要。 是否可以在 Azure 上使用 IronPDF 自動生成 PDF? 是的,IronPDF 可以與 Azure 整合以自動生成 PDF,實現無縫的文件工作流程,並減少在雲環境中的人工干擾。 開發人員使用 IronPDF on Azure 的主要優點是什麼? 主要優點包括可擴充性、高效能,以及處理動態 HTML 內容的能力,讓開發人員更容易管理大量的文件處理工作。 IronPDF 能否在轉換過程中處理複雜的 HTML 佈局? IronPdf 旨在處理複雜的 HTML 佈局,確保在 PDF 輸出中準確呈現所有元素,這對於保持文件的完整性至關重要。 在 Azure 上部署 IronPDF 有哪些先決條件? 要在 Azure 上部署 IronPDF,您需要有一個有效的 Azure 帳戶、對 Azure 服務的瞭解,以及存取 IronPDF 函式庫以整合您的應用程式。 IronPDF 如何確保基於雲端產生 PDF 的安全性? IronPDF 透過提供加密的連線和安全的資料處理實務來確保安全性,這對於在 Azure 上產生 PDF 時保護敏感資訊至關重要。 在 Azure 上使用 IronPDF 時,是否可以自訂 PDF 輸出? 是的,IronPDF 為 PDF 輸出提供了廣泛的客製化選項,讓開發人員可以量身打造文件的外觀和功能,以滿足特定需求。 IronPDF 是否支持在 Azure 上将动态网页转换为 PDF? IronPdf 支援動態網頁的轉換,可擷取即時的資料和內容變更,這對於需要產生最新文件的應用程式特別有用。 在 Azure 中將 HTML 轉換為 PDF 時,IronPDF 是否與 .NET 10 相容? 是 - IronPDF 與 .NET 10 完全相容,可確保所有 HTML-to-PDF 功能都能在 Azure 中順暢運作,並且在支援 .NET 9、8、7、6、Core、Standard 和 Framework 平台的同時,也支援 .NET 10。 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 Blazor PDF Viewer Using IronPDFHow to create .NET PDF API Using IronPDF
更新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! 閱讀更多