Jak używać WaitFor do opóźniania renderowania PDF w C#

Using the C# WaitFor Class to Delay PDF Rendering

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

Klasa C# WaitFor w IronPDF pomaga programistom opóźnić renderowanie PDF do momentu załadowania wszystkich zasobów, czcionek i JavaScript, aby uniknąć niekompletnych renderów, używając metod takich jak RenderDelay, NetworkIdle oraz wyzwalaczy JavaScript.

Szybki start: Użycie WaitFor do poprawy renderowania PDF

Funkcja WaitFor w IronPDF pozwala programistom poprawić renderowanie PDF poprzez zarządzanie asynchronicznym czasem. Ustawiając opcje, takie jak RenderDelay, można zapewnić, że wszystkie zasoby i skrypty zostaną załadowane przed konwersją, co zapobiega tworzeniu niekompletnych dokumentów PDF. Ten przewodnik pokazuje, jak wdrożyć WaitFor w swoich projektach w celu zapewnienia dokładnego i efektywnego renderowania.

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

Czym jest klasa WaitFor i jakie są jej opcje?

Do renderowania PDF z optymalną wydajnością, klasa WaitFor poprawia proces renderowania PDF. Obiekt WaitFor z RenderOptions oferuje kilka opcji:

  • PageLoad: Domyślne renderowanie bez czekania.
  • RenderDelay: Określa arbitralny czas oczekiwania.
  • Fonts: Czeka do momentu załadowania wszystkich czcionek.
  • JavaScript: Wyzwala renderowanie za pomocą funkcji JavaScript.
  • HTML elements: Czeka na określone elementy HTML, takie jak identyfikatory elementów, nazwy, nazwy tagów i selektory zapytań w celu wskazania elementów.
  • NetworkIdle: Czeka na bezczynność sieci (0, 2 lub dowolną ilość).

Te funkcje działają podczas konwertowania ciągów HTML na PDF za pomocą IronPDF, plików HTML na PDF za pomocą IronPDF i adresów URL sieci web na PDF za pomocą IronPDF.

Jak renderuję PDFy natychmiast bez czekania?

Domyślnie renderowanie odbywa się natychmiast po załadowaniu strony. Metoda PageLoad nie musi być wywoływana do normalnego renderowania. To podejście działa dobrze dla prostych treści HTML bez złożonego JavaScript lub zewnętrznych zasobów.

: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>");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

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

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

Jak mogę dodać niestandardowe opóźnienie przed renderowaniem PDF?

Kiedy wymagane jest określone opóźnienie przed renderowaniem PDF, można ustawić arbitralną liczbę milisekund jako opóźnienie. To zapewnia elastyczność w zakresie specyficznych wymagań czasowych, szczególnie podczas pracy z treściami bogatymi w JavaScript.

Ta opcja działa tak samo jak stare wdrożenie używające właściwości RenderingOptions.RenderDelay. Jednakże, stara właściwość została przestarzała. Użyj nowego 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

Mechanizm opóźnienia jest użyteczny, kiedy HTML zawiera animacje, zawartość wczytywaną sekwencyjnie lub wymaga czasu do generowania dynamicznej zawartości. Dla złożonych scenariuszy renderowania, zapoznaj się z opcje renderowania niestandardowe.

Jak czekam na załadowanie wszystkich czcionek przed renderowaniem?

Metoda AllFontsLoaded w klasie WaitFor wstrzymuje renderowanie PDF do momentu załadowania wszystkich czcionek z zewnętrznych źródeł, takich jak Google Fonts. To zapewnia, że finalny PDF zawiera wszystkie wymagane czcionki, zachowując zamierzony wygląd typografii i wizualny. Ta funkcja utrzymuje profesjonalną jakość wyjścia 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);
Imports IronPdf

Dim htmlContent As String = "
<!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>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.WaitFor.AllFontsLoaded(10000)

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
$vbLabelText   $csharpLabel

Aby uzyskać więcej informacji na temat zarządzania czcionkami w PDFach, w tym opcji osadzania i podzbiorów, sprawdź przewodnik na temat zarządzania czcionkami w PDFach.

Jak wyzwalam renderowanie PDF za pomocą niestandardowego JavaScript?

Dla większej kontroli nad procesem renderowania, można wskazać niestandardową funkcję JavaScript, która jest wykonywana przed renderowaniem dokumentu PDF. To pozwala na wykonanie niezbędnych zadań lub kontroli przed rozpoczęciem procesu renderowania, dając kontrolę nad momentem wyzwolenia renderowania.

W JavaScript funkcja window.ironpdf.notifyRender() wyzwala zadanie renderowania. Po wywołaniu notifyRender(), proces renderowania rozpoczyna się. Programista kontroluje moment wywołania funkcji.

: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

To podejście jest skuteczne, gdy jest stosowane z żądaniami AJAX lub kiedy należy zapewnić pełne załadowanie dynamicznie generowanej zawartości przed renderowaniem. Dla zaawansowanych scenariuszy JavaScript, zobacz przewodnik na temat wykonywania niestandardowego JavaScript w PDFach.

Jak mogę czekać na określone elementy HTML przed renderowaniem?

Dzięki tej opcji proces renderowania czeka na określone elementy HTML, takie jak identyfikatory elementów, nazwy, nazwy tagów i selektory zapytań w celu wskazania elementów. Ta funkcja jest pomocna przy pracy z Aplikacjami Jednostronicowymi (SPA) lub zawartością ładowaną asynchronicznie.

Jak czekam na element na podstawie identyfikatora?

Renderowanie czeka na określony identyfikator elementu w poniższym przykładzie kodu.

: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);
Imports IronPdf

Dim htmlContent As String = "
<!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>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.WaitFor.HtmlElementById("myid", 5000)

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
$vbLabelText   $csharpLabel

Jak czekam na element na podstawie atrybutu nazwy?

Proces renderowania czeka na określoną nazwę elementu w poniższym przykładzie kodu.

: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);
Imports IronPdf

Dim htmlContent As String = "
<!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>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.WaitFor.HtmlElementById("myid", 5000)

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
$vbLabelText   $csharpLabel

Jak czekam na elementy na podstawie nazwy tagu?

Proces renderowania czeka na określoną nazwę tagu elementu w poniższym przykładzie kodu.

: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);
Imports IronPdf

Dim htmlContent As String = "
<!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>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.WaitFor.HtmlElementByTagName("h2", 5000)

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
$vbLabelText   $csharpLabel

Jak używamy selektorów zapytań do czekania na elementy?

Proces renderowania czeka na element wybrany za pomocą selektora zapytania w poniższym przykładzie kodu. Metoda HtmlQuerySelector czeka na img tag z id of 'myid' i class of 'blablastyle'.

: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);
Imports IronPdf

Dim htmlContent As String = "
<!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>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.WaitFor.HtmlQuerySelector("img#myid.blablastyle", 5000)

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
$vbLabelText   $csharpLabel

Jak czekam na zakończenie aktywności sieciowej?

Podczas renderowania stron internetowych, które wykonują żądania sieciowe w celu zasobów, danych lub wywołań API, upewnij się, że wszystkie aktywności sieciowe zostały zakończone przed wygenerowaniem PDF. IronPDF zapewnia kilka metod obsługi różnych scenariuszy sieciowych.

Gdy należy czekać na zerową aktywność sieciową?

Ten typ bezczynności sieciowej czeka, aż nie będzie żadnej aktywności sieciowej, co zazwyczaj wskazuje na pełne załadowanie treści. To pasuje do Aplikacji Jednostronicowych (SPA) lub prostych stron internetowych bez długoprotujących żądań sieciowych lub bieżącej aktywności sieciowej.

Proces renderowania rozpoczyna się, gdy nie było żadnej trwającej aktywności sieciowej przez co najmniej 500 ms.

: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>");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

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

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

Kiedy należy dopuścić dwie aktywności sieciowe?

Metoda NetworkIdle2 pasuje do aplikacji internetowych lub stron internetowych z długoprotującymi żądaniami sieciowymi lub heartbeat ping. Zazwyczaj 1-2 żądania są zaangażowane. Nawet jeśli te żądania są w toku, nie unieważniają one wyzwalania zdarzenia bezczynności sieci, ponieważ dopuszczalne jest posiadanie maksymalnie dwóch.

Przed rozpoczęciem procesu renderowania powinno być maksymalnie dwie aktywności sieciowe pozostające przez co najmniej 500 ms. Ta opcja zapewnia szybkie skonfigurowanie do obsługi ustalonej liczby aktywności sieciowych.

: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>");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

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

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

Jak dostosować progi aktywności sieciowej?

Kiedy zaangażowanych jest wiele żądań sieciowych, można dostosować zarówno czas bezczynności sieciowej, jak i liczbę dozwolonych żądań sieciowych, które nie unieważniają zdarzenia bezczynności sieciowej. Ta opcja pasuje do aplikacji internetowych lub stron internetowych z określonymi wymaganiami, które nie pasują do poprzednich dwóch metod. To dostosowanie obejmuje szeroką gamę przypadków użycia w różnych okolicznościach.

: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

Ten poziom dostosowania jest cenny podczas pracy z złożonymi aplikacjami internetowymi, które utrzymują trwałe połączenia lub mają przewidywalne wzorce aktywności sieciowej w tle.

Jak ustawić maksymalny czas oczekiwania?

Metody JavaScript, NetworkIdle, NetworkIdle0 i NetworkIdle2 pozwalają ustawić maksymalny czas oczekiwania, aby upewnić się, że czekanie nie będzie nieokreślone. Parametr maxWaitTime tych metod spełnia tę funkcję. To zapobiega przerwaniu pracy aplikacji na nieokreślony czas, jeśli oczekiwane warunki nigdy nie wystąpią.

Wszystkie określone wartości czasu mają jednostkę milisekund.

Podczas wdrażania tych strategii oczekiwania zachowaj równowagę między zapewnieniem pełnego załadowania zawartości a utrzymaniem rozsądnej wydajności. Dla aplikacji wymagających precyzyjnej kontroli czasu, zapoznaj się z asynchronicznymi technikami generowania PDF.

Gotowy, aby sprawdzić, co jeszcze można zrobić? Sprawdź stronę z samouczkiem tutaj: Dodatkowe funkcje lub zapoznaj się z tworzeniem PDF z IronPDF dla bardziej zaawansowanych technik.

Często Zadawane Pytania

What is the WaitFor class and why should I use it?

The WaitFor class in IronPDF allows developers to delay PDF rendering until all assets, fonts, and JavaScript have finished loading. This prevents incomplete renders and ensures that complex web pages are fully loaded before converting to PDF, resulting in more accurate and complete PDF documents.

What are the different WaitFor options available?

IronPDF's WaitFor class offers several options: PageLoad (default immediate rendering), RenderDelay (custom delay in milliseconds), Fonts (waits for all fonts to load), JavaScript (triggers render via JavaScript function), HTML elements (waits for specific elements by ID, name, tag, or query selector), and NetworkIdle (waits for network activity to cease).

How do I add a custom delay before PDF rendering?

You can add a custom delay using the RenderDelay method in IronPDF. Simply specify the delay in milliseconds: `new ChromePdfRenderer { RenderingOptions = { WaitFor = WaitFor.RenderDelay(3000) } }`. This is particularly useful for JavaScript-heavy content that needs extra time to execute.

Can I wait for specific HTML elements to load before rendering?

Yes, IronPDF allows you to wait for specific HTML elements using element IDs, names, tag names, or query selectors. This ensures that critical content is present on the page before the PDF conversion begins, preventing missing elements in your final PDF document.

What is NetworkIdle and when should I use it?

NetworkIdle in IronPDF waits for network activity to cease before rendering the PDF. You can set it to wait for 0, 2, or a custom number of network connections. This is ideal for pages that load content dynamically through AJAX calls or other asynchronous network requests.

How can I trigger PDF rendering from JavaScript?

IronPDF's WaitFor JavaScript option allows you to trigger the render process from a JavaScript function. This gives you complete control over when the PDF generation occurs, making it perfect for single-page applications or complex JavaScript-driven websites where you need precise timing control.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 18,135,201 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPdf
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.