Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von Playwright zu IronPDF in C#

Migrieren Sie von Dramatikerzu IronPDF: Vollständiger C#-Migrationsleitfaden

Durch die Migration von Dramatikerfor .NET zuIronPDFwird Ihr PDF-Generierungs-Workflow von einem testzentrierten Browser-Automatisierungstool zu einer speziell entwickelten PDF-Bibliothek. Dieser Leitfaden bietet einen vollständigen, schrittweisen Migrationspfad, der komplexe asynchrone Muster, die Verwaltung des Browser-Lebenszyklus und Browser-Downloads von mehr als 400 MB überflüssig macht und gleichzeitig eine bessere Leistung und professionelle PDF-Funktionen bietet.

Warum von DramatikerzuIronPDFmigrieren

Dramatikerfür .NET besser verstehen

Playwright für .NET gehört zur Familie der Browser-Automatisierungstools von Microsoft; sie ist so aufgebaut, dass sie umfassende Testmöglichkeiten für Chromium, Firefox und WebKit bietet. Die Bibliothek ist nach dem Prinzip "Testen zuerst" aufgebaut, d. h. ihr Hauptaugenmerk liegt auf Szenarien, die browserbasierte Tests beinhalten. Obwohl Dramatikerdie PDF-Generierung unterstützt, ist diese Funktionalität eher eine Zusatzfunktion und bietet nicht die granulare Konfiguration, die in speziellen PDF-Tools zu finden ist.

Playwright für .NET ist in erster Linie ein Browser-Automatisierungs- und Test-Framework, bei dem die PDF-Erzeugung eine sekundäre Funktion ist. Wie PuppeteerSharp generiert DramatikerPDFs mithilfe der Druckfunktion des Browsers - das entspricht dem Drücken von Strg+P. Dies erzeugt eine druckfertige, für Papier optimierte Ausgabe, die sich von der Bildschirmdarstellung unterscheidet.

Das Problem mit dem Testing Framework

Playwright wurde für End-to-End-Tests entwickelt, nicht für die Dokumentenerstellung. Dies führt zu grundlegenden Problemen bei der Verwendung für PDFs:

  1. 400MB+ Browser-Downloads vor der ersten Verwendung erforderlich. Die Standardkonfiguration von Dramatikererfordert das Herunterladen mehrerer Browser, was in Umgebungen mit strengen Ressourcenbeschränkungen ein Problem darstellen kann.

  2. Komplexe asynchrone Muster mit Browser-Kontexten und Seitenverwaltung. Die Entwickler müssen mit Browser-Kontexten und der Seitenverwaltung vertraut gemacht werden, ebenso wie mit den richtigen Entsorgungspraktiken.

  3. die Testing-first-Architektur ist nicht für die Dokumentenerstellung optimiert.

  4. Einschränkungen beim Drucken in PDF entspricht Strg+P Browserdruck. Layouts können umbrochen werden, Hintergründe können standardmäßig weggelassen werden, und die Ausgabe wird für den Druck paginiert.

  5. Keine Unterstützung von PDF/A oder PDF/UA für die Einhaltung der Barrierefreiheit. Dramatikerkann keine PDF/A- (Archivierung) oder PDF/UA- (Barrierefreiheit) konforme Dokumente erstellen. Für Section 508, EU-Richtlinien zur Barrierefreiheit oder langfristige Archivierungsanforderungen benötigen Sie eine spezielle PDF-Bibliothek.

  6. Ressourcenintensive Operationen, die vollständige Browserinstanzen erfordern.

Dramatikervs.IronPDFLeistungsvergleich

Metrik Dramatiker IronPDF
Primärer Zweck Browser-Tests PDF-Erstellung
Browser herunterladen 400MB+ (Chromium, Firefox, WebKit) Eingebaute optimierte Engine
Erster Render (Kaltstart) 4.5 Sekunden 2.8 Sekunden
Nachfolgende Renderings 3.8-4.1 Sekunden 0.8-1.2 Sekunden
Speicher pro Konvertierung 280-420MB 80-120MB
API-Komplexität Asynchroner Browser/Kontext/Seiten-Lebenszyklus Synchrone Einzeiler
Initialisierung playwright install + CreateAsync + LaunchAsync new ChromePdfRenderer()
PDF/A-Unterstützung Nicht verfügbar Volle Unterstützung
PDF/UA Barrierefreiheit Nicht verfügbar Volle Unterstützung
Digitale Signaturen Nicht verfügbar Volle Unterstützung
PDF-Bearbeitung Nicht verfügbar Zusammenführen, teilen, stempeln, bearbeiten
Professionelle Unterstützung Gemeinschaft Kommerziell mit SLA

IronPDF wurde mit Schwerpunkt auf der PDF-Erstellung entwickelt. Im Gegensatz zum testzentrierten DramatikerbietetIronPDFeine Vielzahl von dokumentenzentrierten API-Funktionen. Sie stützt sich auf eine einzige optimierte Chromium-Instanz, die die Effizienz fördert und sowohl synchrone als auch asynchrone Operationen ermöglicht. Dies führt zu einem einfacheren mentalen Modell und Arbeitsablauf für Entwickler, die PDF-Funktionen benötigen.

Für Teams, die die Einführung von .NET 10 und C# 14 bis 2025 und 2026 planen, bietetIronPDFeine speziell entwickelte PDF-Lösung, die den Overhead der Browser-Automatisierung eliminiert und gleichzeitig eine bessere Leistung und professionelle Dokumentenfunktionen bietet.


Bevor Sie beginnen

Voraussetzungen

  1. .NET-Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet Access: Fähigkeit, NuGet-Pakete zu installieren
  3. IronPDF Lizenz: Beziehen Sie Ihren Lizenzschlüssel von ironPdf.com

NuGet-Paketänderungen

# Remove Playwright
dotnet remove package Microsoft.Playwright

# Remove browser binaries (reclaim ~400MB disk space)
# Delete the .playwright folder in your project or user directory

# Add IronPDF
dotnet add package IronPdf
# Remove Playwright
dotnet remove package Microsoft.Playwright

# Remove browser binaries (reclaim ~400MB disk space)
# Delete the .playwright folder in your project or user directory

# Add IronPDF
dotnet add package IronPdf
SHELL

Keine playwright-Installation mit IronPDF erforderlich - die Rendering-Engine wird automatisch mitgeliefert.

Lizenz-Konfiguration

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Komplette API-Referenz

Namensraumänderungen

// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Kern-API-Zuordnungen

Playwright-API IronPDFAPI Notizen
Playwright.CreateAsync() new ChromePdfRenderer() Keine Asynchronität erforderlich
playwright.Chromium.LaunchAsync() Nicht erforderlich Keine Browser-Verwaltung
browser.NewPageAsync() Nicht erforderlich Kein Seitenkontext
Seite.GotoAsync(url) renderer.RenderUrlAsPdf(url) Direkte URL-Wiedergabe
Seite.SetContentAsync(html) + Seite.PdfAsync() renderer.RenderHtmlAsPdf(html) Einzelne Methode
Seite.CloseAsync() Nicht erforderlich Automatische Bereinigung
browser.CloseAsync() Nicht erforderlich Automatische Bereinigung
PagePdfOptions.Format RenderingOptions.PaperSize Papierformat
PagePdfOptions.Margin RenderingOptions.MarginTop/Bottom/Left/Right Einzelne Ränder
PagePdfOptions.DisplayHeaderFooter RenderingOptions.TextHeader/TextFooter Kopfzeilen/Fußzeilen
PagePdfOptions.HeaderTemplate RenderingOptions.HtmlHeader HTML-Kopfzeilen
PagePdfOptions.FooterTemplate RenderingOptions.HtmlFooter HTML-Fußzeilen
<span> class="pageNumber"> {Seite} Platzhalter für die Seitenzahl

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML-Strings in PDF

Vor (Dramatiker):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        await page.SetContentAsync(html);
        await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" });

        await browser.CloseAsync();
    }
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        await page.SetContentAsync(html);
        await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" });

        await browser.CloseAsync();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dieses Beispiel verdeutlicht den grundlegenden architektonischen Unterschied. Dramatikerbenötigt fünf asynchrone Operationen: Playwright.CreateAsync(), Chromium.LaunchAsync(), NewPageAsync(), SetContentAsync() und PdfAsync(), plus explizite Browserbereinigung mit CloseAsync().

IronPDF beseitigt all diese Komplexität: Erstellen Sie einen ChromePdfRenderer, rufen Sie RenderHtmlAsPdf() und SaveAs() auf. Keine asynchronen Muster, kein Browser-Lebenszyklus, kein Cleanup-Code. Der Ansatz vonIronPDFbietet eine sauberere Syntax und eine bessere Integration in moderne .NET-Anwendungen. Umfassende Beispiele finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Konvertierung von URL in PDF

Vor (Dramatiker):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        await page.GotoAsync("https://www.example.com");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "webpage.pdf",
            Format = "A4"
        });

        await browser.CloseAsync();
    }
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        await page.GotoAsync("https://www.example.com");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "webpage.pdf",
            Format = "A4"
        });

        await browser.CloseAsync();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (IronPDF):

// 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Playwright verwendet GotoAsync(), um zu einer URL zu navigieren, gefolgt von PdfAsync().IronPDFbietet eine einzige RenderUrlAsPdf()-Methode, die Navigation und PDF-Erzeugung in einem Aufruf erledigt. Beachten Sie, dass Dramatikerdie Angabe des Formats in PagePdfOptions erfordert, währendIronPDFRenderingOptions.PaperSizefür die Konfiguration der Papiergröße verwendet. Erfahren Sie mehr in unseren Tutorials.

Beispiel 3: Benutzerdefinierte Seitengröße mit Rändern

Vor (Dramatiker):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var playwright = await Playwright.CreateAsync();
        await using var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "custom.pdf",
            Format = "Letter",
            Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" }
        });
    }
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var playwright = await Playwright.CreateAsync();
        await using var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "custom.pdf",
            Format = "Letter",
            Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" }
        });
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.MarginTop = 25;
        renderer.RenderingOptions.MarginBottom = 25;
        renderer.RenderingOptions.MarginLeft = 12;
        renderer.RenderingOptions.MarginRight = 12;
        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        pdf.SaveAs("custom.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.MarginTop = 25;
        renderer.RenderingOptions.MarginBottom = 25;
        renderer.RenderingOptions.MarginLeft = 12;
        renderer.RenderingOptions.MarginRight = 12;
        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        pdf.SaveAs("custom.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Playwright verwendet stringbasierte Randwerte ("1in", "0.5in"), währendIronPDFnumerische Millimeterwerte verwendet. Die Umrechnung lautet: 1 Zoll = 25,4 mm, also wird "1in"zu 25und "0.5in"zu ungefähr 12. Playwrights Format = "Letter" entspricht IronPDFs PaperSize = PdfPaperSize.Letter.

Beispiel 4: Kopfzeilen, Fußzeilen und benutzerdefinierte Einstellungen

Vor (Dramatiker):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        await page.SetContentAsync(html);

        await page.PdfAsync(new PagePdfOptions
        {
            Path = "custom.pdf",
            Format = "A4",
            Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" },
            DisplayHeaderFooter = true,
            HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
            FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
        });

        await browser.CloseAsync();
    }
}
// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();

        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        await page.SetContentAsync(html);

        await page.PdfAsync(new PagePdfOptions
        {
            Path = "custom.pdf",
            Format = "A4",
            Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" },
            DisplayHeaderFooter = true,
            HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
            FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
        });

        await browser.CloseAsync();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.TextHeader.CenterText = "Header";
        renderer.RenderingOptions.TextFooter.CenterText = "Page {page}";

        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        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.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.TextHeader.CenterText = "Header";
        renderer.RenderingOptions.TextFooter.CenterText = "Page {page}";

        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dieses Beispiel zeigt den Unterschied in der Syntax von Kopf- und Fußzeilenplatzhaltern. Dramatikerverwendet klassenbasierte HTML-Platzhalter (<span> class="pageNumber"></span>), währendIronPDFPlatzhalter in geschweiften Klammern verwendet ({page}). Beachten Sie, dass DramatikerDisplayHeaderFooter = true benötigt, um Kopf-/Fußzeilen zu aktivieren, währendIronPDFdiese automatisch aktiviert, wenn Sie Kopf-/Fußzeileninhalte festlegen.


Kritische Hinweise zur Migration

Async zu Sync Konvertierung

Playwright erfordert durchgehend async/await;IronPDFunterstützt synchrone Operationen:

// Playwright: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    using var playwright = await Playwright.CreateAsync();
    await using var browser = await playwright.Chromium.LaunchAsync();
    var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfAsync();
}

// IronPDF: Sync is simpler
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}
// Playwright: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    using var playwright = await Playwright.CreateAsync();
    await using var browser = await playwright.Chromium.LaunchAsync();
    var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfAsync();
}

// IronPDF: Sync is simpler
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Umrechnung von Maßeinheiten

Playwright verwendet String-Einheiten;IronPDFarbeitet mit numerischen Millimetern:

Dramatiker IronPDF(mm)
"1in" 25
"0.5in" 12
"1cm" 10

Kopf-/Fußzeilen-Platzhalter-Konvertierung

Dramatiker-Klasse IronPDFPlatzhalter
<span> class="pageNumber"> {Seite}
<span> class="totalPages"> {Gesamtseiten}
<span> class="date"> {Datum}
<span> class="title"> {html-title}

Browser Lifecycle Elimination

Entfernen Sie den gesamten Browser-Verwaltungscode:

// Playwright: Explicit cleanup required
await page.CloseAsync();
await browser.CloseAsync();
playwright.Dispose();

// IronPDF: No disposal needed - just use the renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Playwright: Explicit cleanup required
await page.CloseAsync();
await browser.CloseAsync();
playwright.Dispose();

// IronPDF: No disposal needed - just use the renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Neue Funktionen nach der Migration

Nach der Migration zuIronPDFerhalten Sie Funktionen, die Dramatikernicht bieten kann:

PDF-Zusammenführung

var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Wasserzeichen

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Passwortschutz

pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Digitale Signaturen

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDF/A-Konformität

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • [Identifizieren Sie den gesamten Playwright-PDF-Generierungscode
  • [Randwerte dokumentieren (Zoll/cm in Millimeter umrechnen)
  • [Beachten Sie die Syntax der Kopf-/Fußzeilen-Platzhalter für die Konvertierung
  • [Den IronPDF-Lizenzschlüssel erhalten Sie von ironpdf.com

Paketänderungen

  • [Entfernen Sie das NuGet-Paket Microsoft.Playwright
  • [Löschen Sie den Ordner .playwright, um ~400 MB Speicherplatz zu gewinnen
  • [Installieren Sie das NuGet-Paket IronPdf: dotnet add package IronPdf

Code-Änderungen

  • [Namespace-Importe aktualisieren
  • [Ersetzen Sie async browser lifecycle durch ChromePdfRenderer
  • [Konvertieren Sie page.SetContentAsync() + page.PdfAsync() in RenderHtmlAsPdf()
  • [Konvertieren Sie page.GotoAsync() + page.PdfAsync() in RenderUrlAsPdf()
  • [Margin-Strings in Millimeterwerte umwandeln
  • [Konvertierung der Syntax von Kopf-/Fußzeilen-Platzhaltern
  • [Entfernen Sie den gesamten Browser-/Seitenverfügbarkeitscode
  • [Lizenzinitialisierung beim Starten der Anwendung hinzufügen

Post-Migration

  • [Visueller Vergleich der PDF-Ausgabe
  • [Überprüfen Sie die Darstellung von Kopf- und Fußzeilen mit Seitenzahlen
  • [Testen Sie die Genauigkeit von Seitenrändern und Seitengrößen
  • [Fügen Sie bei Bedarf neue Funktionen (Sicherheit, Wasserzeichen, Zusammenführen) hinzu

Abschluss

Sowohl Dramatikerfor .NET als auchIronPDFerfüllen unterschiedliche Anforderungen innerhalb des .NET-Ökosystems. Die Stärke von Dramatikerliegt in den Fähigkeiten seines Test-Frameworks, das bei Bedarf durch seine PDF-Generierungsfunktion ergänzt werden kann. Wenn Ihr primäres Ziel jedoch die effiziente, qualitativ hochwertige PDF-Erzeugung mit weniger Aufwand ist, istIronPDFein besserer Kandidat.

Die wichtigsten Änderungen bei dieser Migration sind:

  1. Architektur: Test-Framework mit PDF-Funktion → Speziell angefertigte PDF-Bibliothek
  2. Komplexität: 5+ asynchrone Operationen → 3 synchrone Aufrufe
  3. Browser Management: Manueller Lebenszyklus mit Entsorgung → Automatische Handhabung
  4. Leistung: 4,5s Kaltstart / 3,8-4,1s Rendern → 2,8s Kaltstart / 0,8-1,2s Rendern
  5. Speicherbedarf: 280-420 MB pro Übersetzung → 80-120 MB pro Übersetzung
  6. Speicherplatz: 400MB+ Browser-Downloads → Keine zusätzlichen Downloads
  7. Margins: String-Einheiten ("1in") → Numerische Millimeter (25)
  8. Platzhalter: CSS-Klassen (<span> class="pageNumber">) → Geschweifte Klammern ({page})
  9. Neue Funktionen: PDF-Zusammenführung, Wasserzeichen, Sicherheit, digitale Signaturen, PDF/A-Konformität

Berücksichtigen Sie Ihre Projektanforderungen und wählen Sie die Bibliothek aus, die Ihren Prioritäten entspricht - ob Sie ein robustes Test-Framework benötigen, das nebenbei PDF-Dateien erzeugen kann, oder ein spezielles PDF-Werkzeug, das die Konvertierungsgeschwindigkeit und Ressourceneffizienz maximiert.

Entdecken Sie die vollständige IronPDF-Dokumentation, Tutorials und API-Referenz, um Ihre Playwright-Migration zu beschleunigen.

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