Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de PuppeteerSharp à IronPDF en C#

Migrer dePuppeteerSharpàIronPDF: Guide de migration complet en C

La migration dePuppeteerSharpversIronPDFtransforme votre flux de travail de génération de PDF d'un outil d'automatisation de navigateur avec des dépendances de plus de 300 Mo à une bibliothèque PDF conçue à cet effet avec une gestion automatique de la mémoire. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine les téléchargements de Chromium, résout les problèmes de fuites de mémoire et fournit des capacités complètes de manipulation de PDF.

Pourquoi migrer dePuppeteerSharpà IronPDF

Comprendre PuppeteerSharp

PuppeteerSharp est un portage .NET de Puppeteer de Google, qui apporte des fonctionnalités d'automatisation de navigateur en C#. Elle génère des PDF à l'aide de la fonctionnalité intégrée d'impression au format PDF de Chrome, de la même manière qu'en appuyant sur Ctrl+P dans un navigateur. La traduction doit rester professionnelle et préserver l'exactitude technique tout en expliquant les caractéristiques et les avantages de ces outils de développement.

PuppeteerSharp a été conçu pour les tests web et le scraping, et non pour la génération de documents. Bien que possible, l'utilisation dePuppeteerSharppour la génération de PDF pose d'importants problèmes de production.

Le problème de l'automatisation des navigateurs

PuppeteerSharp a été conçu pour l'automatisation des navigateurs et non pour la génération de documents. Cela pose des problèmes fondamentaux lorsqu'il s'agit de l'utiliser pour des PDF :

  1. 300MB+ Chromium downloads requis avant la première utilisation. L'inconvénient majeur dePuppeteerSharpest sa taille de déploiement importante, principalement due au binaire Chromium qu'il intègre. Cette taille substantielle peut gonfler les images Docker et causer des problèmes de démarrage à froid dans les environnements sans serveur.

  2. Fuites de mémoire sous charge nécessitant un recyclage manuel du navigateur. En cas de forte charge,PuppeteerSharpest connu pour avoir des fuites de mémoire. L'accumulation de mémoire par les instances du navigateur nécessite une intervention manuelle pour la gestion et le recyclage du processus.

  3. Modèles asynchrones complexes avec gestion du cycle de vie du navigateur.

  4. Sortie au format PDF (équivalent à Ctrl+P, pas à la capture d'écran). Les mises en page peuvent être modifiées, les arrière-plans peuvent être omis par défaut et la sortie est paginée pour l'impression au lieu de correspondre à la fenêtre du navigateur.

  5. Aucun support PDF/A ou PDF/UA pour des raisons de conformité.PuppeteerSharpne peut pas produire de documents conformes aux normes PDF/A (archivage) ou PDF/UA (accessibilité).

  6. Pas de manipulation de PDF - génération uniquement, pas de fusion/séparation/modification. Bien quePuppeteerSharpsoit efficace pour générer des PDF, il ne dispose pas de capacités de manipulation supplémentaires telles que la fusion, la division, la sécurisation ou l'édition de PDF.

Comparaison entreIronPDFet PuppeteerSharp

Aspect PuppeteerSharp IronPDF
Objectif principal Automatisation des navigateurs Génération PDF
Dépendance au chrome téléchargement séparé de plus de 300 Mo Moteur optimisé intégré
Complexité de l'API Cycle de vie asynchrone du navigateur et de la page Répliques synchrones
Initialisation BrowserFetcher.DownloadAsync() + LaunchAsync new ChromePdfRenderer()
Gestion de la mémoire Recyclage manuel du navigateur requis Automatique
Mémoire sous charge 500MB+ avec fuites ~50MB stable
Départ à froid 45+ secondes ~20 secondes
Support PDF/A Non disponible Prise en charge complète
Accessibilité PDF/UA Non disponible Prise en charge complète
Édition de PDF Non disponible Fusionner, diviser, tamponner, éditer
Signatures numériques Non disponible Prise en charge complète
Sécurité des threads Limité Complet
Support professionnel Communauté Commercial avec SLA

Support de la plateforme

Bibliothèque .NET Framework 4.7.2 .NET Core 3.1 .NET 6-8 .NET 10
IronPDF Complet Complet Complet Complet
PuppeteerSharp Limité Complet Complet En attente

La prise en charge étendue d'IronPDF sur l'ensemble des plateformes .NET garantit que les développeurs peuvent l'exploiter dans divers environnements sans rencontrer de problèmes de compatibilité, ce qui constitue un choix flexible pour les applications .NET modernes jusqu'en 2025 et 2026.


Avant de commencer

Prérequis

  1. Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Accès NuGet : Capacité à installer des paquets NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur ironpdf.com

Modifications du paquet NuGet

# Remove PuppeteerSharp
dotnet remove package PuppeteerSharp

# Remove downloaded Chromium binaries (~300MB recovered)
# Delete the .local-chromium folder

# Add IronPDF
dotnet add package IronPdf
# Remove PuppeteerSharp
dotnet remove package PuppeteerSharp

# Remove downloaded Chromium binaries (~300MB recovered)
# Delete the .local-chromium folder

# Add IronPDF
dotnet add package IronPdf
SHELL

Aucun BrowserFetcher.DownloadAsync() requis avec IronPDF - le moteur de rendu est intégré automatiquement.

Configuration de la licence

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

Référence API complète

Modifications de l'espace de nommage

// Before: PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PuppeteerSharp
using PuppeteerSharp;
using PuppeteerSharp.Media;
using System.Threading.Tasks;

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

Mappages de l'API de base

API PuppeteerSharp API IronPDF Notes
new BrowserFetcher().DownloadAsync() Pas nécessaire Pas de téléchargement de navigateur
Puppeteer.LaunchAsync(options) Pas nécessaire Pas de gestion de navigateur
browser.NewPageAsync() Pas nécessaire Pas de contexte de page
page.GoToAsync(url) renderer.RenderUrlAsPdf(url) Rendu direct
page.SetContentAsync(html) renderer.RenderHtmlAsPdf(html) Rendu direct
page.PdfAsync(path) pdf.SaveAs(path) Après le rendu
await page.CloseAsync() Pas nécessaire Nettoyage automatique
await browser.CloseAsync() Pas nécessaire Nettoyage automatique
PdfOptions.Format RenderingOptions.PaperSize Taille du papier
PdfOptions.Landscape RenderingOptions.PaperOrientation Orientation
PdfOptions.MarginOptions RenderingOptions.MarginTop/Bottom/Left/Right Marges individuelles
PdfOptions.PrintBackground RenderingOptions.PrintHtmlBackgrounds Impression de fond
PdfOptions.HeaderTemplate RenderingOptions.HtmlHeader En-têtes HTML
PdfOptions.FooterTemplate RenderingOptions.HtmlFooter Pieds de page HTML
page.WaitForSelectorAsync() RenderingOptions.WaitFor.HtmlElementId Attendre l'élément

Exemples de migration de code

Exemple 1 : Conversion de base de HTML en PDF

Avant (PuppeteerSharp):

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

Après (IronPDF):

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

Cet exemple illustre la différence architecturale fondamentale.PuppeteerSharpnécessite six opérations asynchrones : BrowserFetcher.DownloadAsync() (300MB+ Chromium download), Puppeteer.LaunchAsync(), browser.NewPageAsync(), page.SetContentAsync(), et page.PdfAsync(), plus une élimination appropriée avec await using.

IronPDF élimine toute cette complexité : créez un ChromePdfRenderer, appelez RenderHtmlAsPdf(), et SaveAs(). Pas de modèles asynchrones, pas de cycle de vie du navigateur, pas de téléchargement de Chromium. L'approche d'IronPDF offre une syntaxe plus propre et une meilleure intégration avec les applications .NET modernes. Consultez la documentation HTML vers PDF pour des exemples complets.

Exemple 2 : Conversion d'une URL en PDF

Avant (PuppeteerSharp):

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

Après (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

PuppeteerSharp utilise GoToAsync() pour naviguer vers une URL suivie de PdfAsync().IronPDFfournit une seule méthode RenderUrlAsPdf() qui gère la navigation et la génération de PDF en un seul appel. Pour en savoir plus, consultez nos tutoriels.

Exemple 3 : Paramètres de page personnalisés avec marges

Avant (PuppeteerSharp):

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

Après (IronPDF):

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

Cet exemple montre comment les options PDF sont réparties entre les deux bibliothèques.PuppeteerSharputilise PdfOptions avec Format, Landscape, et MarginOptions contenant des valeurs de chaîne ("20mm").IronPDFutilise des propriétés RenderingOptions avec des enums directs de taille de papier, des enums d'orientation et des valeurs numériques de marge en millimètres.

Correspondances clés :

  • Format = PaperFormat.A4PaperSize = PdfPaperSize.A4
  • Landscape = truePaperOrientation = PdfPaperOrientation.Landscape
  • MarginOptions.Top = "20mm"MarginTop = 20 (millimètres numériques)

Le problème de la fuite de mémoire

PuppeteerSharp est réputé pour l'accumulation de mémoire en cas de charge soutenue :

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

IronPDF élimine le besoin d'une infrastructure de mise en commun des navigateurs que nécessitePuppeteerSharp:

// Before (PuppeteerSharp - delete entire class)
public class PuppeteerBrowserPool
{
    private readonly ConcurrentBag<IBrowser> _browsers;
    private readonly SemaphoreSlim _semaphore;
    private int _operationCount;
    // ... recycling logic ...
}

// After (IronPDF - simple reuse)
public class PdfService
{
    private readonly ChromePdfRenderer _renderer = new();

    public byte[] Generate(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }
}
// Before (PuppeteerSharp - delete entire class)
public class PuppeteerBrowserPool
{
    private readonly ConcurrentBag<IBrowser> _browsers;
    private readonly SemaphoreSlim _semaphore;
    private int _operationCount;
    // ... recycling logic ...
}

// After (IronPDF - simple reuse)
public class PdfService
{
    private readonly ChromePdfRenderer _renderer = new();

    public byte[] Generate(string html)
    {
        return _renderer.RenderHtmlAsPdf(html).BinaryData;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Notesde migration essentielles

Conversion asynchrone vers synchrone

PuppeteerSharp nécessite l'utilisation d'async/await tout au long du processus ;IronPDFprend en charge les opérations synchrones :

// PuppeteerSharp: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    await new BrowserFetcher().DownloadAsync();
    await using var browser = await Puppeteer.LaunchAsync(...);
    await using var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfDataAsync();
}

// IronPDF: Sync default
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

// Or async when needed
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
// PuppeteerSharp: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    await new BrowserFetcher().DownloadAsync();
    await using var browser = await Puppeteer.LaunchAsync(...);
    await using var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfDataAsync();
}

// IronPDF: Sync default
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

// Or async when needed
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Conversion de l'unité de marge

PuppeteerSharp utilise des unités de chaîne de caractères ;IronPDFutilise des millimètres numériques :

//PuppeteerSharp- string units
MarginOptions = new MarginOptions
{
    Top = "1in",      // 25.4mm
    Bottom = "0.75in", // 19mm
    Left = "1cm",     // 10mm
    Right = "20px"    // ~7.5mm at 96dpi
}

//IronPDF- numeric millimeters
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 19;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 8;
//PuppeteerSharp- string units
MarginOptions = new MarginOptions
{
    Top = "1in",      // 25.4mm
    Bottom = "0.75in", // 19mm
    Left = "1cm",     // 10mm
    Right = "20px"    // ~7.5mm at 96dpi
}

//IronPDF- numeric millimeters
renderer.RenderingOptions.MarginTop = 25;    // mm
renderer.RenderingOptions.MarginBottom = 19;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 8;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Conversion de l'en-tête et du pied de page

Classe PuppeteerSharp IronPDFPlaceholder
<span> class="pageNumber"> {page}
<span> class="totalPages"> {total-pages}
<span> class="date"> {date}
<span> class="title"> {html-title}

Nouvelles capacités après la migration

Après avoir migré vers IronPDF, vous bénéficiez de fonctionnalités quePuppeteerSharpne peut pas vous offrir :

Fusion de fichiers PDF

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

Marques de fond

var watermark = new TextStamper
{
    Text = "CONFIDENTIAL",
    FontSize = 48,
    Opacity = 30,
    Rotation = -45
};
pdf.ApplyStamp(watermark);
var watermark = new TextStamper
{
    Text = "CONFIDENTIAL",
    FontSize = 48,
    Opacity = 30,
    Rotation = -45
};
pdf.ApplyStamp(watermark);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Protection par mot de passe

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

Signatures numériques

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

Conformité PDF/A

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

Résumé de la comparaison des performances

Métrique PuppeteerSharp IronPDF Amélioration
Premier PDF (démarrage à froid) 45s+ ~20s 55%+ plus rapide
PDF suivants Variable Cohérence Prévisible
Utilisation de la mémoire 500 Mo et plus (croissance) ~50MB (stable) 90% de mémoire en moins
Espace disque (Chromium) 300MB+ 0 Éliminer les téléchargements
Télécharger le navigateur Les exigences sont les suivantes Pas nécessaire Zéro installation
Sécurité des fils Limité Complet Concurrence fiable
Temps de génération du PDF 45s 20s 55% plus rapide

Liste de contrôle de la migration

Pré-migration

  • [Identifier toutes les utilisations dePuppeteerSharpdans la base de code
  • [Valeurs des marges des documents (conversion des chaînes de caractères en millimètres)
  • [La traduction doit rester professionnelle et préserver l'exactitude technique tout en expliquant les caractéristiques et les avantages de ces outils de développement
  • [Supprimer l'infrastructure de mise en commun et de recyclage des navigateurs
  • [ ] Obtenir la clé de licenceIronPDFà partir de ironpdf.com

Modifications du paquet

  • [Supprimer le paquet PuppeteerSharp NuGet
  • [Supprimer le dossier .local-chromium pour récupérer ~300MB d'espace disque
  • [Installer le package NuGet IronPdf : dotnet add package IronPdf

Modifications du code

  • [Mise à jour des importations d'espaces de noms
  • [Supprimer les appels BrowserFetcher.DownloadAsync()
  • [Les outils de développement doivent être traduits de manière professionnelle, en préservant l'exactitude technique tout en expliquant les caractéristiques et les avantages de ces outils de développement
  • [Remplacer page.SetContentAsync() + page.PdfAsync() par RenderHtmlAsPdf()
  • [Remplacer page.GoToAsync() + page.PdfAsync() par RenderUrlAsPdf()
  • [ ] Convertir les chaînes de marge en valeurs millimétriques
  • [Convertir la syntaxe des espaces réservés de l'en-tête et du pied de page
  • [Supprimer tout code d'élimination du navigateur/de la page
  • [Supprimer l'infrastructure de mise en commun des navigateurs
  • [Ajouter l'initialisation de la licence au démarrage de l'application

Post-Migration

  • [Comparaison visuelle de la sortie PDF
  • [Test de charge pour la stabilité de la mémoire (doit rester stable sans recyclage)
  • [Vérifier le rendu des en-têtes/pieds de page avec les numéros de page
  • [Ajouter de nouvelles fonctionnalités (sécurité, filigrane, fusion) selon les besoins

Conclusion

Au moment de choisir entrePuppeteerSharpet IronPDF, tenez compte des besoins spécifiques de votre projet.PuppeteerSharpexcelle dans les scénarios où un rendu HTML précis est nécessaire et où la gestion des dépendances de Chromium est justifiable. En revanche,IronPDFpropose un ensemble complet avec des fonctionnalités étendues de manipulation des PDF, une facilité de déploiement inégalée et une gestion supérieure de la mémoire, ce qui est idéal pour les développeurs en quête de simplicité et de polyvalence.

Les principaux changements apportés à cette migration sont les suivants :

  1. Architecture : Outil d'automatisation du navigateur → Bibliothèque PDF intégrée
  2. Dépendances : Téléchargement de Chromium 300MB+→ Moteur de rendu intégré
  3. Complexité : 6+ opérations asynchrones → 3 appels synchrones
  4. Mémoire : 500MB+ avec des fuites → ~50MB stable
  5. Gestion des navigateurs : Cycle de vie manuel et recyclage → Traitement automatique
  6. Margines : Unités de chaîne de caractères ("20mm") → Millimètres numériques (20)
  7. Placeholders : Classes CSS (<span> class="pageNumber">) → Accolades ({page})
  8. Performance : 45sdémarrage à froid → ~20sdémarrage à froid
  9. Nouvelles fonctionnalités : Fusion et division de PDF, filigranes, sécurité, signatures numériques, conformité PDF/A

Les deux bibliothèques ont leurs propres forces et faiblesses, et leur compréhension peut vous aider à choisir l'outil approprié pour vos besoins en matière de génération et de manipulation de PDF.

Explorez la documentation complète IronPDF, tutoriel, et référence API pour accélérer votre migration vers PuppeteerSharp.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite