Comment utiliser WaitFor pour retarder le rendu PDF C#

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

Lors du rendu de documents PDF, un problème courant se pose lorsque le processus de rendu se produit avant le chargement de tous les éléments et animations JavaScript nécessaires. Cela peut entraîner un rendu incomplet ou incorrect du document PDF. Initialement, nous avons résolu ce problème en permettant à l'utilisateur de définir un délai arbitraire comme solution. Cependant, compter sur un délai arbitraire n'est pas une approche fiable ou efficace.

Guide de démarrage rapide : Utilisation de WaitFor pour améliorer le rendu PDF

La fonctionnalité WaitFor d'IronPDF permet aux développeurs d'optimiser le rendu PDF en gérant le minutage asynchrone. En définissant des options comme RenderDelay, vous pouvez vous assurer que tous les éléments et scripts sont chargés avant la conversion, évitant ainsi des documents PDF incomplets. Ce guide montre comment implémenter facilement WaitFor dans vos projets pour un rendu précis et efficace.

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">

Flux de travail minimal (5 étapes)

  1. Téléchargez la bibliothèque C# IronPDF pour retarder le rendu PDF
  2. Générez un document PDF à partir d'une chaîne HTML, d'un fichier ou d'une URL web
  3. Utilisez la méthode JavaScript de WaitFor pour déclencher le rendu à partir d'une fonction JavaScript
  4. Retardez le rendu en fonction du nombre d'activités réseau
  5. Attendez que des éléments HTML spécifiques ainsi que toutes les polices soient chargées

La classe WaitFor

Pour fournir une solution plus robuste, nous avons implémenté une classe WaitFor qui améliore le processus de rendu PDF. L'objet WaitFor de RenderOptions offre plusieurs options, y compris :

  • PageLoad: Rendu par défaut sans attente.
  • RenderDelay: Définir un temps d'attente arbitraire.
  • Fonts: Attend que toutes les polices soient chargées.
  • JavaScript: Déclenche le rendu avec une fonction JavaScript.
  • Eléments HTML: Attend des éléments HTML spécifiques, tels que les identifiants d'éléments, les noms, les noms de balises et les sélecteurs de requêtes pour cibler des éléments.
  • NetworkIdle: Attente de l'inactivité réseau (0, 2 ou un montant personnalisé).

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. Explorons les aspects clés de cette nouvelle fonctionnalité.

Exemple de rendu immédiat par défaut

Par défaut, le processus de rendu se produit immédiatement après que la page ait fini de charger. La méthode PageLoad n'a pas besoin d'être appelée si vous souhaitez rendre normalement.

: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

Exemple de délai de rendu personnalisé

Dans les situations où un délai spécifique est requis avant le rendu du PDF, vous pouvez définir un nombre arbitraire de millisecondes comme délai. Cela offre une flexibilité pour satisfaire les exigences de temps spécifiques.

Cette option fonctionne de la même manière que l'ancienne implémentation utilisant la propriété RenderingOptions.RenderDelay. Cependant, l'ancienne propriété a été dépréciée, et il est fortement recommandé d'utiliser la nouvelle 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

Exemple de chargement de toutes les polices

La méthode AllFontsLoaded dans la classe WaitFor permet au processus de rendu PDF de faire une pause jusqu'à ce que toutes les polices soient chargées à partir de sources externes comme Google Fonts ou d'autres serveurs. Cela garantit que le PDF final inclut toutes les polices requises, préservant la typographie et l'apparence visuelle prévues du document.

: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

Exemple d'exécution JavaScript personnalisé

Pour plus de contrôle sur le processus de rendu, notre fonctionnalité vous permet de spécifier une fonction JavaScript personnalisée qui doit être exécutée avant le rendu du document PDF. Cela vous permet d'effectuer toutes les tâches ou vérifications nécessaires avant d'initier le processus de rendu. Cela donne à l'utilisateur le contrôle sur le moment de déclencher le rendu.

En JavaScript, la fonction window.ironpdf.notifyRender() est utilisée pour déclencher la tâche de rendu. Une fois que notifyRender() est invoqué, le processus de rendu commencera. Vous avez un contrôle total sur le moment où invoquer la fonction.

: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

Exemple d'éléments HTML

Avec cette option, le processus de rendu peut être configuré pour attendre des éléments HTML spécifiques, tels que les identifiants d'éléments, les noms, les noms de balises et même l'utilisation de sélecteurs de requêtes pour cibler des éléments.

Attendre l'ID de l'élément

Dans l'exemple de code ci-dessous, le rendu attendra un ID d'élément spécifique.

: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

Attendre le nom de l'élément

Dans l'exemple de code ci-dessous, le processus de rendu attendra un nom d'élément spécifique.

: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

Attendre le nom de la balise de l'élément

Dans l'exemple de code ci-dessous, le processus de rendu attendra un nom de balise d'élément spécifique.

: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

Utiliser le sélecteur de requêtes

Dans l'exemple de code ci-dessous, le processus de rendu attendra l'élément sélectionné par le sélecteur de requêtes. La méthode HtmlQuerySelector attendra une balise img avec un id de 'monid' et une classe de '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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Exemple d'inactivité réseau

Aucune activité réseau

Ce type d'inactivité réseau vous permet d'attendre jusqu'à ce qu'il n'y ait plus d'activité réseau, ce qui indique généralement que le contenu a été entièrement chargé. C'est adapté pour une application à page unique (SPA) ou une simple page web qui n'a pas de requêtes réseau à long terme ou d'activité réseau continue.

Le processus de rendu ne commencera que lorsqu'il n'y aura aucune activité réseau continue pendant au moins 500ms.

: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

Deux activités réseau autorisées

La méthode NetworkIdle2 convient aux applications web ou aux pages web qui ont des requêtes réseau à long terme ou des signaux de battement de cœur. En général, il y a 1-2 requêtes impliquées. Dans ce cas, même si ces requêtes sont en cours, elles ne seront pas considérées comme invalidant le déclenchement de l'événement d'inactivité réseau, car il est acceptable d'en avoir au maximum deux.

Avant d'amorcer le processus de rendu, il devrait y avoir au plus deux activités réseau restantes pour au moins 500ms. Cette option fournit une configuration rapide pour gérer un nombre fixe d'activités réseau.

: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

Personnaliser l'allocation d'activité réseau

Dans les cas où plusieurs requêtes réseau sont impliquées, vous avez la flexibilité de personnaliser la durée d'inactivité réseau et le nombre de demandes de réseau autorisées qui n'invalident pas le déclenchement de l'événement d'inactivité réseau. Cette option convient aux applications web ou aux pages web ayant des exigences spécifiques qui ne correspondent pas aux deux méthodes précédentes. En fournissant cette personnalisation, nous nous assurons de répondre à un large éventail de cas d'utilisation sous différentes circonstances.

: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

Définir le temps d'attente maximum

En outre, les méthodes JavaScript, NetworkIdle, NetworkIdle0, et NetworkIdle2 vous permettent également de définir un temps d'attente maximum pour s'assurer que l'attente ne sera pas indéfinie. Le paramètre maxWaitTime de ces méthodes peut être utilisé à cette fin.

Veuillez noterToutes les valeurs de temps spécifiées sont considérées en millisecondes.

Prêt à voir ce que vous pouvez faire d'autre ? Consultez notre page de tutoriels ici : Fonctionnalités supplémentaires

Questions Fréquemment Posées

Qu'est-ce que la classe WaitFor dans une bibliothèque de rendu PDF ?

La classe WaitFor d'IronPDF est utilisée pour gérer le timing des opérations asynchrones pendant le rendu PDF, garantissant que tous les atouts et animations JavaScript nécessaires soient chargés avant le rendu du document.

Comment puis-je retarder le rendu PDF jusqu'à ce que toutes les ressources de la page soient chargées ?

Dans IronPDF, vous pouvez utiliser les options de la classe WaitFor comme PageLoad, RenderDelay, ou AllFontsLoaded pour garantir que toutes les ressources nécessaires de la page soient chargées avant de rendre le document PDF.

Quelles options sont disponibles dans la classe WaitFor pour gérer les retards de rendu ?

La classe WaitFor d'IronPDF inclut des options telles que PageLoad, RenderDelay, Fonts, JavaScript, éléments HTML et NetworkIdle, permettant chacune d'attendre des conditions spécifiques avant de rendre le PDF.

Comment l'option PageLoad de la classe WaitFor affecte-t-elle le rendu PDF ?

L'option PageLoad de la classe WaitFor d'IronPDF permet de rendre le PDF immédiatement après le chargement de la page, sans attendre davantage.

Comment puis-je définir un temps de délai spécifique avant de rendre un PDF ?

Avec IronPDF, vous pouvez utiliser l'option RenderDelay de la classe WaitFor pour spécifier un nombre arbitraire de millisecondes pour retarder le rendu, en répondant à des besoins de timing spécifiques.

Quel est le rôle de la méthode AllFontsLoaded dans le rendu PDF ?

La méthode AllFontsLoaded d'IronPDF garantit que le processus de rendu PDF s'arrête jusqu'à ce que toutes les polices provenant de sources externes soient entièrement chargées, assurant que le PDF final inclut toutes les polices requises.

Le JavaScript peut-il être utilisé pour contrôler le timing du rendu PDF ?

Oui, dans IronPDF, vous pouvez utiliser une fonction JavaScript personnalisée dans la classe WaitFor pour contrôler quand le processus de rendu PDF est déclenché.

Que fait l'option NetworkIdle dans la classe WaitFor ?

L'option NetworkIdle de la classe WaitFor d'IronPDF retarde le rendu PDF jusqu'à ce qu'un niveau spécifié d'activité réseau ait cessé, garantissant que tout le contenu soit entièrement chargé.

Est-il possible de personnaliser les paramètres d'activité réseau dans le rendu PDF ?

IronPDF vous permet de personnaliser les paramètres d'activité réseau dans la classe WaitFor, y compris la durée de l'inactivité réseau et le nombre de demandes réseau autorisées pendant le rendu.

Comment puis-je empêcher une attente indéfinie pendant le rendu PDF ?

Vous pouvez définir un temps d'attente maximal dans la classe WaitFor d'IronPDF en utilisant le paramètre maxWaitTime avec des méthodes comme JavaScript, NetworkIdle, NetworkIdle0 et NetworkIdle2.

La fonctionnalité WaitFor est-elle entièrement compatible avec .NET 10 ?

Oui, la classe WaitFor d'IronPDF fonctionne parfaitement avec .NET 10. IronPDF est entièrement compatible avec les projets .NET 10 ; vous pouvez donc utiliser toutes les options de WaitFor, telles que PageLoad, RenderDelay, NetworkIdle, etc., sans aucune modification lors du ciblage de .NET 10.

Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il a une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, documentation et expérience globale.
Prêt à commencer?
Nuget Téléchargements 16,154,058 | Version : 2025.11 vient de sortir