IronPDF 操作指南 TLS 網站和系統登入 Convert HTML to PDF Behind Login Authentication in C# 柯蒂斯·週 更新:1月 10, 2026 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 分享 分享到 X(Twitter) 在領英上分享 複製連結 電子郵件文章 This article was translated from English: Does it need improvement? Translated View the article in English 若要在 C# 的登入認證後將 HTML 轉換為 PDF,請使用 IronPDF 的 ChromeHttpLoginCredentials 進行網路認證,或在轉換前使用 System.Net.WebClient/HttpClient 下載 HTML。 此方法可有效處理網路驗證及 HTML 表單登入。 快速入門:使用 IronPDF 在登入後將 HTML 轉換為 PDF 使用 IronPDF 的 API 將 HTML 頁面轉換成登入表單後的 PDF。 本指南演示了 ChromeHttpLoginCredentials 用於驗證和受保護內容檢索。 透過直接的程式碼範例,同時處理網路驗證及 HTML 表單登入。 立即開始使用 NuGet 建立 PDF 檔案: 使用 NuGet 套件管理器安裝 IronPDF PM > Install-Package IronPdf 複製並運行這段程式碼。 new ChromePdfRenderer { LoginCredentials = new ChromeHttpLoginCredentials("username","password") } .RenderUrlAsPdf("https://example.com/protected") .SaveAs("secure.pdf"); 部署到您的生產環境進行測試 立即開始在您的專案中使用 IronPDF,免費試用! 免費試用30天 最小工作流程(5 個步驟) 下載 C# IronPDF 庫 下載 HTML 以避免登入 使用LoginCredentials屬性的網路驗證登入 使用 HTML 表單進行驗證 MVC 登入驗證的解決方法 處理登入驗證的最佳做法是什麼? <!--說明:說明程式碼概念的圖表或截圖 --> IronPDF 透過 [ChromeHttpLoginCredentials API](/object-reference/api/IronPdf.ChromeHttpLoginCredentials.html) 支援 TLS 網路驗證(使用者名稱與密碼)。 如需各種登入情境的全面指導,請參閱 [TLS 網站與系統登入教程](https://ironpdf.com/how-to/logins/)。 建議的方法是使用 `System.Net.WebClient` 或 `HttpClient` 下載 HTML 和資產。 此方法支援標頭、登入及其他要求。 下載到記憶體或磁碟後,IronPDF 會將 HTML 轉換成 PDF。 使用 `HtmlAgilityPack` 擷取樣式表及圖片等資產,然後以 `System.Net.WebClient` 下載。 ```csharp // Download HTML content from a URL with authentication string html; using (WebClient client = new WebClient()) { // Add authentication headers if needed client.Headers.Add("Authorization", "Bearer " + accessToken); // Download the HTML string html = client.DownloadString("http://www.example.com/protected-content"); } // Load the HTML into an HtmlDocument for parsing HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); // Extract all image sources for downloading foreach(HtmlNode img in doc.DocumentNode.SelectNodes("//img")) { string imgSrc = img.GetAttributeValue("src", null); Console.WriteLine($"Found image: {imgSrc}"); // Download each image asset if (!string.IsNullOrEmpty(imgSrc)) { string fileName = Path.GetFileName(imgSrc); client.DownloadFile(imgSrc, fileName); } } // Convert the downloaded HTML to PDF var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("authenticated-content.pdf"); ``` 請注意Rebase relative URLs to absolute URLs using the overloaded `System.Uri` constructor. 若要在 HTML 文件中重新建立所有相對路徑,請使用 HtmlAgilityPack 在標題中加入 `` 標籤。 [範例](https://www.w3schools.com/tags/tag_base.asp)。 有關處理 URL 和資產的詳細資訊,請參閱 [Base URLs & Asset Encoding 指南](https://ironpdf.com/how-to/base-urls/)。 為什麼要先下載 HTML 內容? 在轉換前先下載 HTML 內容可提供多項優點: 1.**完全控制**:在轉換前修改 HTML、修復損壞的連結或注入驗證標記 2.**資產管理**:下載和快取外部資源,例如圖片、CSS 和 JavaScript 檔案 3.**驗證彈性**:使用任何 .NET 認證機制,包括 OAuth、JWT 令牌或自訂標頭。 4.**效能**:快取經常存取的內容,以降低伺服器負載 5.**偵錯**:檢查轉換中的確切 HTML,以排除故障。 如需瞭解涉及 cookies 和會話的複雜驗證情境,請參閱 [Cookies 指南](https://ironpdf.com/how-to/cookies/),其中說明 PDF 轉換過程中的驗證狀態管理。 如何處理圖片和樣式表等資產? 在轉換已驗證的頁面時,外部資產通常需要相同的驗證。 以下是使用 `HttpClient` 的綜合方法: ```csharp public async Task DownloadAuthenticatedHtmlWithAssets(string url, string authToken) { using (var client = new HttpClient()) { // Set authentication header client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authToken); // Download the main HTML string html = await client.GetStringAsync(url); // Parse HTML to find assets var doc = new HtmlDocument(); doc.LoadHtml(html); // Create a base URI for resolving relative paths var baseUri = new Uri(url); // Download CSS files var cssLinks = doc.DocumentNode.SelectNodes("//link[@rel='stylesheet']"); if (cssLinks != null) { foreach (var link in cssLinks) { string href = link.GetAttributeValue("href", ""); if (!string.IsNullOrEmpty(href)) { var cssUri = new Uri(baseUri, href); string cssContent = await client.GetStringAsync(cssUri); // Embed CSS directly in the HTML var styleNode = doc.CreateElement("style"); styleNode.InnerHtml = cssContent; doc.DocumentNode.SelectSingleNode("//head").AppendChild(styleNode); // Remove the external link link.Remove(); } } } // Return the modified HTML with embedded assets return doc.DocumentNode.OuterHtml; } } ``` 哪些工具有助於 HTML 解析? `HtmlAgilityPack` 是 .NET 最流行的 HTML 解析函式庫,但也有替代品: 1.**HtmlAgilityPack**:最適合一般的 HTML 解析與操作 2.**AngleSharp**:現代、符合標準的 HTML 解析器,支援 CSS 選擇器 3.**CsQuery**:為熟悉 jQuery 的 C# 開發人員提供類似 jQuery 的語法 4.**Regular Expressions**:適用於簡單的抽取任務 (不建議用於複雜的 HTML) 如何使用網路驗證登入? --> <!--說明:說明程式碼概念的圖表或截圖 --> 大多數 ASP.NET 應用程式支援網頁驗證,這比 HTML 表單提交更可靠。 IronPdf 透過 `ChromeHttpLoginCredentials` 類別提供基本、摘要和 NTLM 認證的內建支援。 有關其他標頭自訂,請參閱 [HTTP Request Header 指南](https://ironpdf.com/how-to/http-request-header/)。 ```csharp :path=/static-assets/pdf/content-code-examples/how-to/logins-username-password.cs ``` 為什麼網路驗證比表單張貼更可靠? 相較於 HTML 表單張貼,網路驗證具有多項優點: 1.**標準化通訊協定**:使用遵循 RFC 標準的 HTTP 認證標頭 2.**瀏覽器整合**:Chrome 渲染引擎可無縫處理驗證 3.**會話管理**:自動處理驗證挑戰與會話持久化 4.**安全性**:透過標頭而非表單資料安全傳輸憑證 5.**相容性**:可與大多數企業驗證系統搭配使用 (`Active Directory`、`LDAP`) 網路驗證需要哪些憑證? 不同的驗證類型需要不同的憑證: ```csharp // Basic Authentication (most common) var basicAuth = new ChromeHttpLoginCredentials { NetworkUsername = "user@domain.com", NetworkPassword = "password123", AuthenticationType = ChromeHttpLoginCredentials.AuthType.Basic }; // NTLM/Windows Authentication var ntlmAuth = new ChromeHttpLoginCredentials { NetworkUsername = "DOMAIN\\username", // Include domain NetworkPassword = "password123", AuthenticationType = ChromeHttpLoginCredentials.AuthType.Ntlm }; // Custom authentication headers var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.CustomHttpHeaders.Add("X-API-Key", "your-api-key"); renderer.RenderingOptions.CustomHttpHeaders.Add("Authorization", "Bearer " + jwtToken); ``` 我該如何排除驗證失敗的問題? 常見的驗證問題與解決方案: 1.**401 未經授權**:檢查憑證和驗證類型 2.**403 禁止**:使用者已驗證但缺乏權限 3.**超時錯誤**:針對緩慢的驗證系統增加 `RenderDelay` 4.**證書錯誤**:適當配置 TLS/SSL 設定 啟用除錯來診斷問題: ```csharp // Enable detailed logging IronPdf.Logging.Logger.EnableDebugging = true; IronPdf.Logging.Logger.LogFilePath = "IronPdf.log"; IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All; // Test authentication try { var pdf = renderer.RenderUrlAsPdf("https://secure.example.com"); pdf.SaveAs("authenticated.pdf"); } catch (Exception ex) { Console.WriteLine($"Authentication failed: {ex.Message}"); // Check IronPdf.log for detailed error information } ``` 如何使用 HTML 表單登入? 若要透過傳送資料至 HTML 表單來登入,請使用 **ChromeHttpLoginCredentials** 類別。 *請參閱 IronPdf 的 [ChromeHttpLoginCredentials API](/object-reference/api/IronPdf.ChromeHttpLoginCredentials.html).*. **請考慮以下幾點:** - 將登入資料發佈到 HTML 表單的 ACTION 屬性中指定的 URL。 將此設定為 HttpLoginCredentials 的 `LoginFormUrl` 屬性。 這可能與您想要呈現為 PDF 的 URL 有所不同。 - 傳送代表 HTML 表單中每個輸入和文字區域的資料。 name 屬性定義每個變數的名稱(而非 id)。 - 有些網站會主動防止機器登入。 以下是一個完整的表單認證範例: ```csharp // Configure form-based login var formLogin = new ChromeHttpLoginCredentials { LoginFormUrl = "https://example.com/login", LoginFormData = new Dictionary { {"username", "user@example.com"}, {"password", "securePassword123"}, {"rememberMe", "true"}, {"csrf_token", "abc123"} // Include any hidden fields } }; var renderer = new ChromePdfRenderer { LoginCredentials = formLogin, RenderingOptions = new ChromePdfRenderOptions { RenderDelay = 3000, // Allow time for login redirect EnableJavaScript = true } }; // The actual page you want to convert (after login) var pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard"); pdf.SaveAs("dashboard.pdf"); ``` 我需要擷取哪些表單資料? 若要透過 HTML 表單成功驗證,請擷取所有表單輸入: ```csharp // Use this helper method to extract form fields public Dictionary ExtractFormFields(string loginPageHtml) { var formData = new Dictionary(); var doc = new HtmlDocument(); doc.LoadHtml(loginPageHtml); // Find all input fields var inputs = doc.DocumentNode.SelectNodes("//input"); if (inputs != null) { foreach (var input in inputs) { string name = input.GetAttributeValue("name", ""); string value = input.GetAttributeValue("value", ""); string type = input.GetAttributeValue("type", "text"); if (!string.IsNullOrEmpty(name)) { // Handle different input types switch (type.ToLower()) { case "checkbox": if (input.Attributes["checked"] != null) formData[name] = "on"; break; case "radio": if (input.Attributes["checked"] != null) formData[name] = value; break; default: formData[name] = value; break; } } } } // Don't forget select elements var selects = doc.DocumentNode.SelectNodes("//select"); if (selects != null) { foreach (var select in selects) { string name = select.GetAttributeValue("name", ""); var selected = select.SelectSingleNode(".//option[@selected]"); if (selected != null && !string.IsNullOrEmpty(name)) { formData[name] = selected.GetAttributeValue("value", ""); } } } return formData; } ``` 如何找到正確的表單動作 URL? 表單動作 URL 是成功驗證的關鍵: ```csharp public string ExtractFormAction(string loginPageUrl, string loginPageHtml) { var doc = new HtmlDocument(); doc.LoadHtml(loginPageHtml); // Find the login form var form = doc.DocumentNode.SelectSingleNode("//form[contains(@action, 'login') or contains(@id, 'login') or contains(@class, 'login')]"); if (form == null) { // Try finding any form with password field form = doc.DocumentNode.SelectSingleNode("//form[.//input[@type='password']]"); } if (form != null) { string action = form.GetAttributeValue("action", ""); // Resolve relative URLs if (!string.IsNullOrEmpty(action)) { var baseUri = new Uri(loginPageUrl); var actionUri = new Uri(baseUri, action); return actionUri.ToString(); } } // Default to the login page URL if no action found return loginPageUrl; } ``` 基於表單的驗證有哪些常見問題? 1.**CSRF代幣**:許多表格都包含過期的防偽標記 2.**JavaScript驗證**:某些表單需要執行JavaScript 3.**多步驗證**:需要多頁面的表單 4.**CAPTCHA 保護**:人為驗證挑戰 5.**會話超時**:快速過期的登入階段 如何處理防毒殭屍保護? 現代網站已實施防止自動登入的保護措施: ```csharp // Strategies for handling anti-bot measures var renderer = new ChromePdfRenderer { RenderingOptions = new ChromePdfRenderOptions { // Mimic real browser behavior ViewPortWidth = 1920, ViewPortHeight = 1080, EnableJavaScript = true, RenderDelay = 5000, // Wait for JavaScript // Set a real user agent CustomHttpHeaders = new Dictionary { {"User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"} } } }; // For sites with rate limiting, add delays between requests System.Threading.Thread.Sleep(2000); ``` 如需全面的 HTML 至 PDF 轉換指南,包括複雜的認證情境,請造訪 [HTML 至 PDF 教學](https://ironpdf.com/tutorials/html-to-pdf/)。 如何處理 MVC 驗證? <!--說明:說明程式碼概念的圖表或截圖 --> 以下的解決方案以程式化的方式將 .NET MVC 視圖渲染為字串,在忠實渲染視圖的同時避免 MVC 登入。 在 MVC Core 或 [MVC Framework](https://ironpdf.com/how-to/cshtml-to-pdf-mvc-framework/) 中將 CSHTML 轉換為 PDF 時,這種方法非常有效。 ```csharp // Converts an MVC partial view to a string public static string RenderPartialViewToString(this Controller controller, string viewPath, object model = null) { try { // Set the model var context = controller.ControllerContext; controller.ViewData.Model = model; using (var sw = new StringWriter()) { // Find the partial view var viewResult = ViewEngines.Engines.FindPartialView(context, viewPath); if (viewResult.View == null) { throw new Exception($"Partial view {viewPath} could not be found."); } // Create a view context var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw); // Render the view viewResult.View.Render(viewContext, sw); viewResult.ViewEngine.ReleaseView(context, viewResult.View); return sw.GetStringBuilder().ToString(); } } catch (Exception ex) { // Return error message if there is an exception return ex.Message; } } // Usage in an MVC Controller public ActionResult GeneratePdf() { // Render authenticated view to string var model = new InvoiceViewModel { /* populate model */ }; string html = this.RenderPartialViewToString("~/Views/Invoice/Details.cshtml", model); // Convert to PDF var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); // Return PDF file return File(pdf.BinaryData, "application/pdf", "invoice.pdf"); } ``` 為何要將視圖繪製成字串而非直接轉換? 將 MVC 視圖渲染為字串有幾個主要優點: 1.**驗證情境**:檢視會在已驗證使用者的上下文中呈現 2.**Full MVC Pipeline**:所有 MVC 功能都能運作,包括 `ViewBag`, `TempData`, 和 `Html` 幫手。 3.**版面支援**:主頁面與版面可正確呈現 4.**模型綁定**:複雜的檢視模型可無縫運作 5.**動作篩選器**:安全性和記錄篩選器正常執行 此 MVC 變通的優點為何? MVC 字串渲染方法提供: - **安全性**:無需暴露內部 URL 或繞過認證 - **效能**:避免額外的 HTTP 請求 - **一致性**:與使用者在瀏覽器中看到的輸出完全相同 - **彈性**:在 PDF 轉換前修改 HTML - **測試**:輕鬆產生單元測試 HTML 如何將模型傳送到渲染視圖? 以下是一個具有複雜模型的綜合範例: ```csharp public class InvoiceController : Controller { private readonly IInvoiceService _invoiceService; public async Task DownloadInvoicePdf(int invoiceId) { // Load data within authenticated context var invoice = await _invoiceService.GetInvoiceAsync(invoiceId); if (invoice == null || invoice.UserId != User.Identity.GetUserId()) { return HttpNotFound(); } // Create view model var viewModel = new InvoiceDetailsViewModel { Invoice = invoice, Company = await _invoiceService.GetCompanyDetailsAsync(), LineItems = await _invoiceService.GetLineItemsAsync(invoiceId), TaxDetails = await _invoiceService.GetTaxDetailsAsync(invoiceId) }; // Render to HTML string string html = this.RenderPartialViewToString("~/Views/Invoice/DetailsPdf.cshtml", viewModel); // Add custom styling for PDF html = $@" {html} "; // Convert to PDF with options var renderer = new ChromePdfRenderer { RenderingOptions = new ChromePdfRenderOptions { MarginTop = 20, MarginBottom = 20, MarginLeft = 10, MarginRight = 10, PrintHtmlBackgrounds = true } }; var pdf = renderer.RenderHtmlAsPdf(html); // Add metadata pdf.MetaData.Author = "Invoice System"; pdf.MetaData.Title = $"Invoice #{invoice.Number}"; pdf.MetaData.CreationDate = DateTime.Now; return File(pdf.BinaryData, "application/pdf", $"Invoice-{invoice.Number}.pdf"); } } ``` 在實施任何驗證解決方案之前,請確認已正確安裝 IronPDF 並配置授權金鑰。 準備好看看您還能做些什麼嗎? 請造訪我們的教學頁面:[Convert PDFs](https://ironpdf.com/tutorials/convert-pdf/)。 常見問題解答 當內容位於登入表單之後,我該如何將 HTML 轉換成 PDF? IronPDF 提供了多種在登入驗證後將 HTML 轉換為 PDF 的方法。您可以使用 ChromeHttpLoginCredentials API 進行 TLS 網路驗證,或使用 System.Net.WebClient 或 HttpClient 下載 HTML 內容,並加上適當的驗證標頭,然後再使用 IronPDF 將其轉換為 PDF。 什麼是 ChromeHttpLoginCredentials? ChromeHttpLoginCredentials 是 IronPDF 處理網路認證的 API。您可以通過在 ChromePdfRenderer 上的 LoginCredentials 屬性中設置您的用戶名和密碼來使用它,允許 IronPDF 在將受密碼保護的 URL 渲染成 PDF 時自動進行身份驗證。 我可以處理基於 HTML 表單的登入 PDF 轉換嗎? 是的,IronPDF 支持基于 HTML 表单的登录。建議的方法是使用 System.Net.WebClient 或 HttpClient 來處理登入過程,下載驗證的 HTML 內容,然後再使用 IronPDF 的 RenderHtmlAsPdf 方法將下載的 HTML 轉換成 PDF。 如何從驗證的頁面下載圖片和樣式表等 HTML 資產? 您可以使用 HtmlAgilityPack 來解析下載的 HTML 並擷取資產 URL,例如圖片和樣式表。然後使用 System.Net.WebClient 下載每個具有相同驗證標頭的資產,最後再使用 IronPDF 將完整的 HTML 套件轉換為 PDF。 處理認證標記或標頭的最佳做法是什麼? 使用 IronPdf 時,請使用 HttpClient 或 WebClient 下載 HTML,並附上驗證標頭(例如 Bearer tokens)。一旦您在記憶體或磁碟中儲存了認證的 HTML 內容,請使用 IronPDF 的 ChromePdfRenderer 將其轉換為 PDF。 MVC 登入驗證有變通的方法嗎? 是的,IronPDF 為 MVC 登入驗證情況提供了變通方案。建議的方法是先使用標準的 .NET HTTP 客戶端驗證和下載 HTML 內容,然後將驗證的 HTML 直接傳遞給 IronPDF 的渲染引擎,而不是由 IronPDF 處理驗證。 柯蒂斯·週 現在就和工程團隊聊天吧 技術撰稿人 Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。 準備好開始了嗎? Nuget 下載 17,012,929 | 版本: 2025.12 剛剛發布 免費下載 NuGet 總下載量: 17,012,929 查看許可證