Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von Playwright zu IronPDF in C#

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-Zugriff: Möglichkeit zur Installation von NuGet-Paketen
  3. IronPDF-Lizenz: Ihren Lizenzschlüssel erhalten Sie auf 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";
$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;
$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();
    }
}
$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");
    }
}
$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();
    }
}
$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");
    }
}
$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" }
        });
    }
}
$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");
    }
}
$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();
    }
}
$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");
    }
}
$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;
}
$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}

Eliminierung des Browser-Lebenszyklus

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

Digitale Signaturen

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
$vbLabelText   $csharpLabel

PDF/A-Konformität

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • Identifizieren Sie den gesamten PDF-Generierungscode für Dramatiker.
  • Dokumentrandwerte (Zoll/cm in Millimeter umrechnen)
  • Beachten Sie die Syntax für Kopf-/Fußzeilenplatzhalter zur Konvertierung
  • Besorgen Sie sich den IronPDF-Lizenzschlüssel von ironpdf.com

Paketänderungen

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

Code-Änderungen

  • Namespace-Importe aktualisieren
  • Ersetzen Sie den asynchronen Browserlebenszyklus durch ChromePdfRenderer
  • Konvertiere page.SetContentAsync() + page.PdfAsync() in RenderHtmlAsPdf()
  • Konvertiere page.GotoAsync() + page.PdfAsync() in RenderUrlAsPdf()
  • Randzeichenketten in Millimeterwerte umwandeln
  • Syntax für Kopf-/Fußzeilenplatzhalter konvertieren
  • Entfernen Sie jeglichen Browser-/Seitenfreigabecode.
  • Lizenzinitialisierung beim Anwendungsstart hinzufügen

Nach der Migration

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

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