IRONSOFTWAREHOME

Using the C# WaitFor Class to Delay PDF Rendering

Curtis Chau
Curtis Chau
Updated: 2026年9月5日

IronPDF 中的 C# WaitFor 類別協助開發人員在所有資源、字型和 JavaScript 載入完成後再延遲 PDF 渲染,防止不完整渲染,通過 NetworkIdle 和 JavaScript 觸發器等方法實現。

⟨AH2BG⟩快速入門:使用 WaitFor 提高 PDF 渲染⟨AH2EG⟩

IronPDF 的 WaitFor 功能允許開發人員通過管理異步計時來提升 PDF 渲染。 通過設定像 RenderDelay 這樣的選項,您可以確保在轉換之前所有資源和腳本已載入,防止不完整 PDF 文件。 本指南展示如何在您的專案中實施 WaitFor ,以實現精確和高效的渲染。

new IronPdf.ChromePdfRenderer { RenderingOptions = { WaitFor = IronPdf.WaitFor.RenderDelay(3000) } }
    .RenderUrlAsPdf("https://example.com")
    .SaveAs("output.pdf");

WaitFor 類別及其選項是什麼?

為了以最佳效能渲染 PDFWaitFor 類別改善了 PDF 渲染過程。 WaitFor 物件來自 RenderOptions ,提供了幾個選項:

  • PageLoad:預設渲染,不需等待。
  • RenderDelay:設定任意等待時間。
  • Fonts:等待直到所有字體載入完畢。
  • JavaScript:通過 JavaScript 函式觸發渲染。
  • HTML elements:等待特定的 HTML 元素,例如元素 ID、名稱、標籤名和查詢選擇器,來鎖定目標元素。
  • NetworkIdle:等待網路空閒(0、2 或自定義數量)。

這些功能適用於將HTML 字串轉換為 PDFHTML 文件轉換為 PDF,以及網站 URL 轉換為 PDF

如何立即渲染 PDF 而不等待?

預設情況下,渲染會在頁面載入完成後立即發生。 正常渲染不需要調用 PageLoad 方法。 這種方法適合不包含複雜 JavaScript 或外部資源的簡單 HTML 內容。

using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render as soon as the page is loaded
renderer.RenderingOptions.WaitFor.PageLoad();

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>testing</h1>");

如何在 PDF 渲染前新增自定義延遲?

當需要特定延遲來渲染 PDF 時,您可以設定一個任意毫秒數作為延遲。 這為特定時間要求提供了靈活性,特別是當處理JavaScript 內容繁重時。

此選項的工作方式與舊實作使用的 RenderingOptions.RenderDelay 屬性相同。 然而,舊屬性已被棄用。 使用新的 API:RenderingOptions.WaitFor.RenderDelay

using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render after 3000ms
renderer.RenderingOptions.WaitFor.RenderDelay(3000);

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>testing</h1>");

當您的 HTML 包含動畫、延遲載入內容或需要動態內容生成的時間時,延遲機制很有用。 對於複雜的渲染情況,探索自定義渲染選項

如何在渲染之前等待所有字體載入?

WaitFor 類別中的 AllFontsLoaded 方法暫停 PDF 渲染,直到所有字體從外部資源(如 Google 字體)載入完成。 這確保了最終的 PDF 包含所有必要字體,保留了文件的預期排版和視覺外觀。 此功能維持專業的 PDF 輸出品質

using IronPdf;

string htmlContent = @"
<!DOCTYPE html>
<html lang=""en"">
<head>
  <meta charset=""UTF-8"">
  <title>Test Registration of Extension</title>
  <!-- for google web fonts -->
  <link rel=""preconnect"" href=""https://fonts.googleapis.com"">
  <link rel=""preconnect"" href=""https://fonts.gstatic.com"" crossorigin>
  <link rel=""stylesheet"" href=""https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap"" >

  <style>
  /* for remote fonts */
  @font-face {
    font-family: 'CustomFont';
    src: url('https://stage.gradfinale.co.uk/tcpdf/fonts/avgr65wttf.ttf');
  }
  p#p1 { font-family: CustomFont, sans-serif; }

  /* for local fonts */
  @font-face {
    font-family: 'LocalCustomFont';
    src: local('Arial');
  }
  p#p3 { font-family: LocalCustomFont, sans-serif; }
  </style>
</head>
<body>
	<h1>This is Delayed Render Test!</h1>
	<p style=""font-family: Roboto, monospace;"">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque ligula venenatis erat <strong>scelerisque</strong> auctor.</p>
	<p id=""p1"">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque ligula venenatis erat <strong>scelerisque</strong> auctor.</p>
	<p id=""p3"">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque ligula venenatis erat <strong>scelerisque</strong> auctor.</p>
</body>
</html>)";

ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.AllFontsLoaded(10000);

PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

欲了解有關 PDF 字體管理的更多資訊,包括嵌入和子設定選項,請查閱PDF 字體管理指南

如何使用自定義 JavaScript 觸發 PDF 渲染?

為了更好地控制渲染過程,您可以指定在渲染 PDF 文件之前執行的自定義 JavaScript 函式。 這使您可以執行必要的任務或檢查,再開始渲染過程,讓您控制何時觸發渲染。

在 JavaScript 中,函式 window.ironpdf.notifyRender() 觸發渲染任務。 一旦調用 notifyRender(),渲染過程就會開始。 您可以控制何時調用該函式。

using IronPdf;

string html = @"<!DOCTYPE html>
<html>
<body>
<h1>Testing</h1>
<script type='text/javascript'>

// Set delay
setTimeout(function() {
    window.ironpdf.notifyRender();
}, 1000);

</script>
</body>
</html>";

ChromePdfRenderOptions renderingOptions = new ChromePdfRenderOptions();

// Set rendering to wait for the notifyRender function
renderingOptions.WaitFor.JavaScript(5000);

PdfDocument pdf = ChromePdfRenderer.StaticRenderHtmlAsPdf(html, renderingOptions);
JavaScript

當與 AJAX 請求結合使用,或確保動態生成的內容在渲染之前完全載入時,這種方法效果很好。 有關高級 JavaScript 場景,請參閱在 PDF 中執行自定義 JavaScript指南。

如何在渲染之前等待特定的 HTML 元素?

使用此選項,渲染過程會等待特定的 HTML 元素,例如元素 ID、名稱、標籤名和查詢選擇器來定位元素。 此功能在處理單頁應用程式(SPAs)或異步載入的內容時很有幫助。

如何通過 ID 等待元素?

在下方程式碼範例中,渲染會等待特定元素 ID。

using IronPdf;

string htmlContent = @"
<!DOCTYPE html>
<html lang=""en"">
<head>
  <meta charset=""UTF-8"">
  <title>Delayed render tests</title>
  <script type=""text/javascript"">
	setTimeout(function() {
		var h1Tag = document.createElement(""h1"");
		h1Tag.innerHTML = ""bla bla bla"";
		h1Tag.setAttribute(""id"", ""myid"");

        var block = document.querySelector(""div#x"");
		block.appendChild(h1Tag);
	}, 1000);
  </script>
</head>
<body>
	<h1>This is Delayed Render Test!</h1>
    <div id=""x""></div>
</body>
</html>";

ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.HtmlElementById("myid", 5000);

PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

如何通過姓名屬性等待元素?

在下方程式碼範例中,渲染過程會等待特定元素名稱。

using IronPdf;

string htmlContent = @"
<!DOCTYPE html>
<html lang=""en"">
<head>
  <meta charset=""UTF-8"">
  <title>Delayed render tests</title>
  <script type=""text/javascript"">
	setTimeout(function() {
		var h1Tag = document.createElement(""h1"");
		h1Tag.innerHTML = ""bla bla bla"";
		h1Tag.setAttribute(""id"", ""myid"");

        var block = document.querySelector(""div#x"");
		block.appendChild(h1Tag);
	}, 1000);
  </script>
</head>
<body>
	<h1>This is Delayed Render Test!</h1>
    <div id=""x""></div>
</body>
</html>";

ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.HtmlElementById("myid", 5000);

PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

如何通過標籤名等待元素?

在下方程式碼範例中,渲染過程會等待特定元素的標籤名。

using IronPdf;

string htmlContent = @"
<!DOCTYPE html>
<html lang=""en"">
<head>
  <meta charset=""UTF-8"">
  <title>Delayed render tests</title>
  <script type=""text/javascript"">
	setTimeout(function() {
		var newElem = document.createElement(""h2"");
		newElem.innerHTML = ""bla bla bla"";

        var block = document.querySelector(""div#x"");
		block.appendChild(newElem);
	}, 1000);
  </script>
</head>
<body>
	<h1>This is Delayed Render Test!</h1>
    <div id=""x""></div>
</body>
</html>";

ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.HtmlElementByTagName("h2", 5000);

PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

如何使用查詢選擇器等待元素?

在下方程式碼範例中,渲染過程會等待使用查詢選擇器選擇的元素。 HtmlQuerySelector 方法等待有 img tagid of 'myid'class of 'blablastyle'

using IronPdf;

string htmlContent = @"
<!DOCTYPE html>
<html lang=""en"">
<head>
  <meta charset=""UTF-8"">
  <title>Test Registration of Extension</title>
  <script type=""text/javascript"">
	setTimeout(function() {
		var img = document.createElement(""img"");
		img.onload = function() {
			img.setAttribute(""id"", ""myid"");
			img.setAttribute(""class"", ""blablastyle"");
			var block = document.getElementById(""x"");
			block.appendChild(img);
		};
		img.src = ""https://www.w3schools.com/images/picture.jpg"";	// .src after .onload to ignore cached, if any
	}, 1000);
  </script>
</head>
<body>
	<h1>This is Delayed Render Test!</h1>
    <div id=""x""></div>
</body>
</html>";

ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("img#myid.blablastyle", 5000);

PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

我最喜歡的程式庫是IronPDF。它允許快速高效地操作PDF文件。它還有許多有價值的功能,例如導出到PDF/A格式和數位簽署PDF文件。

Milan Jovanovic

Microsoft MVP

查看案例研究

IronOCR意味著我們每年可以從手動處理中節省$40,000,同時提高生產力,釋放資源以進行高影響的任務。我會強烈推薦它。

Brent Matzelle

首席技術官,OPYN

查看案例研究

IronSuite在我們的運營中扮演著至關重要的角色。這些工具增加了包括建立平面圖和改善庫存管理在內的業務效率。

David Jones

首席軟體工程師,Agorus Build

查看案例研究

如何等待網路活動完成?

在渲染為資源、資料或 API 呼叫而執行的網頁時,確保所有網路活動完成後再生成 PDF。 IronPDF 提供了幾種方法來處理不同的網路情況。

什麼時候應等待零網路活動?

這種型別的網路空閒等待直到沒有網路活動,通常表明內容已經完全載入。 這適合沒有長輪詢網路請求或持續網路活動的單頁應用程式(SPAs)或簡單網頁。

一旦在 至少 500ms 內沒有持續的網路活動,渲染過程就開始。

using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render unless there has been no network activity for at least 500ms
renderer.RenderingOptions.WaitFor.NetworkIdle0();

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>testing</h1>");

什麼時候應允許兩次網路活動?

NetworkIdle2 方法適合有長輪詢網路請求或心跳信號的網頁應用程式或網頁。 通常涉及 1-2 個請求。 即使這些請求正在進行中,它們不會失效觸發網路空閒事件,因為具有最多兩個是可以接受的。

在啟動渲染過程之前,應該有 至多兩個網路活動 在下方的 至少 500ms 內。 此選項提供快速配置,以處理固定數量的網路活動。

using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render unless there are at most 2 network activities for at least 500ms
renderer.RenderingOptions.WaitFor.NetworkIdle2();

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>testing</h1>");

如何自訂網路活動閾值?

當涉及多個網路請求時,您可以自訂網路空閒持續時間允許的網路請求數量,這不會失效網路空閒事件。 此選項適合有特定需求不符合前兩種方法的網頁應用程式或網頁。 此自訂可以在不同情況下滿足廣泛的使用案例。

using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render unless there are at most 5 network activities for at least 1000ms
renderer.RenderingOptions.WaitFor.NetworkIdle(1000, 5);

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>testing</h1>");

當處理保留持續連接或有可預測背景網路活動模式的複雜 Web 應用程式時,這種定制級別非常有用。

如何設置最大等待時間?

NetworkIdle0NetworkIdle2 方法允許您設定最大等待時間,以確保等待不會無限期。maxWaitTime 參數用於此目的。 如果預期條件從未發生,這可以防止您的應用程式無限期掛起。

所有指定的時間值都是以毫秒為單位。

在實施這些等待策略時,在確保完整內容載入與保持合理性能之間取得平衡。 對於需要精確時間控制的應用程式,探索非同步 PDF 生成技術

準備好瞭解您還可以做什麼嗎? 請查看此教學頁面:其他功能或探索使用 IronPDF 建立 PDF來獲取更高級的技術。

常見問題

什麼是 WaitFor 課堂及為什麼我應該使用它?

IronPDF 中的 WaitFor 課堂允許開發者延遲 PDF 渲染,直到所有資產、字體和 JavaScript 載入完成。這可以防止不完整的渲染,並確保複雜的網頁在轉換為 PDF 之前完全載入,從而產生更準確和完整的 PDF 文件。

有哪些不同的 WaitFor 選項可用?

IronPDF 的 WaitFor 課堂提供幾個選項:PageLoad(預設立即渲染)、RenderDelay(以毫秒為單位的自定義延遲)、Fonts(等待所有字體載入)、JavaScript(透過 JavaScript 函式觸發渲染)、HTML 元素(根據 ID、名稱、標籤或查詢選擇器等待特定元素),以及 NetworkIdle(等待網路活動停止)。

如何在 PDF 渲染之前新增自定義延遲?

您可以使用 IronPDF 中的 RenderDelay 方法新增自定義延遲。只需指定以毫秒為單位的延遲:`new ChromePdfRenderer { RenderingOptions = { WaitFor = WaitFor.RenderDelay(3000) } }`。這特別適用於需要額外執行時間的 JavaScript 密集內容。

我可以在渲染之前等待特定的 HTML 元素載入嗎?

是的,IronPDF 允許您使用元素 ID、名稱、標籤名稱或查詢選擇器等待特定的 HTML 元素。這確保在 PDF 轉換開始之前,頁面上的關鍵內容已存在,防止最終 PDF 文件中元素遺失。

什麼是 NetworkIdle,我應該什麼時候使用它?

IronPDF 中的 NetworkIdle 在渲染 PDF 之前等候網路活動停止。您可以將其設置為等待 0、2 或自定義數量的網路連接。這非常適合通過 AJAX 調用或其他非同步網路請求載入內容的頁面。

如何從 JavaScript 觸發 PDF 渲染?

IronPDF 的 WaitFor JavaScript 選項允許您從 JavaScript 函式觸發渲染過程。這讓您可以完全控制 PDF 生成的時間,非常適合單頁應用程式或需要精確時間控制的複雜 JavaScript 驅動網站。

How can I set a maximum waiting time for rendering a PDF in IronPDF?

You can set a maximum waiting time when using methods like `JavaScript`, `NetworkIdle`, `NetworkIdle0`, and `NetworkIdle2` in IronPDF. This prevents indefinite waiting by specifying a maximum duration to wait for conditions to be met.

Is it possible to customize network activity thresholds in IronPDF?

Yes, IronPDF allows you to customize the number of allowable network activities and the duration before considering the network idle. This flexibility is particularly useful for handling complex web applications with persistent network connections.

What happens when using the default `PageLoad` method in IronPDF?

The `PageLoad` method in IronPDF initiates rendering immediately after the HTML page finishes loading, without any delays. This approach is best for simple HTML content without additional asynchronous resources.

How does IronPDF handle PDF rendering for JavaScript-heavy content?

For JavaScript-heavy content, IronPDF allows setting explicit delays and waiting for specific JavaScript events to ensure all scripts and dynamic elements are fully processed and available before rendering the PDF.

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

準備開始了嗎?

Nuget Downloads 21,105,021版本:2026.9剛剛發布

立即獲取免費

立即獲取 30天試用金鑰

bullet_checked無需信用卡或註冊帳號
bullet_test在生產
環境中進行測試,且不顯示浮水印
bullet_calendar30 天全
功能產品
bullet_support試用期間提供 24/5 技術
支援
立即獲取您的免費30天試用密鑰
不需要信用卡或建立賬戶
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.9

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999

有問題嗎?聯絡我們的開發團隊。

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

OR
bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.9

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999