Wie man das WaitFor zur Verzögerung der C# PDF-Generierung nutzt

Verzögern des PDF-Renderings mithilfe der C# WaitFor

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

Die C# WaitFor Klasse in IronPDF hilft Entwicklern, das Rendern von PDFs zu verzögern, bis alle Assets, Schriftarten und JavaScript geladen sind, und verhindert so unvollständige Renderings durch die Verwendung von Methoden wie RenderDelay , NetworkIdle und JavaScript-Triggern.

Schnellstart: PDF-Rendering mit WaitFor verbessern

WaitFor Funktion von IronPDF ermöglicht es Entwicklern, die PDF-Darstellung durch die Verwaltung asynchroner Zeitabläufe zu verbessern. Durch das Setzen von Optionen wie RenderDelay können Sie sicherstellen, dass alle Assets und Skripte vor der Umwandlung geladen sind, um unvollständige PDF-Dokumente zu vermeiden. Dieser Leitfaden zeigt, wie Sie WaitFor in Ihren Projekten implementieren, um eine präzise und effiziente Darstellung zu erreichen.

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

Was ist die WaitFor Klasse und ihre Optionen?

Für eine optimale Performance beim Rendern von PDFs verbessert die WaitFor Klasse den PDF-Rendering-Prozess. Das WaitFor Objekt von RenderOptions bietet mehrere Optionen:

  • PageLoad: Standard-Wiedergabe ohne Warten.
  • RenderDelay: Setzt eine beliebige Wartezeit.
  • Schriftarten: Wartet, bis alle Schriftarten geladen sind.
  • JavaScript: Löst das Rendering mit einer JavaScript-Funktion aus.
  • HTML elements: Wartet auf bestimmte HTML-Elemente, wie Element-IDs, Namen, Tag-Namen und Selektoren, um Elemente anzuvisieren.
  • NetworkIdle: Wartet auf den Leerlauf des Netzwerks (0, 2 oder ein benutzerdefinierter Wert).

Diese Funktionen funktionieren bei der Konvertierung von HTML-Strings in PDF mit IronPDF, HTML-Dateien in PDF mit IronPDF und Web URLs in PDF mit IronPDF.

Wie kann ich PDFs sofort und ohne Wartezeit rendern?

Standardmäßig erfolgt das Rendering unmittelbar nach Abschluss des Ladevorgangs der Seite. Die Methode PageLoad muss für das normale Rendering nicht aufgerufen werden. Dieser Ansatz eignet sich gut für einfache HTML-Inhalte ohne komplexes JavaScript oder externe Ressourcen.

: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>");
$vbLabelText   $csharpLabel

Wie kann ich eine benutzerdefinierte Verzögerung vor dem PDF-Rendering hinzufügen?

Wenn eine bestimmte Verzögerung vor dem Rendern der PDF-Datei erforderlich ist, können Sie eine beliebige Anzahl von Millisekunden als Verzögerung festlegen. Dies bietet Flexibilität für bestimmte zeitliche Anforderungen, insbesondere bei JavaScript-lastigen Inhalten.

Diese Option funktioniert genauso wie die alte Implementierung mit der Eigenschaft RenderingOptions.RenderDelay. Die alte Eigenschaft ist jedoch veraltet. Verwenden Sie die neue 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>");
$vbLabelText   $csharpLabel

Der Verzögerungsmechanismus ist nützlich, wenn Ihr HTML Animationen enthält, Inhalte nur langsam geladen werden oder Zeit für die Generierung dynamischer Inhalte benötigt wird. Für komplexe Rendering-Szenarien sollten Sie die Benutzerdefinierte Rendering-Optionen erkunden.

Wie warte ich vor dem Rendern, bis alle Schriftarten geladen sind?

Die Methode AllFontsLoaded in der Klasse WaitFor pausiert die PDF-Wiedergabe, bis alle Schriften aus externen Quellen wie Google Fonts geladen sind. Dadurch wird sichergestellt, dass die endgültige PDF-Datei alle erforderlichen Schriftarten enthält und die beabsichtigte Typografie und das visuelle Erscheinungsbild des Dokuments beibehalten werden. Diese Funktion sorgt für eine professionelle PDF-Ausgabequalität.

: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);
$vbLabelText   $csharpLabel

Weitere Informationen zur Verwaltung von Schriftarten in PDFs, einschließlich Einbettungs- und Untergruppenoptionen, finden Sie im Leitfaden zur Verwaltung von Schriftarten in PDFs.

Wie kann ich das PDF-Rendering mit benutzerdefiniertem JavaScript auslösen?

Um eine bessere Kontrolle über den Rendering-Prozess zu erhalten, können Sie eine benutzerdefinierte JavaScript-Funktion angeben, die vor dem Rendering des PDF-Dokuments ausgeführt wird. Dies ermöglicht es Ihnen, notwendige Aufgaben oder Prüfungen durchzuführen, bevor der Rendering-Prozess gestartet wird, und gibt Ihnen die Kontrolle darüber, wann der Rendering-Prozess ausgelöst wird.

In JavaScript löst die Funktion window.ironPdf.notifyRender() die Rendering-Aufgabe aus. Sobald notifyRender() aufgerufen wird, beginnt der Rendering-Prozess. Sie bestimmen, wann die Funktion aufgerufen werden soll.

: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

Dieser Ansatz ist effektiv, wenn er mit AJAX-Anfragen kombiniert wird oder sichergestellt wird, dass dynamisch generierte Inhalte vollständig geladen werden, bevor sie gerendert werden. Für fortgeschrittene JavaScript-Szenarien siehe den Leitfaden zum Ausführen von benutzerdefiniertem JavaScript in PDFs.

Wie kann ich auf bestimmte HTML-Elemente warten, bevor sie gerendert werden?

Bei dieser Option wartet der Rendering-Prozess auf bestimmte HTML-Elemente, wie z. B. Element-IDs, Namen, Tag-Namen und Abfrage-Selektoren für Ziel-Elemente. Diese Funktion ist hilfreich bei der Arbeit mit Single Page Applications (SPAs) oder Inhalten, die asynchron geladen werden.

Wie warte ich auf ein Element nach ID?

Das Rendering wartet im folgenden Codebeispiel auf eine bestimmte Element-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);
$vbLabelText   $csharpLabel

Wie warte ich auf ein Element nach Namensattribut?

Im folgenden Codebeispiel wartet der Rendering-Prozess auf einen bestimmten Elementnamen.

: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);
$vbLabelText   $csharpLabel

Wie warte ich auf Elemente nach Tag-Namen?

Im folgenden Codebeispiel wartet der Rendering-Prozess auf den Namen eines bestimmten Element-Tags.

: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);
$vbLabelText   $csharpLabel

Wie verwende ich Abfrage-Selektoren, um auf Elemente zu warten?

Der Rendering-Prozess wartet auf das Element, das durch den Abfrage-Selektor im folgenden Codebeispiel ausgewählt wurde. Die Methode HtmlQuerySelector wartet auf ein img tag mit einer id von 'myid' und einer class von '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);
$vbLabelText   $csharpLabel

Wie warte ich, bis die Netzwerkaktivität abgeschlossen ist?

Wenn Sie Webseiten rendern, die Netzwerkanfragen für Ressourcen, Daten oder API-Aufrufe stellen, stellen Sie sicher, dass alle Netzwerkaktivitäten abgeschlossen sind, bevor Sie die PDF-Datei generieren. IronPDF bietet mehrere Methoden zur Handhabung verschiedener Netzwerkszenarien.

Wann sollte ich auf null Netzwerkaktivität warten?

Diese Art von Netzwerk-Leerlauf wartet, bis keine Netzwerkaktivität mehr stattfindet, was in der Regel bedeutet, dass der Inhalt vollständig geladen ist. Dies eignet sich für Single-Page Applications (SPAs) oder einfache Webseiten ohne langwierige Netzwerkanfragen oder laufende Netzwerkaktivitäten.

Der Rendering-Prozess beginnt, sobald keine laufende Netzwerkaktivität für mindestens 500ms stattgefunden hat.

: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>");
$vbLabelText   $csharpLabel

Wann sollte ich zwei Netzwerkaktivitäten zulassen?

Die Methode NetworkIdle2 eignet sich für Webanwendungen oder Webseiten mit langen Netzwerkanfragen oder Heartbeat-Pings. In der Regel handelt es sich um 1-2 Anfragen. Selbst wenn diese Anfragen fortlaufend sind, wird das Auslösen des Netzwerk-Idle-Ereignisses dadurch nicht ungültig, da höchstens zwei Anfragen zulässig sind.

Vor der Einleitung des Rendering-Prozesses sollten höchstens zwei Netzwerkaktivitäten übrig bleiben, die wenigstens 500ms andauern. Diese Option bietet eine schnelle Konfiguration für die Handhabung einer festen Anzahl von Netzwerkaktivitäten.

: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>");
$vbLabelText   $csharpLabel

Wie kann ich die Schwellenwerte für die Netzwerkaktivität anpassen?

Wenn mehrere Netzwerkanfragen beteiligt sind, können Sie sowohl die Netzwerk-Idle-Dauer als auch die Anzahl der zulässigen Netzwerkanfragen, die das Netzwerk-Idle-Ereignis nicht ungültig machen, anpassen. Diese Option eignet sich für Webanwendungen oder Webseiten mit spezifischen Anforderungen, die nicht zu den beiden vorherigen Methoden passen. Diese Anpassung richtet sich an eine breite Palette von Anwendungsfällen unter verschiedenen Umständen.

: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>");
$vbLabelText   $csharpLabel

Dieses Maß an Anpassung ist wertvoll, wenn man mit komplexen Webanwendungen arbeitet, die dauerhafte Verbindungen aufrechterhalten oder vorhersehbare Hintergrundnetzwerkaktivitätsmuster haben.

Wie kann ich eine maximale Wartezeit festlegen?

Die Methoden JavaScript, NetworkIdle, NetworkIdle0 und NetworkIdle2 erlauben es, eine maximale Wartezeit festzulegen, um sicherzustellen, dass die Wartezeit nicht unbegrenzt ist. Der Parameter maxWaitTime dieser Methoden dient diesem Zweck. Dadurch wird verhindert, dass Ihre Anwendung auf unbestimmte Zeit hängen bleibt, wenn die erwarteten Bedingungen nie eintreten.

Alle angegebenen Zeitwerte sind in Millisekunden.

Bei der Umsetzung dieser Wartestrategien muss ein Gleichgewicht zwischen dem vollständigen Laden des Inhalts und der Aufrechterhaltung einer angemessenen Leistung gefunden werden. Für Anwendungen, die eine präzise Zeitsteuerung erfordern, sollten Sie sich über async PDF generation techniques informieren.

Bereit zu sehen, was Sie sonst noch tun können? Sehen Sie sich die Tutorial-Seite hier an: Zusätzliche Funktionen oder erkunden Sie Erstellung von PDFs mit IronPDF für fortgeschrittene Techniken.

Häufig gestellte Fragen

Was ist die WaitFor-Klasse und warum sollte ich sie verwenden?

Die WaitFor-Klasse in IronPDF ermöglicht es Entwicklern, das PDF-Rendering zu verzögern, bis alle Assets, Schriftarten und JavaScript geladen sind. Dies verhindert unvollständige Renderings und stellt sicher, dass komplexe Webseiten vor der Konvertierung in PDF vollständig geladen werden, was zu genaueren und vollständigeren PDF-Dokumenten führt.

Welche verschiedenen WaitFor-Optionen gibt es?

Die WaitFor-Klasse von IronPDF bietet mehrere Optionen: PageLoad (standardmäßiges sofortiges Rendering), RenderDelay (benutzerdefinierte Verzögerung in Millisekunden), Fonts (wartet darauf, dass alle Schriftarten geladen werden), JavaScript (löst das Rendering über eine JavaScript-Funktion aus), HTML-Elemente (wartet auf bestimmte Elemente nach ID, Name, Tag oder Abfrageselektor) und NetworkIdle (wartet darauf, dass die Netzwerkaktivität beendet wird).

Wie kann ich eine benutzerdefinierte Verzögerung vor dem PDF-Rendering hinzufügen?

Mit der Methode RenderDelay in IronPDF können Sie eine benutzerdefinierte Verzögerung hinzufügen. Geben Sie einfach die Verzögerung in Millisekunden an: `new ChromePdfRenderer { RenderingOptions = { WaitFor = WaitFor.RenderDelay(3000) } }`. Dies ist besonders nützlich für JavaScript-lastige Inhalte, die zusätzliche Zeit für die Ausführung benötigen.

Kann ich warten, bis bestimmte HTML-Elemente geladen sind, bevor sie gerendert werden?

Ja, IronPDF ermöglicht es Ihnen, auf bestimmte HTML-Elemente zu warten, indem Sie Element-IDs, Namen, Tag-Namen oder Abfrage-Selektoren verwenden. Dadurch wird sichergestellt, dass wichtige Inhalte auf der Seite vorhanden sind, bevor die PDF-Konvertierung beginnt, so dass keine Elemente in Ihrem endgültigen PDF-Dokument fehlen.

Was ist NetworkIdle und wann sollte ich es verwenden?

NetworkIdle in IronPDF wartet auf die Beendigung der Netzwerkaktivität, bevor die PDF-Datei gerendert wird. Sie können die Wartezeit auf 0, 2 oder eine benutzerdefinierte Anzahl von Netzwerkverbindungen einstellen. Dies ist ideal für Seiten, die Inhalte dynamisch über AJAX-Aufrufe oder andere asynchrone Netzwerkanfragen laden.

Wie kann ich das PDF-Rendering über JavaScript auslösen?

Mit der JavaScript-Option WaitFor von IronPDF können Sie den Rendervorgang über eine JavaScript-Funktion auslösen. Damit haben Sie die vollständige Kontrolle darüber, wann die PDF-Generierung erfolgt. Dies ist ideal für einseitige Anwendungen oder komplexe JavaScript-gesteuerte Websites, bei denen Sie eine präzise Zeitsteuerung benötigen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 17,012,929 | Version: 2025.12 gerade veröffentlicht