PuppeteerSharp gegen IronPDF: Technischer Leitfaden zum Vergleich
Bei der Bewertung von PDF-Generierungswerkzeugen durch .NET-Entwickler bieten PuppeteerSharpundIronPDFunterschiedliche Ansätze für die gleiche Herausforderung. PuppeteerSharpführt die Browserautomatisierung in C# als eine Version von Googles Puppeteer ein, währendIronPDFeine dedizierte PDF-Generierungsbibliothek ist. Dieser technische Vergleich bewertet beide Lösungen anhand von Kriterien, die für Entwickler und Architekten bei der Planung von PDF-Generierungsstrategien für .NET-Anwendungen in der Zukunft von entscheidender Bedeutung sind.
PuppeteerSharpbesser verstehen
PuppeteerSharp ist eine .NET-Adaption von Googles Puppeteer und bringt Browserautomatisierungsfunktionen nach C#. Es erzeugt PDFs mithilfe der in Chrome integrierten Funktion "Drucken als PDF", ähnlich wie beim Drücken von Strg+P in einem Browser. Das Ergebnis ist eine druckfertige, für Papier optimierte Ausgabe, die sich von der Bildschirmdarstellung unterscheidet.
Diese Unterscheidung ist wichtig: Die PDF-Ausgabe von PuppeteerSharpentspricht dem Druckdialog von Chrome, nicht einer Bildschirmaufnahme. Layouts können umbrochen werden, Hintergründe können standardmäßig weggelassen werden, und die Ausgabe ist für den Druck paginiert und passt sich nicht an das Browser-Ansichtsfenster an.
PuppeteerSharp zeichnet sich durch moderne CSS3-Unterstützung aus, da es die Chromium-Engine für das Rendering verwendet. Die Bibliothek ermöglicht außerdem eine umfangreiche Browser-Interaktion für Web Scraping, automatisierte Tests und Browser-Automatisierungsaufgaben, die über die PDF-Erzeugung hinausgehen.
PuppeteerSharp erfordert jedoch einige Überlegungen bei der Implementierung. Vor der ersten Verwendung muss eine über 300 MB große Chromium-Binärdatei heruntergeladen werden. Bei starker Belastung kommt es in der Bibliothek zu einer Speicheranhäufung, die ein manuelles Browser-Recycling erfordert. Die Architektur erfordert komplexe asynchrone Muster mit Browser-Lifecycle-Management.
Einschränkung der Barrierefreiheit: PuppeteerSharpkann keine PDF/A- (Archiv-) oder PDF/UA-konformen (barrierefreien) Dokumente erstellen. Für Section 508, EU-Richtlinien zur Barrierefreiheit oder langfristige Archivierungsanforderungen werden spezielle PDF-Lösungen erforderlich.
IronPDFverstehen
IronPDF wurde speziell für die PDF-Erstellung entwickelt und bietet einen geringeren Speicherbedarf sowie die vollständige Bearbeitung von PDFs ohne zusätzlichen Browser-Automatisierungsaufwand. Die Bibliothek bietet eine gebündelte Chromium-Rendering-Engine, automatische Speicherverwaltung und geht über die Generierung hinaus und umfasst auch Bearbeitung, Zusammenführung, Aufteilung und digitale Signaturen.
Die Architektur vonIronPDFmacht einen separaten Chromium-Download überflüssig, vereinfacht die Bereitstellung durch ein einziges NuGet-Paket und bietet sowohl synchrone als auch asynchrone API-Muster für unterschiedliche Anwendungsanforderungen.
Das Problem der Browser-Automatisierung
PuppeteerSharp wurde für Web-Tests und Scraping entwickelt, nicht für die Dokumentenerstellung. Dies führt zu grundlegenden Problemen, wenn die Übersetzung hauptsächlich für PDFs verwendet wird:
| Aspekt | PuppeteerSharp | IronPDF |
|---|---|---|
| Primärer Zweck | Browser-Automatisierung | PDF-Erstellung |
| Chromium-Abhängigkeit | 300MB+separater Download | Eingebaute optimierte Engine |
| API-Komplexität | Asynchroner Browser/Seitenlebenszyklus | Synchrone Einzeiler |
| Initialisierung | BrowserFetcher.DownloadAsync() + LaunchAsync |
new ChromePdfRenderer() |
| Speichermanagement | Manuelles Browser-Recycling erforderlich | Automatisch |
| Speicher unter Last | 500MB+mit Lecks | ~50MB stabil |
| Kalter Start | 45+ Sekunden | ~20 Sekunden |
| PDF/A-Unterstützung | Nicht verfügbar | Unterstützt |
| PDF/UA Barrierefreiheit | Nicht verfügbar | Unterstützt |
| PDF-Bearbeitung | Nicht verfügbar | Zusammenführen, teilen, stempeln, bearbeiten |
| Digitale Signaturen | Nicht verfügbar | Unterstützt |
| Thread-Sicherheit | Beschränkt | Unterstützt |
Speicher und Leistungsmetriken
Die architektonischen Unterschiede zwischen PuppeteerSharpundIronPDFwerden in messbare Produktionsmetriken umgesetzt:
| Feature | PuppeteerSharp | IronPDF |
|---|---|---|
| Größe des Einsatzes | 300MB+ | Kompaktes NuGet-Paket |
| PDF-Bearbeitung | Beschränkt | Umfangreiche Funktionen |
| Speichernutzung | 500MB+ | 50MB |
| PDF-Erstellungszeit | 45s | 20s |
| Thread-Sicherheit | ⚠️ Eingeschränkt | ✅ Ja |
Die Speicherakkumulation von PuppeteerSharpunter anhaltender Last stellt ein erhebliches Produktionsproblem dar. Die Bibliothek erfordert explizites Browser-Recycling, um Speicherlecks zu vermeiden:
// PuppeteerSharp- Memory grows with each operation
// Requires explicit browser recycling every N operations
for (int i = 0; i < 1000; i++)
{
var page = await browser.NewPageAsync();
await page.SetContentAsync($"<h1>Document {i}</h1>");
await page.PdfAsync($"doc_{i}.pdf");
await page.CloseAsync(); // Memory still accumulates!
}
// Must periodically: await browser.CloseAsync(); and re-launch
// PuppeteerSharp- Memory grows with each operation
// Requires explicit browser recycling every N operations
for (int i = 0; i < 1000; i++)
{
var page = await browser.NewPageAsync();
await page.SetContentAsync($"<h1>Document {i}</h1>");
await page.PdfAsync($"doc_{i}.pdf");
await page.CloseAsync(); // Memory still accumulates!
}
// Must periodically: await browser.CloseAsync(); and re-launch
IronPDF sorgt für einen stabilen Speicherplatz durch automatische Verwaltung:
//IronPDF- Stable memory, reuse renderer
var renderer = new ChromePdfRenderer();
for (int i = 0; i < 1000; i++)
{
var pdf = renderer.RenderHtmlAsPdf($"<h1>Document {i}</h1>");
pdf.SaveAs($"doc_{i}.pdf");
// Memory managed automatically
}
//IronPDF- Stable memory, reuse renderer
var renderer = new ChromePdfRenderer();
for (int i = 0; i < 1000; i++)
{
var pdf = renderer.RenderHtmlAsPdf($"<h1>Document {i}</h1>");
pdf.SaveAs($"doc_{i}.pdf");
// Memory managed automatically
}
Vergleich der Plattformunterstützung
Die Bibliotheken unterscheiden sich in ihrer Kompatibilität mit der .NET-Version:
| Bibliothek | .NET Framework 4.7.2 | .NET Core 3.1 | .NET 6-8 | .NET 10 |
|---|---|---|---|---|
| IronPDF | ✅ Vollständig | ✅ Vollständig | ✅ Vollständig | ✅ Vollständig |
| PuppeteerSharp | ⚠️ Eingeschränkt | ✅ Vollständig | ✅ Vollständig | ❌ Anhängig |
Die umfassende Unterstützung vonIronPDFfür .NET-Plattformen gewährleistet, dass Entwickler es in verschiedenen Umgebungen ohne Kompatibilitätsprobleme einsetzen können und bietet somit Flexibilität für moderne .NET-Anwendungen, die auf zukünftige Bereitstellungszeiträume abzielen.
HTML zu PDF Konvertierung
Das häufigste Szenario für die PDF-Erstellung ist die Konvertierung von HTML-Inhalten. Die Codemuster zeigen grundlegende API-Unterschiede auf.
PuppeteerSharpHTML-nach-PDF Implementierung
PuppeteerSharp erfordert asynchrone Muster mit Browser-Lifecycle-Management:
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true
});
await using var page = await browser.NewPageAsync();
await page.SetContentAsync("<h1>Hello World</h1><p>This is a PDF document.</p>");
await page.PdfAsync("output.pdf");
}
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true
});
await using var page = await browser.NewPageAsync();
await page.SetContentAsync("<h1>Hello World</h1><p>This is a PDF document.</p>");
await page.PdfAsync("output.pdf");
}
}
Dieses Muster erfordert:
- Herunterladen von Chromium-Binärdateien (~300MB) bei der ersten Verwendung
- Starten einer Browser-Instanz
- Erstellen von Seitenkontexten
- Verwaltung der Browserbereinigung durch
await using-Muster - Umgang mit potenzieller Speicherakkumulation im Laufe der Zeit
IronPDFHTML-zu-PDF Implementierung
IronPDF bietet eine rationalisierte synchrone API:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>");
pdf.SaveAs("output.pdf");
}
}
Mit dem IronPDF-Ansatz entfällt die Verwaltung des Browser-Lebenszyklus vollständig. Die Klasse ChromePdfRenderer kapselt die Rendering-Engine, und RenderHtmlAsPdf erledigt die Konvertierung in einem einzigen Methodenaufruf. Es ist kein BrowserFetcher.DownloadAsync() erforderlich - die Rendering-Engine wird automatisch mitgeliefert.
URL zu PDF Konvertierung
Die Konvertierung von Live-Webseiten in das PDF-Format erfordert die Handhabung der Navigation und des Seitenladens.
PuppeteerSharpURL-Konvertierung
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true
});
await using var page = await browser.NewPageAsync();
await page.GoToAsync("https://www.example.com");
await page.PdfAsync("webpage.pdf");
}
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true
});
await using var page = await browser.NewPageAsync();
await page.GoToAsync("https://www.example.com");
await page.PdfAsync("webpage.pdf");
}
}
Die URL-Konvertierung von PuppeteerSharpfolgt demselben asynchronen Browser-Lebenszyklus-Muster und verwendet GoToAsync für die Navigation vor der PDF-Erzeugung.
IronPDFURL-Konvertierung
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
Die RenderUrlAsPdf-Methode vonIronPDFbehandelt Navigation und Rendering in einem einzigen Aufruf mit intelligentem eingebautem Warten auf den Seiteninhalt.
Benutzerdefinierte Rendering-Einstellungen
Die Erstellung von Produktions-PDFs erfordert in der Regel die Kontrolle über Seitenabmessungen, Ränder und Ausrichtung.
PuppeteerSharpBenutzerdefinierte Einstellungen
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true
});
await using var page = await browser.NewPageAsync();
await page.SetContentAsync("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
await page.PdfAsync("custom.pdf", new PdfOptions
{
Format = PaperFormat.A4,
Landscape = true,
MarginOptions = new MarginOptions
{
Top = "20mm",
Bottom = "20mm",
Left = "20mm",
Right = "20mm"
}
});
}
}
// NuGet: Install-Package PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true
});
await using var page = await browser.NewPageAsync();
await page.SetContentAsync("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
await page.PdfAsync("custom.pdf", new PdfOptions
{
Format = PaperFormat.A4,
Landscape = true,
MarginOptions = new MarginOptions
{
Top = "20mm",
Bottom = "20mm",
Left = "20mm",
Right = "20mm"
}
});
}
}
PuppeteerSharp verwendet stringbasierte Randwerte und ein PdfOptions-Objekt, das an die PdfAsync-Methode übergeben wird.
IronPDFBenutzerdefinierte Einstellungen
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
pdf.SaveAs("custom.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>With landscape orientation and margins.</p>");
pdf.SaveAs("custom.pdf");
}
}
IronPDF verwendet numerische Randwerte in Millimetern über die RenderingOptions-Eigenschaft, die eine klare Einheitssemantik bietet. Der Renderer kann einmal konfiguriert und für mehrere Konvertierungen wiederverwendet werden.
API-Mapping-Referenz
Teams, die eine Migration von PuppeteerSharpaufIronPDFerwägen, können sich auf diese Zuordnung gleichwertiger Operationen beziehen:
| PuppeteerSharpAPI | IronPDFAPI |
|---|---|
new BrowserFetcher().DownloadAsync() |
Nicht erforderlich |
Puppeteer.LaunchAsync(options) |
Nicht erforderlich |
browser.NewPageAsync() |
Nicht erforderlich |
Seite.GoToAsync(url) |
renderer.RenderUrlAsPdf(url) |
Seite.SetContentAsync(html) |
renderer.RenderHtmlAsPdf(html) |
Seite.PdfAsync(Pfad) |
pdf.SaveAs(Pfad) |
Warte auf page.CloseAsync() |
Nicht erforderlich |
Warten Sie browser.CloseAsync() |
Nicht erforderlich |
PdfOptions.Format |
RenderingOptions.PaperSize |
PdfOptions.Landscape |
RenderingOptions.PaperOrientation |
PdfOptions.MarginOptions |
RenderingOptions.MarginTop/Bottom/Left/Right |
PdfOptions.PrintBackground |
RenderingOptions.PrintHtmlBackgrounds |
PdfOptions.HeaderTemplate |
RenderingOptions.HtmlHeader |
PdfOptions.FooterTemplate |
RenderingOptions.HtmlFooter |
page.WaitForSelectorAsync() |
RenderingOptions.WaitFor.HtmlElementId |
page.WaitForNetworkIdleAsync() |
Automatisch |
| Nicht anwendbar | PdfDocument.Merge() |
| Nicht anwendbar | pdf.ApplyStamp() |
| Nicht anwendbar | pdf.SecuritySettings |
| Nicht anwendbar | pdf.Sign() |
Funktionsvergleich
Abgesehen von der grundlegenden Konvertierung unterscheiden sich die Bibliotheken erheblich in ihren Fähigkeiten zur PDF-Bearbeitung:
| Feature | PuppeteerSharp | IronPDF |
|---|---|---|
| HTML zu PDF | Ja (Print-to-PDF) | Ja (Chromium-Rendering) |
| URL zu PDF | Ja | Ja |
| CSS-Gitter/Flexbox | Ja | Ja |
| JavaScript-Ausführung | Ja | Ja |
| PDF/A-Archivierung | Nein | Ja |
| PDF/UA Barrierefreiheit | Nein | Ja |
| Digitale Signaturen | Nein | Ja |
| Passwortschutz | Nein | Ja |
| PDFs zusammenführen | Nein | Ja |
| PDFs teilen | Nein | Ja |
| Wasserzeichen | Nein | Ja |
| Textextraktion | Nein | Ja |
| Formular ausfüllen | Nein | Ja |
| Sync-API | Nein | Ja |
| Async-API | Ja | Ja |
Wenn Teams die Migration von PuppeteerSharpin Betracht ziehen
Mehrere Faktoren veranlassen Entwicklungsteams, Alternativen zu PuppeteerSharpfür die PDF-Erzeugung zu evaluieren:
Probleme mit der Größe der Bereitstellung entstehen, wenn der Chromium-Download von mehr als 300 MB die Docker-Images aufbläht und Probleme beim Kaltstart in serverlosen Umgebungen verursacht.IronPDFmacht diesen separaten Download überflüssig und reduziert den Umfang der Bereitstellung erheblich.
Speicherleck-Herausforderungen unter anhaltender Last erfordern manuelles Browser-Recycling mit PuppeteerSharp. Teams, die hochvolumige PDF-Generierungsdienste aufbauen, stellen fest, dass die Speicherakkumulation durch Browser-Instanzen komplexe Betriebsmuster erfordert.
Fehlende PDF-Bearbeitungsfunktionen werden zum Hindernis, wenn es darum geht, Dokumente zusammenzuführen, Wasserzeichen hinzuzufügen, digitale Signaturen anzubringen oder Text zu extrahieren. PuppeteerSharpkonzentriert sich ausschließlich auf die Generierung.
Konformitätsanforderungen für Barrierefreiheit (Section 508, PDF/UA) oder Archivierung (PDF/A) können mit den aktuellen Funktionen von PuppeteerSharpnicht erfüllt werden.
Einschränkungen bei der Thread-Sicherheit betreffen Anwendungen, die gleichzeitige PDF-Anfragen verarbeiten, wobei die vollständige Thread-Sicherheit vonIronPDFein zuverlässigeres Verhalten bietet.
Zusammenfassung des Leistungsvergleichs
| Metrik | PuppeteerSharp | IronPDF | Verbesserung |
|---|---|---|---|
| Erste PDF-Datei (Kaltstart) | 45s+ | ~20s | 55%+ schneller |
| Nachfolgende PDFs | Variable | Einheitlich | Vorhersehbar |
| Speichernutzung | 500MB+(wächst) | ~50MB (stabil) | 90% weniger Speicherplatz |
| Speicherplatz (Chromium) | 300MB+ | 0 | Downloads eliminieren |
| Browser herunterladen | Erforderlich | Nicht erforderlich | Null-Einstellung |
| Thread-Sicherheit | Beschränkt | Voll | Zuverlässige Gleichzeitigkeit |
Stärken und Gegensätze
Stärken von PuppeteerSharp
- Moderne CSS3-Unterstützung durch die Chromium-Engine
- Reichhaltige Browser-Interaktion für Scraping und Tests
- Direkte Portierung der Puppeteer-API von Google
- Frei und quelloffen
Einschränkungen von PuppeteerSharpbei der PDF-Erzeugung
- 300MB+Chromium-Abhängigkeit
- Speicherlecks unter anhaltender Last
- Browser-Automatisierungs-Overhead für die Dokumentenerstellung
- Keine PDF/A- oder PDF/UA-Konformität
- Keine PDF-Manipulationsmöglichkeiten
- Komplexe async-Muster erforderlich
IronPDFStärken
- Speziell für die PDF-Erstellung und -Bearbeitung entwickelt
- Keine externen Browser-Downloads erforderlich
- Automatische Speicherverwaltung
- Umfassender Funktionsumfang (Signaturen, Sicherheit, Formulare)
- Unterstützung der PDF/A- und PDF/UA-Konformität
- Synchrone und asynchrone API-Muster
- Professionelle Unterstützung mit Dokumentation
IronPDFÜberlegungen
- Kommerzielles Lizenzierungsmodell
- Speziell auf PDF-Operationen ausgerichtet (nicht auf Browser-Automatisierung)
Abschluss
PuppeteerSharp ist ein hervorragendes Browser-Automatisierungstool mit PDF-Generierungsfunktionen. Für Teams, die bereits Puppeteer-Patterns verwenden, die gelegentlich eine PDF-Ausgabe benötigen und mit der Chromium-Abhängigkeit, dem Speicher-Recycling und der asynchronen Komplexität umgehen können, bietet die Bibliothek funktionale Ergebnisse.
Für Anwendungen, bei denen die PDF-Erzeugung eine Kernanforderung darstellt - insbesondere solche, die Manipulationsmöglichkeiten, die Einhaltung von Standards, ein stabiles Speicherverhalten oder die Verarbeitung großer Mengen benötigen - bietetIronPDFeine speziell entwickelte Lösung. Die Eliminierung von Chromium-Downloads von mehr als 300 MB, die automatische Speicherverwaltung und die umfassenden PDF-Funktionen stellen die Teams vor die größten Herausforderungen bei der browserbasierten PDF-Erstellung.
Bei der Evaluierung der Migration von PuppeteerSharpaufIronPDFsollten die Teams ihre spezifischen Anforderungen in Bezug auf die Größe der Bereitstellung, die Stabilität des Speichers unter Last, die Anforderungen an die Compliance und die Anforderungen an die PDF-Bearbeitung berücksichtigen. Für PDF-zentrierte Workflows, die auf .NET 10und C# 14 im Jahr 2026 abzielen, bietet die spezielle Architektur vonIronPDFeine geeignetere Grundlage als die Wiederverwendung eines Browser-Automatisierungstools.
Eine Anleitung zur Implementierung finden Sie im IronPDF HTML-zu-PDF-Tutorial und in der Dokumentation, die PDF-Erzeugungsmuster für .NET-Anwendungen behandelt.