如何使用 WaitFor 延遲 C# PDF 渲染

How to Use the WaitFor Class to Delay C# PDF Rendering

This article was translated from English: Does it need improvement?
Translated
View the article in English

在渲染 PDF 文檔時,常見的問題是渲染過程在 JavaScript 的必要資產和動畫載入完成之前發生。 這可能導致 PDF 文檔的不完整或不正確渲染。 最初,我們通過允許用戶設置任意延遲作為解決方案來解決此問題。 然而,依賴任意延遲並不是一個可靠或高效的方法。

快速入門:使用 WaitFor 增強 PDF 渲染

IronPDF 的 WaitFor 功能允許開發人員通過管理異步時機來優化 PDF 渲染。 通過設置像 RenderDelay 的選項,您可以確保在轉換之前所有資產和腳本都載入完成,以防止不完整的 PDF 文檔。 本指南將展示如何輕鬆地在項目中實施 WaitFor,以實現精確和高效的渲染。

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. Copy and run this code snippet.

    new IronPdf.ChromePdfRenderer { RenderingOptions = { WaitFor = IronPdf.WaitFor.RenderDelay(3000) } }
        .RenderUrlAsPdf("https://example.com")
        .SaveAs("output.pdf");
  3. Deploy to test on your live environment

    Start using IronPDF in your project today with a free trial
    arrow pointer
class="hsg-featured-snippet">

最低工作流程(5 步驟)

  1. 下載 C# IronPDF 庫以延遲 PDF 渲染
  2. 從 HTML 字符串、文件或網頁 URL 生成 PDF 文檔
  3. 利用 JavaScript 方法 WaitFor 從 JavaScript 函數觸發渲染
  4. 根據網絡活動數量延遲渲染
  5. 等待特定的 HTML 元素以及所有字體都載入

WaitFor 類

為了提供更穩健的解決方案,我們實施了一個增強 PDF 渲染過程的 WaitFor 類。 從 RenderOptions 中的 WaitFor 對象提供多個選項,包括:

  • PageLoad:默認渲染無需等待。
  • RenderDelay:設置任意等待時間。
  • Fonts:等待直到所有字體載入完成。
  • JavaScript:用 JavaScript 函數觸發渲染。
  • HTML elements:等待特定的 HTML 元素,如元素 ID、名稱、標籤名稱和查詢選擇器來定位元素。
  • NetworkIdle:等待網絡空閒(0、2 或自定義數量)。

These features are available for converting HTML strings to PDF with IronPDF, HTML files to PDF with IronPDF, and web URLs to PDF with IronPDF. 讓我們來探索此新功能的關鍵方面。

默認立即渲染範例

默認情況下,渲染過程在頁面載入完成後立即發生。 如果您想正常渲染,則不需要調用 PageLoad 方法。

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-pageload.cs
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>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

自定義渲染延遲範例

在需要在渲染 PDF 之前延遲的情況下,您可以設置任意的毫秒數作為延遲。 這提供靈活性以適應任何特定時間要求。

此選項與舊實現中使用 RenderingOptions.RenderDelay 屬性方式相同。 然而,舊屬性已被棄用,強烈建議使用新的 API,RenderingOptions.WaitFor.RenderDelay

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-delay-time.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

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

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

Private renderer As New ChromePdfRenderer()

' Render after 3000ms
renderer.RenderingOptions.WaitFor.RenderDelay(3000)

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>testing</h1>")
$vbLabelText   $csharpLabel

所有字體載入範例

WaitFor 類中的 AllFontsLoaded 方法允許 PDF 渲染過程暫停,直到從外部來源如 Google 字體或其他服務器載入所有字體完成。 這確保最終的 PDF 包含所有所需字體,保留文檔所需的字體和視覺外觀。

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-all-fonts.cs
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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

自定義 Javascript 執行範例

為了更好地控制渲染過程,我們的功能允許您指定需要在渲染 PDF 文檔之前執行的自定義 Javascript 函數。 這使您能夠在開始渲染過程之前執行任何必要的任務或檢查。 用戶可以控制何時觸發渲染。

在 JavaScript 中,使用函數 window.ironpdf.notifyRender() 來觸發渲染任務。 一旦 notifyRender() 被調用,渲染過程將開始。 您有完全的控制權決定何時調用該函數。

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-javascript.cs
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

HTML 元素範例

有了此選項,渲染過程可以設置為等待特定的 HTML 元素,例如元素 ID、名稱、標籤名稱,甚至可以使用查詢選擇器來定位元素。

等待元素 ID

在下面的代碼範例中,渲染將等待特定的元素 ID。

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-html-element-id.cs
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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

等待元素名稱

在下面的代碼範例中,渲染過程將等待特定的元素名稱。

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-html-element-name.cs
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(""name"", ""myName"");

        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.HtmlElementByName("myName", 5000);

PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

等待元素標籤名稱

在下面的代碼範例中,渲染過程將等待特定的元素標籤名稱。

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-html-element-tag-name.cs
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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

使用查詢選擇器

在下面的代碼範例中,渲染過程將等待查詢選擇器所選的元素。 HtmlQuerySelector 方法會等待帶有 id 為 'myid'類為 'blablastyle'img 標籤

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-html-element-query-selector.cs
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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

網絡空閒範例

無網絡活動

這種類型的網絡空閒允許您等待直到沒有網絡活動,這通常表明內容已完全載入。 這適合於單頁應用程序 (SPA) 或不包含任何長輪詢網絡請求或持續網絡活動的簡單網頁。

渲染過程將僅在至少 500 毫秒無進行中的網絡活動後開始。

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-network-idle-0.cs
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>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

允許兩個網絡活動

NetworkIdle2 方法適用於具有長輪詢網絡請求或心跳訊號的網絡應用程序或網頁。 通常會涉及 1-2 個請求。 在此情況下,即使這些請求正在進行中,它們也不會被認為無效地觸發網絡空閒事件,因為最多允許兩個。

在開始渲染過程之前,應該剩下最多兩個網絡活動,並保持至少 500 毫秒。 此選項提供了一個快速配置來處理固定數量的網絡活動。

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-network-idle-2.cs
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>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

自定義網絡活動允許

在涉及多個網絡請求的情況下,您可以靈活定制網絡空閒持續時間允許的網絡請求數量,不會使網絡空閒事件失效。 此選項適用於具有特定要求的網絡應用程序或網頁,不符合前兩種方法。 通過提供這種定制,我們確保在不同情況下解決廣泛的用例。

:path=/static-assets/pdf/content-code-examples/how-to/waitfor-customize-network.cs
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>");
Imports IronPdf

Private renderer As New ChromePdfRenderer()

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

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>testing</h1>")
$vbLabelText   $csharpLabel

設置最大等待時間

此外,JavaScriptNetworkIdleNetworkIdle0NetworkIdle2 方法還允許您設置最大等待時間,以確保等待不會無限期。這些方法的 maxWaitTime 參數可用於此目的。

請注意所有指定的時間值被認為是以毫秒為單位。

準備看看您還能做哪些其他事情嗎? 查看我們的教程頁面:附加功能

常見問題解答

PDF渲染庫中的WaitFor類別是什麼?

IronPDF 中的 WaitFor 類別用於管理 PDF 渲染期間非同步操作的計時,確保在渲染文件之前載入所有必要的資源和 JavaScript 動畫。

如何延遲PDF渲染,直到頁面所有資源都載入完畢?

在 IronPDF 中,您可以使用 WaitFor 類別選項,例如 PageLoad、RenderDelay 或 AllFontsLoaded,以確保在渲染 PDF 文件之前載入所有必要的頁面資源。

WaitFor 類別中有哪些選項可用於管理渲染延遲?

IronPDF 的 WaitFor 類別包含 PageLoad、RenderDelay、Fonts、JavaScript、HTML 元素和 NetworkIdle 等選項,每個選項都允許您在渲染 PDF 之前等待特定條件。

WaitFor 類別中的 PageLoad 選項如何影響 PDF 渲染?

IronPDF 的 WaitFor 類別中的 PageLoad 選項可讓 PDF 在頁面載入完成後立即渲染,無需任何額外的等待。

如何設定渲染 PDF 前的延遲時間?

使用 IronPDF,您可以利用 WaitFor 類別中的 RenderDelay 選項來指定任意毫秒數來延遲渲染,以滿足特定的時間需求。

AllFontsLoaded 方法在 PDF 渲染中扮演什麼角色?

IronPDF 中的 AllFontsLoaded 方法確保 PDF 渲染過程暫停,直到所有來自外部來源的字體完全加載,從而保證最終的 PDF 包含所有必需的字體。

JavaScript 能否用於控制 PDF 渲染時間?

是的,在 IronPDF 中,您可以使用 WaitFor 類別中的自訂 JavaScript 函數來控制何時觸發 PDF 渲染過程。

WaitFor 類別中的 NetworkIdle 選項有什麼作用?

IronPDF 的 WaitFor 類別中的 NetworkIdle 選項會延遲 PDF 渲染,直到指定的網路活動停止,從而確保所有內容完全載入。

是否可以在 PDF 渲染中自訂網路活動設定?

IronPDF 可讓您在 WaitFor 類別中自訂網路活動設置,包括網路空閒持續時間和渲染期間允許的網路請求數。

如何避免PDF渲染過程中出現無限期等待?

您可以使用 IronPDF 的 WaitFor 類別中的 maxWaitTime 參數,透過 JavaScript、NetworkIdle、NetworkIdle0 和 NetworkIdle2 等方法設定最大等待時間。

WaitFor 功能是否完全相容於 .NET 10?

是的-IronPDF 的 WaitFor 類別在 .NET 10 上可以無縫運作。 IronPDF 與 .NET 10 專案完全相容,因此在面向 .NET 10 時,您可以直接使用所有 WaitFor 選項,例如 PageLoad、RenderDelay、NetworkIdle 等,無需任何修改。

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'name'

Filename: sections/author_component.php

Line Number: 18

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 18
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'title'

Filename: sections/author_component.php

Line Number: 38

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 38
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: Illegal string offset 'comment'

Filename: sections/author_component.php

Line Number: 48

Backtrace:

File: /var/www/ironpdf.com/application/views/main/sections/author_component.php
Line: 48
Function: _error_handler

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 63
Function: view

File: /var/www/ironpdf.com/application/views/products/sections/three_column_docs_page_structure.php
Line: 64
Function: main_view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/views/products/how-to/index.php
Line: 2
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Howto.php
Line: 31
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

準備好開始了嗎?
Nuget 下載 16,154,058 | 版本: 2025.11 剛剛發布