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

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

Beim Rendern von PDF-Dokumenten entsteht oft das Problem, dass der Render-Vorgang stattfindet, bevor alle notwendigen Assets und Animationen von JavaScript vollständig geladen sind. Dies kann zu einer unvollständigen oder fehlerhaften Darstellung des PDF-Dokuments führen. Anfangs haben wir dieses Problem dadurch angesprochen, dass der Benutzer als Lösung eine willkürliche Verzögerung einstellen konnte. Jedoch ist das Verlassen auf eine willkürliche Verzögerung keine verlässliche oder effiziente Herangehensweise.

Schnellstart: Verwendung von WaitFor zur Verbesserung der PDF-Darstellung

Die WaitFor-Funktion von IronPDF ermöglicht es Entwicklern, die PDF-Darstellung durch das Management asynchroner Timing zu optimieren. 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. Diese Anleitung zeigt, wie einfach sich WaitFor in Ihren Projekten für eine präzise und effiziente Darstellung implementieren lässt.

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

Minimaler Arbeitsablauf (5 Schritte)

  1. Laden Sie die C# IronPDF-Bibliothek herunter, um die PDF-Darstellung zu verzögern
  2. Erzeugen Sie ein PDF-Dokument aus einem HTML-String, einer Datei oder einer Web-URL
  3. Nutzen Sie die JavaScript-Methode von WaitFor, um die Darstellung aus einer JavaScript-Funktion auszulösen
  4. Verzögern Sie die Darstellung basierend auf der Anzahl von Netzwerkaktivitäten
  5. Warten Sie auf bestimmte HTML-Elemente sowie auf das Laden aller Schriftarten

Die WaitFor-Klasse

Um eine robustere Lösung zu bieten, haben wir eine WaitFor-Klasse implementiert, die den PDF-Wiedergabeprozess verbessert. Das WaitFor-Objekt aus RenderOptions bietet mehrere Optionen, darunter:

  • PageLoad: Standard-Wiedergabe ohne Warten.
  • RenderDelay: Einstellung einer willkürlichen Wartezeit.
  • Fonts: Wartet, bis alle Schriftarten geladen sind.
  • JavaScript: Löst die Wiedergabe mit einer JavaScript-Funktion aus.
  • HTML elements: Wartet auf bestimmte HTML-Elemente, wie Element-IDs, Namen, Tag-Namen und Selektoren, um Elemente anzuvisieren.
  • NetworkIdle: Warten auf Leerlauf im Netzwerk (0, 2 oder eine benutzerdefinierte Menge).

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. Lassen Sie uns die Hauptaspekte dieser neuen Funktion erkunden.

Standardbeispiel für unmittelbares Rendern

Standardmäßig erfolgt die Darstellung unmittelbar, nachdem die Seite vollständig geladen ist. Die PageLoad-Methode muss nicht aufgerufen werden, wenn Sie normal rendern möchten.

: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

Beispiel für benutzerdefinierte Renderverzögerung

In Situationen, in denen vor der PDF-Darstellung eine spezifische Verzögerung erforderlich ist, können Sie eine willkürliche Anzahl von Millisekunden als Verzögerung festlegen. Dies bietet Flexibilität, um spezifische Timing-Anforderungen zu erfüllen.

Diese Option funktioniert genauso wie die alte Implementierung mit der RenderingOptions.RenderDelay-Eigenschaft. Allerdings wurde die alte Eigenschaft veraltet, und es wird dringend empfohlen, die neue API RenderingOptions.WaitFor.RenderDelay zu verwenden.

: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

Beispiel für das Laden aller Schriftarten

Die AllFontsLoaded-Methode in der WaitFor-Klasse ermöglicht es dem PDF-Darstellungsprozess, zu pausieren, bis alle Schriftarten von externen Quellen wie Google Fonts oder anderen Servern geladen sind. Dies stellt sicher, dass das endgültige PDF alle erforderlichen Schriftarten enthält und die beabsichtigte Typografie und das visuelle Erscheinungsbild des Dokuments bewahrt.

: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

Beispiel für benutzerdefinierte JavaScript-Ausführung

Für mehr Kontrolle über den Renderprozess ermöglicht unsere Funktion, eine benutzerdefinierte JavaScript-Funktion anzugeben, die vor dem Rendern des PDF-Dokuments ausgeführt werden muss. Dies ermöglicht es Ihnen, alle notwendigen Aufgaben oder Prüfungen durchzuführen, bevor der Renderprozess eingeleitet wird. Dies gibt dem Benutzer die Kontrolle darüber, wann die Darstellung ausgelöst werden soll.

In JavaScript wird die Funktion window.ironpdf.notifyRender() verwendet, um die Rendering-Aufgabe auszulösen. Sobald notifyRender() aufgerufen wird, beginnt der Rendering-Prozess. Sie haben die volle Kontrolle darüber, wann die Funktion aufgerufen wird.

: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

Beispiel für HTML-Elemente

Mit dieser Option kann der Renderprozess so eingestellt werden, dass er auf bestimmte HTML-Elemente wartet, wie z.B. Element-IDs, Namen, Tag-Namen und sogar die Nutzung von Selektoren, um Elemente zu anvisieren.

Auf Element-ID warten

Im untenstehenden Code-Beispiel wird das Rendern auf eine spezifische Element-ID warten.

: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

Auf Elementnamen warten

Im untenstehenden Code-Beispiel wird der Rendering-Prozess auf einen spezifischen Elementnamen warten.

: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

Auf Element-Tag-Namen warten

Im untenstehenden Code-Beispiel wird der Rendering-Prozess auf einen spezifischen Element-Tag-Namen warten.

: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

Query-Selector verwenden

Im untenstehenden Code-Beispiel wird der Render-Prozess auf das Element warten, das durch den Query-Selector ausgewählt wurde. Die HtmlQuerySelector-Methode wird auf ein img-Tag mit einer ID von 'myid' und einer Klasse von 'blablastyle' warten.

: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

Beispiel für Netzwerkleerlauf

Keine Netzwerkaktivität

Diese Art von Netzwerkleerlauf ermöglicht es Ihnen, zu warten, bis keine Netzwerkaktivität mehr vorhanden ist, was typischerweise darauf hindeutet, dass der Inhalt vollständig geladen ist. Dies ist geeignet für eine Single-Page-Anwendung (SPA) oder eine einfache Webseite, die keine lang abgerufenen Netzwerk-Anforderungen oder laufende Netzwerkaktivitäten hat.

Der Rendering-Prozess wird erst beginnen, sobald es mindestens 500ms keine laufende Netzwerkaktivität gegeben 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>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Zwei Netzwerkaktivitäten erlaubt

Die NetworkIdle2-Methode eignet sich für Webanwendungen oder Webseiten, die lang abgerufene Netzwerk-Anforderungen oder Herzschlag-Pings haben. In der Regel sind 1-2 Anfragen beteiligt. In diesem Fall, selbst wenn diese Anfragen andauern, sind sie nicht ausschlaggebend für die Auslösung des Netzwerkleerlaufereignisses, da es akzeptabel ist, höchstens zwei davon zu haben.

Vor der Einleitung des Rendering-Prozesses sollten höchstens zwei Netzwerkaktivitäten übrig bleiben, die wenigstens 500ms andauern. Diese Option bietet eine schnelle Konfiguration zur Behandlung 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>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Anpassung der Netzwerkaktivitätszulassung

In Fällen, in denen mehrere Netzwerk-Anfragen beteiligt sind, haben Sie die Flexibilität, sowohl die Netzwerkleerlaufdauer als auch die Anzahl der erlaubten Netzwerk-Anfragen anzupassen, die die Auslösung des Leerlaufereignisses nicht ungültig machen. Diese Option ist geeignet für Webanwendungen oder Webseiten mit spezifischen Anforderungen, die nicht zu den vorherigen Methoden passen. Durch diese Anpassung stellen wir sicher, dass wir eine breite Palette von Anwendungsfällen unter verschiedenen Umständen abdecken.

: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

Maximale Wartezeit einstellen

Zusätzlich ermöglichen die JavaScript-, NetworkIdle-, NetworkIdle0- und NetworkIdle2-Methoden, eine maximale Wartezeit einzustellen, um sicherzustellen, dass das Warten nicht unendlich wird. Der Parameter maxWaitTime dieser Methoden kann hierfür verwendet werden.

Hinweis:Alle angegebenen Zeitwerte werden in Millisekunden betrachtet.

Bereit zu sehen, was Sie sonst noch tun können? Schauen Sie sich unsere Tutorial-Seite hier an: Zusätzliche Funktionen

Häufig gestellte Fragen

Was ist die WaitFor-Klasse in einer PDF-Darstellungsbibliothek?

Die WaitFor-Klasse in IronPDF wird verwendet, um das Timing asynchroner Operationen während der PDF-Darstellung zu verwalten und sicherzustellen, dass alle notwendigen Assets und JavaScript-Animationen geladen sind, bevor das Dokument gerendert wird.

Wie kann ich die PDF-Darstellung verzögern, bis alle Seitenelemente geladen sind?

In IronPDF können Sie die Optionen der WaitFor-Klasse wie PageLoad, RenderDelay oder AllFontsLoaded verwenden, um sicherzustellen, dass alle notwendigen Seitenelemente geladen sind, bevor das PDF-Dokument gerendert wird.

Welche Optionen stehen in der WaitFor-Klasse zur Verfügung, um Darstellungsverzögerungen zu verwalten?

Die WaitFor-Klasse von IronPDF umfasst Optionen wie PageLoad, RenderDelay, Fonts, JavaScript, HTML-Elemente und NetworkIdle, die jeweils das Warten auf bestimmte Bedingungen ermöglichen, bevor das PDF gerendert wird.

Wie wirkt sich die PageLoad-Option in der WaitFor-Klasse auf die PDF-Darstellung aus?

Die PageLoad-Option in der WaitFor-Klasse von IronPDF ermöglicht es, dass das PDF direkt nach dem Laden der Seite gerendert wird, ohne zusätzliche Wartezeit.

Wie kann ich eine spezifische Verzögerungszeit vor dem Rendern eines PDFs einstellen?

Mit IronPDF können Sie die RenderDelay-Option in der WaitFor-Klasse verwenden, um eine beliebige Anzahl von Millisekunden zum Verzögern des Renderns anzugeben und so spezifischen Timing-Bedürfnissen gerecht zu werden.

Welche Rolle spielt die AllFontsLoaded-Methode bei der PDF-Darstellung?

Die AllFontsLoaded-Methode in IronPDF stellt sicher, dass der PDF-Darstellungsprozess pausiert, bis alle Schriftarten aus externen Quellen vollständig geladen sind, um sicherzustellen, dass das endgültige PDF alle erforderlichen Schriftarten enthält.

Kann JavaScript verwendet werden, um das Timing der PDF-Darstellung zu steuern?

Ja, in IronPDF können Sie eine benutzerdefinierte JavaScript-Funktion innerhalb der WaitFor-Klasse verwenden, um zu steuern, wann der PDF-Darstellungsprozess ausgelöst wird.

Was macht die NetworkIdle-Option in der WaitFor-Klasse?

Die NetworkIdle-Option in der WaitFor-Klasse von IronPDF verzögert die PDF-Darstellung, bis ein bestimmtes Maß an Netzwerkaktivität aufgehört hat, um sicherzustellen, dass alle Inhalte vollständig geladen sind.

Ist es möglich, Netzwerkeinstellungen in der PDF-Darstellung anzupassen?

IronPDF ermöglicht Ihnen, Netzwerkeinstellungen in der WaitFor-Klasse anzupassen, einschließlich der Network Idle-Dauer und der Anzahl der erlaubten Netzwerk-Anfragen während der Darstellung.

Wie kann ich unbegrenztes Warten während der PDF-Darstellung verhindern?

Sie können eine maximale Wartezeit in der WaitFor-Klasse von IronPDF einstellen, indem Sie den maxWaitTime-Parameter mit Methoden wie JavaScript, NetworkIdle, NetworkIdle0 und NetworkIdle2 verwenden.

Ist die WaitFor-Funktion vollständig mit .NET 10 kompatibel?

Ja – die WaitFor-Klasse von IronPDF funktioniert nahtlos unter .NET 10. IronPDF ist vollständig kompatibel mit .NET 10-Projekten, sodass Sie alle WaitFor-Optionen wie PageLoad, RenderDelay, NetworkIdle usw. ohne Änderungen verwenden können, wenn Sie .NET 10 als Zielplattform verwenden.

Chaknith Bin
Software Ingenieur
Chaknith arbeitet an IronXL und IronBarcode. Er hat umfassende Expertise in C# und .NET und hilft, die Software zu verbessern und Kunden zu unterstützen. Seine Einblicke aus Benutzerinteraktionen tragen zu besseren Produkten, Dokumentationen und einem insgesamt besseren Erlebnis bei.
Bereit anzufangen?
Nuget Downloads 16,154,058 | Version: 2025.11 gerade veröffentlicht