Passer au contenu du pied de page
COMPARAISONS DE PRODUITS

IronPDF vs Puppeteer Sharp: Guide Complet de Comparaison de Bibliothèque PDF en C#

Lors de la création d'applications .NET nécessitant des fonctionnalités PDF, les développeurs font souvent face à une décision cruciale : quelle bibliothèque PDF convient le mieux à leurs besoins ? Deux options populaires qui reviennent souvent dans les discussions sont IronPDF et Puppeteer Sharp. Bien que les deux bibliothèques puissent générer des PDF à partir de contenu HTML, elles diffèrent considérablement dans leur approche, leurs fonctionnalités et leurs cas d'utilisation.

IronPDF est une bibliothèque PDF complète conçue spécifiquement pour les développeurs .NET, offrant des capacités de manipulation PDF étendues au-delà de la simple génération. Puppeteer Sharp, en revanche, est un port .NET de la bibliothèque Puppeteer de Google, principalement axé sur l'automatisation du navigateur avec la génération de PDF comme l'une de ses fonctionnalités. Comprendre les forces et les limites de chaque bibliothèque est essentiel pour prendre une décision éclairée qui correspond aux exigences de votre projet.

Tableau de comparaison rapide

Catégorie Caractéristiques/Aspect IronPDF Marionnettiste Sharp Avantage clé
Architecture de base Philosophie de conception Bibliothèque PDF-first avec moteur Chrome intégré Outil d'automatisation du navigateur avec exportation PDF IronPDF : Conçu pour les PDF
Complexité de l'API Des méthodes simples comme RenderHtmlAsPdf()
Courbe d'apprentissage 1-2 jours en général 3-5 jours (concepts de navigation) IronPDF : Une adoption plus rapide
Support de plateforme Multiplateforme Prise en charge native, sans paquets supplémentaires Nécessite le téléchargement de Chrome/Chromium IronPDF : Un déploiement plus simple
Versions .NET .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ .NET 8, Standard 2.0, Framework 4.6.1+ IronPDF : Dernière prise en charge de .NET
Systèmes d'exploitation Windows, Linux, macOS, Docker natif Windows, Linux (avec réserves), macOS IronPDF : Support universel
HTML en PDF Moteur de rendu Moteur Chrome embarqué Contrôle sans tête de Chrome/Chromium Les deux : précision basée sur Chrome
Support JavaScript Prise en charge complète de JS avec délais de rendu JS complet avec conditions d'attente Puppeteer : Plus de contrôle JS
Fonctionnalités du PDF Sécurité et cryptage AES-256, mots de passe, permissions Non pris en charge IronPDF : Sécurité d'entreprise
Signatures numériques Prise en charge native avec certificats Nécessite des bibliothèques externes IronPDF : Signature intégrée
Édition de PDF Fusionner, diviser, filigrane, formulaires Générer uniquement IronPDF : Manipulation complète
Automatisation du navigateur Scraping Web Pas d'objectif principal Contrôle total du navigateur Puppeteer : Automatisation des navigateurs
Capture d'écran PDF vers image uniquement Captures d'écran des pages/éléments Puppeteer : Une capture polyvalente
Licensing & Pricing Modèle de licence Licences commerciales perpétuelles Licence MIT (gratuite) Marionnettiste : Aucun coût
Prix d'entrée $999 (Lite license) Gratuit Marionnettiste : Barrière zéro
Soutien Documentation Tutoriels détaillés, référence API Documentation GitHub, ressources communautaires IronPDF : Des documents professionnels
Support Technique assistance technique 24/5 Communauté uniquement IronPDF : Professional support
Parfait pour Cas d'Utilisation PDF d'entreprise, rapports, factures Test, scraping, PDF de base En fonction du contexte

Que sont IronPDF et Puppeteer Sharp ?

Qu'est-ce qu'IronPDF ?

IronPDF est une bibliothèque PDF .NET conçue pour générer, éditer et manipuler des documents PDF au sein de code C# managé. Son moteur Chromium intégré convertit le HTML — y compris le CSS3 et le JavaScript — en PDF sans nécessiter de processus de navigateur externe. L'API couvre le chiffrement, les signatures numériques, le remplissage de formulaires, le marquage numérique et la fusion de documents, le tout accessible via un seul package NuGet .

IronPDF prend en charge .NET 9 et la compatibilité avec .NET 10 est en cours de développement. La manipulation avancée des fichiers PDF, notamment l'extraction de contenu et l'estampillage des pages, est également incluse.

Qu'est-ce que Puppeteer Sharp ?

Puppeteer Sharp est un portage .NET de la célèbre bibliothèque Puppeteer Node.js de Google, maintenue par Darío Kondratiuk. Il fournit une API de haut niveau pour contrôler les navigateurs Chrome ou Chromium sans tête par programme via le protocole DevTools. Bien que Puppeteer Sharp puisse générer des PDF, il est principalement conçu comme un outil d'automatisation de navigateur qui excelle dans le web scraping, les tests automatisés et la capture de captures d'écran.

La bibliothèque fonctionne en lançant et en contrôlant une instance de navigateur sans tête, permettant aux développeurs de naviguer sur des pages web, d'interagir avec des éléments et d'exporter du contenu dans divers formats, y compris PDF. Selon les derniers benchmarks, Puppeteer Sharp offre des avantages de performance pour le rendu HTML simple mais nécessite une configuration plus complexe comparée aux bibliothèques PDF dédiées. Les équipes qui évaluent IronPDF pour leurs besoins en matière de génération de PDF peuvent accéder à un [essai gratuit de 30 jours](licence d'essai.

Comment la compatibilité multiplateforme se compare-t-elle ?

Prise en charge multiplateforme de IronPDF

IronPDF offre une large compatibilité multiplateforme, prenant en charge le déploiement dans un large éventail d'environnements. La bibliothèque travaille sur :

  • Versions .NET :
  • .NET 10, 9, 8, 7, 6, 5 (avec compatibilité .NET 10)

    • .NET Core 3.1+
    • .NET Standard 2.0+
    • .NET Framework 4.6.2+
    • Support complet pour C#, VB.NET et F#
  • Systèmes d'exploitation et environnements :
    • Windows (y compris Windows Server)
    • Linux (toutes les principales distributions)
    • macOS (Intel et Apple Silicon)
    • Conteneurs Docker
  • Plateformes cloud : Azure, AWS Lambda

  • Outils de développement :
    • Microsoft Visual Studio
    • JetBrains Rider & ReSharper
    • Visual Studio Code

Le support multiplateforme natif de IronPDF signifie qu'aucun package ou configuration supplémentaire n'est nécessaire pour différents environnements. La bibliothèque détecte automatiquement et s'optimise pour la plateforme cible, comme mentionné dans la mise à jour de la compatibilité des étapes clés.

Prise en charge multiplateforme de Puppeteer Sharp

Puppeteer Sharp offre une compatibilité multiplateforme avec certaines considérations importantes :

  • Versions .NET :

    • Version .NET 8 disponible
    • Bibliothèque .NET Standard 2.0
    • .NET Framework 4.6.1+
    • .NET Core 2.0 ou supérieur
  • Systèmes d'exploitation :
    • Windows (prise en charge complète)
  • Linux (nécessite un serveur X, peut nécessiter un dépannage)

    • macOS (prise en charge standard)
    • Docker (avec dépendances Chrome)
  • Exigences du navigateur :
    • Nécessite le téléchargement des binaires Chromium (~170Mo)
    • Prend en charge les navigateurs Chrome, Chromium et Firefox
    • Modes sans tête et avec tête disponibles

Selon la documentation officielle, les utilisateurs de Linux peuvent rencontrer des problèmes pour exécuter Chrome et doivent consulter le guide de dépannage. La bibliothèque nécessite la gestion des téléchargements de navigateur et du cycle de vie, ajoutant de la complexité au déploiement.

Quelle bibliothèque offre la meilleure fonctionnalité PDF ?

Lors de l'évaluation des capacités PDF, les différences entre IronPDF et Puppeteer Sharp deviennent particulièrement évidentes. Examinons leurs fonctionnalités de base en détail.

Fonctionnalités d'IronPDF

IronPDF offre une suite complète d'outils de manipulation PDF :

Fonctionnalités de Puppeteer Sharp

Puppeteer Sharp se concentre sur l'automatisation du navigateur avec le PDF comme option de sortie :

  • Génération de PDF :

    • HTML en PDF via la fonctionnalité d'impression du navigateur
    • Tailles et marges de page personnalisées
    • En-têtes et pieds de page (style limité)
    • Contrôle du viewport pour les mises en page réactives
  • Automatisation du navigateur :

    • Contrôle complet du Chrome/Chromium sans tête
    • Exécution JavaScript et attentes
    • Remplissage de formulaires et interaction UI
    • Interception des requêtes réseau
  • Capacités de capture d'écran :

    • Captures de pages complètes ou spécifiques à un élément
    • Formats d'image multiples (PNG, JPG)
    • Manipulation du viewport
  • Limites de conception :
    • L'édition de fichiers PDF ne fait pas partie des compétences actuelles de Puppeteer Sharp.
    • Les options de chiffrement et de sécurité ne sont pas incluses. La prise en charge de la signature numérique ne fait pas partie de ses fonctionnalités.
    • Les outils de création de formulaires ne sont pas fournis. Les équipes qui ont besoin de manipuler des fichiers PDF ajoutent généralement des bibliothèques distinctes.

Comme noté par API Template, "Puppeteer Sharp est un portage C# de la bibliothèque Puppeteer populaire, utilisée pour l'automatisation de Chrome sans tête. Dans cet article, nous verrons comment utiliser Puppeteer Sharp pour générer des PDF à partir de modèles HTML."

Exemples de code réels : IronPDF vs Puppeteer Sharp

Explorons des implémentations pratiques des deux bibliothèques pour comprendre leurs modèles d'utilisation et capacités.

Comparaison de conversion HTML en PDF

Exemple IronPDF :

using IronPdf;

// Initialize the Chrome renderer
var renderer = new ChromePdfRenderer();

// Configure rendering options for professional output
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 40;
renderer.RenderingOptions.MarginBottom = 40;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf(@"
    <html>
        <head>
            <style>
                body { font-family: Arial, sans-serif; }
                h1 { color: #2e6da4; }
                .invoice-header { background-color: #f5f5f5; padding: 20px; }
            </style>
        </head>
        <body>
            <div class='invoice-header'>
                <h1>Invoice #12345</h1>
                <p>Generated on: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>
            </div>
        </body>
    </html>");

// Save the PDF
pdf.SaveAs("invoice.pdf");
using IronPdf;

// Initialize the Chrome renderer
var renderer = new ChromePdfRenderer();

// Configure rendering options for professional output
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 40;
renderer.RenderingOptions.MarginBottom = 40;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

// Convert HTML string to PDF
var pdf = renderer.RenderHtmlAsPdf(@"
    <html>
        <head>
            <style>
                body { font-family: Arial, sans-serif; }
                h1 { color: #2e6da4; }
                .invoice-header { background-color: #f5f5f5; padding: 20px; }
            </style>
        </head>
        <body>
            <div class='invoice-header'>
                <h1>Invoice #12345</h1>
                <p>Generated on: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>
            </div>
        </body>
    </html>");

// Save the PDF
pdf.SaveAs("invoice.pdf");
Imports IronPdf

' Initialize the Chrome renderer
Private renderer = New ChromePdfRenderer()

' Configure rendering options for professional output
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 40
renderer.RenderingOptions.MarginBottom = 40
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print

' Convert HTML string to PDF
Dim pdf = renderer.RenderHtmlAsPdf("
    <html>
        <head>
            <style>
                body { font-family: Arial, sans-serif; }
                h1 { color: #2e6da4; }
                .invoice-header { background-color: #f5f5f5; padding: 20px; }
            </style>
        </head>
        <body>
            <div class='invoice-header'>
                <h1>Invoice #12345</h1>
                <p>Generated on: " & DateTime.Now.ToString("yyyy-MM-dd") & "</p>
            </div>
        </body>
    </html>")

' Save the PDF
pdf.SaveAs("invoice.pdf")
$vbLabelText   $csharpLabel

Cet exemple de IronPDF montre l'approche simplifiée de la bibliothèque. La classe ChromePdfRenderer gère en interne toute la complexité du rendu HTML. Les principaux avantages incluent :

  • Appel de méthode unique pour la conversion (RenderHtmlAsPdf)
  • Prise en charge intégrée des types de médias CSS
  • Pas besoin de gestion du cycle de vie du navigateur
  • Disponibilité immédiate sans téléchargement de dépendances externes

Exemple de Puppeteer Sharp :

using PuppeteerSharp;

// Download Chromium if not already present
await new BrowserFetcher().DownloadAsync();

// Launch browser instance
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
    Headless = true,
    Args = new[] { "--no-sandbox", "--disable-setuid-sandbox" }
});

try
{
    // Create new page
    var page = await browser.NewPageAsync();

    // Set content
    await page.SetContentAsync(@"
        <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; }
                    h1 { color: #2e6da4; }
                    .invoice-header { background-color: #f5f5f5; padding: 20px; }
                </style>
            </head>
            <body>
                <div class='invoice-header'>
                    <h1>Invoice #12345</h1>
                    <p>Generated on: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>
                </div>
            </body>
        </html>");

    // Wait for content to load
    await page.WaitForSelectorAsync(".invoice-header");

    // Generate PDF
    await page.PdfAsync("invoice.pdf", new PdfOptions
    {
        Format = PaperFormat.A4,
        MarginOptions = new MarginOptions
        {
            Top = "40px",
            Bottom = "40px",
            Left = "40px",
            Right = "40px"
        }
    });
}
finally
{
    // Clean up browser instance
    await browser.CloseAsync();
}
using PuppeteerSharp;

// Download Chromium if not already present
await new BrowserFetcher().DownloadAsync();

// Launch browser instance
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
    Headless = true,
    Args = new[] { "--no-sandbox", "--disable-setuid-sandbox" }
});

try
{
    // Create new page
    var page = await browser.NewPageAsync();

    // Set content
    await page.SetContentAsync(@"
        <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; }
                    h1 { color: #2e6da4; }
                    .invoice-header { background-color: #f5f5f5; padding: 20px; }
                </style>
            </head>
            <body>
                <div class='invoice-header'>
                    <h1>Invoice #12345</h1>
                    <p>Generated on: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>
                </div>
            </body>
        </html>");

    // Wait for content to load
    await page.WaitForSelectorAsync(".invoice-header");

    // Generate PDF
    await page.PdfAsync("invoice.pdf", new PdfOptions
    {
        Format = PaperFormat.A4,
        MarginOptions = new MarginOptions
        {
            Top = "40px",
            Bottom = "40px",
            Left = "40px",
            Right = "40px"
        }
    });
}
finally
{
    // Clean up browser instance
    await browser.CloseAsync();
}
Imports PuppeteerSharp

' Download Chromium if not already present
Await (New BrowserFetcher()).DownloadAsync()

' Launch browser instance
Dim browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {
	.Headless = True,
	.Args = { "--no-sandbox", "--disable-setuid-sandbox" }
})

Try
	' Create new page
	Dim page = Await browser.NewPageAsync()

	' Set content
	Await page.SetContentAsync("
        <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; }
                    h1 { color: #2e6da4; }
                    .invoice-header { background-color: #f5f5f5; padding: 20px; }
                </style>
            </head>
            <body>
                <div class='invoice-header'>
                    <h1>Invoice #12345</h1>
                    <p>Generated on: " & DateTime.Now.ToString("yyyy-MM-dd") & "</p>
                </div>
            </body>
        </html>")

	' Wait for content to load
	Await page.WaitForSelectorAsync(".invoice-header")

	' Generate PDF
	Await page.PdfAsync("invoice.pdf", New PdfOptions With {
		.Format = PaperFormat.A4,
		.MarginOptions = New MarginOptions With {
			.Top = "40px",
			.Bottom = "40px",
			.Left = "40px",
			.Right = "40px"
		}
	})
Finally
	' Clean up browser instance
	Await browser.CloseAsync()
End Try
$vbLabelText   $csharpLabel

L'approche de Puppeteer Sharp nécessite plus de configuration :

  • Téléchargement et gestion du navigateur (~170Mo de Chromium)
  • Nettoyage des ressources explicite avec try/finally
  • Conditions d'attente manuelles pour le contenu dynamique
  • Spécifications de marges basées sur des chaînes

D'après les discussions sur Stack Overflow , les développeurs rencontrent fréquemment des difficultés liées au dimensionnement des pages et à la cohérence du rendu dans Puppeteer Sharp.

Travailler avec du contenu dynamique

IronPDF avec JavaScript :

using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure JavaScript execution
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 2000; // Wait 2 seconds for JS

// Render a page with dynamic charts
var pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard");

// Apply security settings
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;

pdf.SaveAs("secure-dashboard.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure JavaScript execution
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 2000; // Wait 2 seconds for JS

// Render a page with dynamic charts
var pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard");

// Apply security settings
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;

pdf.SaveAs("secure-dashboard.pdf");
Imports IronPdf

Private renderer = New ChromePdfRenderer()

' Configure JavaScript execution
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.RenderDelay = 2000 ' Wait 2 seconds for JS

' Render a page with dynamic charts
Dim pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard")

' Apply security settings
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint

pdf.SaveAs("secure-dashboard.pdf")
$vbLabelText   $csharpLabel

L'approche de IronPDF pour le contenu dynamique se concentre sur la simplicité. L'option RenderDelay fournit un moyen direct d'attendre l'exécution et le rendu JavaScript. Avantages additionnels :

  • Fonctionnalités de sécurité intégrées directement
  • Pas besoin de gérer les états du navigateur
  • Rendu cohérent à travers les environnements

Pour des scénarios JavaScript plus complexes, IronPDF propose la classe WaitFor pour un contrôle de synchronisation précis.

Puppeteer Sharp avec contenu dynamique :

using PuppeteerSharp;

var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
var page = await browser.NewPageAsync();

// Navigate to page
await page.GoToAsync("https://example.com/dashboard", new NavigationOptions
{
    WaitUntil = new[] { WaitUntilNavigation.Networkidle0 }
});

// Execute custom JavaScript
await page.EvaluateExpressionAsync(@"
    // Trigger chart rendering
    document.dispatchEvent(new Event('load-charts'));
");

// Wait for specific element
await page.WaitForSelectorAsync(".chart-container", new WaitForSelectorOptions
{
    Visible = true,
    Timeout = 30000
});

// Generate PDF (no built-in security features)
await page.PdfAsync("dashboard.pdf");

await browser.CloseAsync();
using PuppeteerSharp;

var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
var page = await browser.NewPageAsync();

// Navigate to page
await page.GoToAsync("https://example.com/dashboard", new NavigationOptions
{
    WaitUntil = new[] { WaitUntilNavigation.Networkidle0 }
});

// Execute custom JavaScript
await page.EvaluateExpressionAsync(@"
    // Trigger chart rendering
    document.dispatchEvent(new Event('load-charts'));
");

// Wait for specific element
await page.WaitForSelectorAsync(".chart-container", new WaitForSelectorOptions
{
    Visible = true,
    Timeout = 30000
});

// Generate PDF (no built-in security features)
await page.PdfAsync("dashboard.pdf");

await browser.CloseAsync();
Imports PuppeteerSharp

Private browser = await Puppeteer.LaunchAsync(New LaunchOptions With {.Headless = True})
Private page = await browser.NewPageAsync()

' Navigate to page
Await page.GoToAsync("https://example.com/dashboard", New NavigationOptions With {
	.WaitUntil = { WaitUntilNavigation.Networkidle0 }
})

' Execute custom JavaScript
Await page.EvaluateExpressionAsync("
    // Trigger chart rendering
    document.dispatchEvent(new Event('load-charts'));
")

' Wait for specific element
Await page.WaitForSelectorAsync(".chart-container", New WaitForSelectorOptions With {
	.Visible = True,
	.Timeout = 30000
})

' Generate PDF (no built-in security features)
Await page.PdfAsync("dashboard.pdf")

Await browser.CloseAsync()
$vbLabelText   $csharpLabel

Puppeteer Sharp excelle dans les interactions de navigateur complexes :

  • Contrôle précis de la navigation sur la page
  • Exécution JavaScript personnalisée
  • Conditions d'attente flexibles
  • Manipulation directe du DOM

Les fonctionnalités de sécurité telles que le chiffrement et la protection par mot de passe ne font pas partie du périmètre de Puppeteer Sharp ; les équipes ayant besoin de ces fonctionnalités devront donc intégrer une bibliothèque PDF distincte, comme indiqué dans la documentation officielle .

Opérations avancées sur PDF

IronPDF - Flux de documents complet :

using IronPdf;
using IronPdf.Signing;

// Create initial PDF from HTML template
var renderer = new ChromePdfRenderer();
var invoice = renderer.RenderHtmlFileAsPdf("invoice-template.html");

// Add watermark
invoice.ApplyWatermark("<h2 style='color:red; opacity:0.5'>CONFIDENTIAL</h2>", 
    30, IronPdf.Editing.VerticalAlignment.Middle, 
    IronPdf.Editing.HorizontalAlignment.Center);

// Merge with terms and conditions
var terms = PdfDocument.FromFile("terms.pdf");
var combined = PdfDocument.Merge(invoice, terms);

// Add digital signature
var signature = new PdfSignature("certificate.pfx", "password");
combined.Sign(signature);

// Set metadata
combined.MetaData.Author = "Accounting Department";
combined.MetaData.Title = "Invoice #12345";
combined.MetaData.CreationDate = DateTime.Now;

// Compress and save
combined.CompressImages(90);
combined.SaveAs("final-invoice.pdf");
using IronPdf;
using IronPdf.Signing;

// Create initial PDF from HTML template
var renderer = new ChromePdfRenderer();
var invoice = renderer.RenderHtmlFileAsPdf("invoice-template.html");

// Add watermark
invoice.ApplyWatermark("<h2 style='color:red; opacity:0.5'>CONFIDENTIAL</h2>", 
    30, IronPdf.Editing.VerticalAlignment.Middle, 
    IronPdf.Editing.HorizontalAlignment.Center);

// Merge with terms and conditions
var terms = PdfDocument.FromFile("terms.pdf");
var combined = PdfDocument.Merge(invoice, terms);

// Add digital signature
var signature = new PdfSignature("certificate.pfx", "password");
combined.Sign(signature);

// Set metadata
combined.MetaData.Author = "Accounting Department";
combined.MetaData.Title = "Invoice #12345";
combined.MetaData.CreationDate = DateTime.Now;

// Compress and save
combined.CompressImages(90);
combined.SaveAs("final-invoice.pdf");
Imports IronPdf
Imports IronPdf.Signing

' Create initial PDF from HTML template
Private renderer = New ChromePdfRenderer()
Private invoice = renderer.RenderHtmlFileAsPdf("invoice-template.html")

' Add watermark
invoice.ApplyWatermark("<h2 style='color:red; opacity:0.5'>CONFIDENTIAL</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)

' Merge with terms and conditions
Dim terms = PdfDocument.FromFile("terms.pdf")
Dim combined = PdfDocument.Merge(invoice, terms)

' Add digital signature
Dim signature = New PdfSignature("certificate.pfx", "password")
combined.Sign(signature)

' Set metadata
combined.MetaData.Author = "Accounting Department"
combined.MetaData.Title = "Invoice #12345"
combined.MetaData.CreationDate = DateTime.Now

' Compress and save
combined.CompressImages(90)
combined.SaveAs("final-invoice.pdf")
$vbLabelText   $csharpLabel

Ce exemple présente les capacités complètes de manipulation PDF d'IronPDF :

  • Génération basée sur des modèles à partir de fichiers HTML
  • Filigranage avec contrôle de style CSS
  • Fusion de documents pour des PDF multi-parties
  • Signatures numériques pour l'authentification
  • Gestion des métadonnées pour les propriétés des documents
  • Compression d'images pour réduire la taille des fichiers

Les fonctionnalités d'estampillage et la prise en charge des signatures numériques rendent IronPDF adapté aux flux de travail de documents en entreprise.

Puppeteer Sharp - Focus sur l'automatisation du navigateur :

using PuppeteerSharp;

var browser = await Puppeteer.LaunchAsync(new LaunchOptions 
{ 
    Headless = false, // Show browser for debugging
    SlowMo = 50 // Slow down actions
});

var page = await browser.NewPageAsync();

// Navigate to web application
await page.GoToAsync("https://app.example.com/login");

// Automate login
await page.TypeAsync("#username", "user@example.com");
await page.TypeAsync("#password", "password123");
await page.ClickAsync("#login-button");

// Wait for dashboard
await page.WaitForNavigationAsync();

// Take screenshot for documentation
await page.ScreenshotAsync("dashboard-screenshot.png", new ScreenshotOptions
{
    FullPage = true,
    Type = ScreenshotType.Png
});

// Generate report PDF
await page.ClickAsync("#generate-report");
await page.WaitForSelectorAsync(".report-ready");

// Save the generated report
await page.PdfAsync("automated-report.pdf", new PdfOptions
{
    DisplayHeaderFooter = true,
    HeaderTemplate = "<div style='font-size:10px;'>Report Header</div>",
    FooterTemplate = "<div style='font-size:10px;'>Page <span class='pageNumber'></span></div>",
    Format = PaperFormat.A4
});

await browser.CloseAsync();
using PuppeteerSharp;

var browser = await Puppeteer.LaunchAsync(new LaunchOptions 
{ 
    Headless = false, // Show browser for debugging
    SlowMo = 50 // Slow down actions
});

var page = await browser.NewPageAsync();

// Navigate to web application
await page.GoToAsync("https://app.example.com/login");

// Automate login
await page.TypeAsync("#username", "user@example.com");
await page.TypeAsync("#password", "password123");
await page.ClickAsync("#login-button");

// Wait for dashboard
await page.WaitForNavigationAsync();

// Take screenshot for documentation
await page.ScreenshotAsync("dashboard-screenshot.png", new ScreenshotOptions
{
    FullPage = true,
    Type = ScreenshotType.Png
});

// Generate report PDF
await page.ClickAsync("#generate-report");
await page.WaitForSelectorAsync(".report-ready");

// Save the generated report
await page.PdfAsync("automated-report.pdf", new PdfOptions
{
    DisplayHeaderFooter = true,
    HeaderTemplate = "<div style='font-size:10px;'>Report Header</div>",
    FooterTemplate = "<div style='font-size:10px;'>Page <span class='pageNumber'></span></div>",
    Format = PaperFormat.A4
});

await browser.CloseAsync();
Imports PuppeteerSharp

Private browser = await Puppeteer.LaunchAsync(New LaunchOptions With {
	.Headless = False,
	.SlowMo = 50
})

Private page = await browser.NewPageAsync()

' Navigate to web application
Await page.GoToAsync("https://app.example.com/login")

' Automate login
Await page.TypeAsync("#username", "user@example.com")
Await page.TypeAsync("#password", "password123")
Await page.ClickAsync("#login-button")

' Wait for dashboard
Await page.WaitForNavigationAsync()

' Take screenshot for documentation
Await page.ScreenshotAsync("dashboard-screenshot.png", New ScreenshotOptions With {
	.FullPage = True,
	.Type = ScreenshotType.Png
})

' Generate report PDF
Await page.ClickAsync("#generate-report")
Await page.WaitForSelectorAsync(".report-ready")

' Save the generated report
Await page.PdfAsync("automated-report.pdf", New PdfOptions With {
	.DisplayHeaderFooter = True,
	.HeaderTemplate = "<div style='font-size:10px;'>Report Header</div>",
	.FooterTemplate = "<div style='font-size:10px;'>Page <span class='pageNumber'></span></div>",
	.Format = PaperFormat.A4
})

Await browser.CloseAsync()
$vbLabelText   $csharpLabel

La force de Puppeteer Sharp réside dans les scénarios d'automatisation du navigateur :

  • Connexion automatisée et navigation
  • Capture de captures d'écran à tout moment
  • Interaction avec les applications web
  • Génération de rapports dynamiques à partir d'applications web

Comme noté par ZenRows, "Puppeteer Sharp peut simuler plusieurs interactions utilisateur automatisées. Cela inclut les mouvements de souris, les attentes, et plus encore."

Quels sont les considérations de performance ?

Performance d'IronPDF

IronPDF est optimisé pour les opérations PDF avec plusieurs fonctionnalités de performance :

  • Gestion de la mémoire :
    • Utilisation efficace de la mémoire grâce au ramasse-miettes .NET
  • Optimisation du traitement par lots

    • Prise en charge du streaming pour les documents volumineux
  • Multi-threading :

    • Prise en charge complète des async/await
    • Capacités de génération PDF en parallèle
    • Opérations thread-safe
  • Vitesse de rendu :
    • Moyenne de 0,8-1,2 secondes pour un HTML typique en PDF
    • Le moteur Chrome intégré élimine la surcharge de processus externe
  • Mécanismes de mise en cache pour les opérations répétées

Selon les guides d'optimisation des performances, le rendu initial de IronPDF peut être plus lent dû à l'initialisation du moteur, mais les opérations ultérieures sont hautement optimisées.

Performance de Puppeteer Sharp

Les caractéristiques de performance de Puppeteer Sharp diffèrent en raison de son architecture :

  • Surcharge du navigateur :

    • Télécharger ~170Mo de Chromium requis
    • 150-200Mo de RAM par instance de navigateur
    • Le temps de lancement du navigateur ajoute 1-3 secondes
  • Vitesse de rendu :

    • 0,3-0,5 secondes pour un HTML simple
    • Les performances peuvent diminuer avec plusieurs instances simultanées
    • Ressource intensive pour les opérations simultanées
  • Stratégies d'optimisation :
    • Réutilisation de l'instance de navigateur recommandée
    • Pooling de connexion pour plusieurs PDF
  • Mode sans tête réduit les surcharges

Les tests de performance montrent que Puppeteer peut être plus rapide pour le HTML simple mais nécessite une gestion attentive des ressources pour une utilisation en production.

Comment les tarifs et licences se comparent-ils ?

Structure tarifaire de IronPDF

IronPDF propose des options de licence commerciale flexibles :

  • Niveaux de licence (tarification à partir de 2025) :

    • Lite License: $999 - 1 développeur, 1 lieu, 1 projet
    • Plus License: $1,499 - 3 développeurs, 3 lieux, 3 projets
    • Licence Professional: $2,999 - 10 développeurs, 10 lieux, 10 projets
    • Licence Illimitée : Tarification personnalisée pour des équipes plus importantes
  • Options supplémentaires :

    • Redistribution libre de droits : +$2,999
    • Licence SaaS/OEM disponible
    • Iron Suite : $1,498 pour 9 produits
    • Garantie de remboursement de 30 jours
  • Support et mises à jour :
    • Un an de support et de mises à jour inclus
    • Support étendu : 999 $/an ou 1 999 $ pour 5 ans
    • Support 24/5 avec chaque licence

Licences de Puppeteer Sharp

Puppeteer Sharp utilise la licence MIT :

  • Coût : Complètement gratuit
  • Utilisation commerciale : Autorisée sans restrictions
  • Support : Basé sur la communauté via GitHub
  • Mises à jour : Conduites par la communauté open-source

Bien que la licence elle-même soit gratuite, les équipes doivent prendre en compte le coût total du projet :

  • Le support repose sur la communauté open source plutôt que sur une équipe dédiée.
  • La gestion de l'infrastructure incombe à votre équipe
  • Les fonctionnalités PDF avancées nécessitent l'intégration de bibliothèques supplémentaires
  • Le dépannage repose souvent sur les forums communautaires et l'autodiagnostic.

Comme discuté sur la communauté dotnet de Reddit, le choix dépend souvent de si le support professionnel et les fonctionnalités avancées justifient l'investissement.

Au-delà du coût de la licence, le coût total du projet comprend les heures de développement consacrées à la gestion du code du cycle de vie du navigateur, à l'intégration de bibliothèques distinctes pour le chiffrement et les signatures numériques, et au dépannage des problèmes de déploiement dans différents environnements sans support dédié. Pour les équipes évaluant les coûts sur un cycle de vie de projet pluriannuel, ces coûts d'intégration et de maintenance éclipsent fréquemment la différence entre les licences open source et commerciales.

Comment se comparent la documentation et le support ?

Documentation et support de IronPDF

IronPDF fournit des ressources professionnelles complètes :

  • Documentation :
  • Référence API étendue
  • Plus de 200 exemples de code

    • Tutoriels vidéo sur YouTube
    • Mises à jour régulières de la documentation
  • Canaux de support :

    • Support en direct 24/5
    • Support par e-mail et téléphone (dépend de la licence)
    • Sessions de partage d'écran pour les problèmes complexes
    • Forum communautaire
    • Canal Slack pour les discussions
  • Ressources d'apprentissage :
  • Guides de démarrage
  • Section de dépannage
    • Documentation sur les meilleures pratiques
    • Guides de migration depuis d'autres bibliothèques

Documentation et support de Puppeteer Sharp

Puppeteer Sharp repose sur les ressources communautaires :

  • Documentation :
  • Documentation API

    • README GitHub et wiki
    • Exemples de code dans le dépôt
    • Liens vers la documentation originale de Puppeteer
  • Options de support :

    • Problèmes GitHub pour les rapports de bugs
    • Discussions communautaires
    • Questions sur Stack Overflow
    • Aucun canal de support officiel
  • Considérations :
    • Les mises à jour de la documentation suivent le cycle de contribution open source
    • La plupart des ajouts de contenu sont effectués par les membres de la communauté. Les guides de dépannage ont une portée plus restreinte que les bibliothèques commerciales.
    • Certains exemples reflètent des versions antérieures de l'API

Le blog des développeurs fournit des informations techniques utiles, même si les articles sont publiés selon le calendrier du responsable plutôt qu'à une cadence fixe.

Quelle bibliothèque PDF devriez-vous choisir ?

La décision entre IronPDF et Puppeteer Sharp dépend de vos besoins spécifiques et de votre cas d'utilisation.

Choisissez IronPDF lorsque :

  • Développer des applications d'entreprise nécessitant des PDF professionnels sécurisés
  • Besoin de fonctionnalités PDF complètes au-delà de la génération de base
  • Souhaitez une complexité de code minimale avec des API simples
  • Exiger un support professionnel et une documentation
  • Travailler avec plusieurs formats PDF (DOCX, images, etc.)
  • Nécessité de fonctionnalités de sécurité intégrées telles que le chiffrement et les signatures
  • Déploiement sur diverses plateformes sans soucis de compatibilité
  • Valorisez le temps de mise sur le marché par rapport au coût initial

IronPDF excelle dans des scénarios tels que :

  • Génération de factures et de rapports
  • Systèmes de gestion de documents
  • Documentation nécessitant la conformité
  • Traitement de documents multi-format
  • Opérations PDF de grande envergure

Choisissez Puppeteer Sharp lorsque :

  • Le principal objectif est l'automatisation du navigateur avec le PDF en second
  • Les contraintes budgétaires empêchent des licences commerciales
  • Besoins en capacités de web scraping en plus de la génération de PDF
  • À l'aise avec la gestion de l'infrastructure du navigateur
  • Besoin de PDF simples sans caractéristiques avancées
  • Possédez des connaissances existantes sur Puppeteer depuis Node.js
  • Construire des cadres de test ou des outils d'automatisation

Puppeteer Sharp fonctionne bien pour :

  • Tests automatisés avec rapports PDF
  • Web scraping avec exportation PDF
  • Conversion HTML simple en PDF
  • Flux de travail de capture de captures d'écran
  • Tâches d'automatisation basées sur le navigateur

Recommandations pratiques

Basé sur des analyses comparatives et des retours des développeurs, voici des recommandations pratiques :

  1. Pour les applications en production : La fiabilité, le support et les fonctionnalités de IronPDF justifient l'investissement
  2. Pour les prototypes : La licence gratuite de Puppeteer Sharp permet une expérimentation rapide
  3. Pour des PDF complexes : Les fonctionnalités avancées de IronPDF économisent du temps de développement
  4. Pour les Tests de Navigateur : Les capacités d'automatisation de Puppeteer Sharp sont inégalées

Support des cadres CSS modernes

Les deux IronPDF et Puppeteer Sharp utilisent des moteurs de rendu Chromium, ce qui signifie que les deux peuvent théoriquement gérer des frameworks CSS modernes comme Bootstrap, Tailwind CSS, et Foundation. Cependant, la complexité de l'implémentation et l'expérience utilisateur diffèrent significativement.

IronPDF : Rendu simplifié de Bootstrap

L'API axée sur le PDF de IronPDF rend le rendu des mises en page Bootstrap simple avec un minimum de code :

Conversion en une seule ligne : aucune gestion du cycle de vie du navigateur requise

  • Optimisation intégrée : gestion automatique du chargement CSS/ JavaScript
  • Compatible Bootstrap 5 : Prise en charge complète de la page d'accueil et des modèles Bootstrap
  • Prêt pour la production : Inclut des fonctionnalités de sécurité, de compression et Enterprise

Exemple de code : Rendu de Bootstrap avec IronPDF

using IronPdf;

// Simple, direct Bootstrap rendering
var renderer = new ChromePdfRenderer();

string bootstrapContent = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container mt-5'>
        <div class='row'>
            <div class='col-md-4 mb-4'>
                <div class='card shadow'>
                    <div class='card-body'>
                        <h5 class='card-title'>Quick Start</h5>
                        <p class='card-text'>Render Bootstrap with one method call.</p>
                        <a href='#' class='btn btn-primary'>Learn More</a>
                    </div>
                </div>
            </div>

        </div>
    </div>
</body>
</html>";

// Single method call - no browser management
var pdf = renderer.RenderHtmlAsPdf(bootstrapContent);
pdf.SaveAs("bootstrap-layout.pdf");
using IronPdf;

// Simple, direct Bootstrap rendering
var renderer = new ChromePdfRenderer();

string bootstrapContent = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container mt-5'>
        <div class='row'>
            <div class='col-md-4 mb-4'>
                <div class='card shadow'>
                    <div class='card-body'>
                        <h5 class='card-title'>Quick Start</h5>
                        <p class='card-text'>Render Bootstrap with one method call.</p>
                        <a href='#' class='btn btn-primary'>Learn More</a>
                    </div>
                </div>
            </div>

        </div>
    </div>
</body>
</html>";

// Single method call - no browser management
var pdf = renderer.RenderHtmlAsPdf(bootstrapContent);
pdf.SaveAs("bootstrap-layout.pdf");
Imports IronPdf

' Simple, direct Bootstrap rendering
Dim renderer As New ChromePdfRenderer()

Dim bootstrapContent As String = "
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container mt-5'>
        <div class='row'>
            <div class='col-md-4 mb-4'>
                <div class='card shadow'>
                    <div class='card-body'>
                        <h5 class='card-title'>Quick Start</h5>
                        <p class='card-text'>Render Bootstrap with one method call.</p>
                        <a href='#' class='btn btn-primary'>Learn More</a>
                    </div>
                </div>
            </div>

        </div>
    </div>
</body>
</html>"

' Single method call - no browser management
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapContent)
pdf.SaveAs("bootstrap-layout.pdf")
$vbLabelText   $csharpLabel

Puppeteer Sharp : Rendu Bootstrap basé sur le navigateur

Puppeteer Sharp nécessite une gestion explicite du navigateur et du cycle de vie pour le rendu de Bootstrap :

Exemple de code : Rendu de Bootstrap avec Puppeteer Sharp

using PuppeteerSharp;

// Download Chromium if needed (one-time ~170MB)
await new BrowserFetcher().DownloadAsync();

// Launch browser instance
var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });

try
{
    var page = await browser.NewPageAsync();

    // Set Bootstrap content
    await page.SetContentAsync(@"
    <!DOCTYPE html>
    <html>
    <head>
        <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    </head>
    <body>
        <div class='container mt-5'>
            <div class='row'>
                <div class='col-md-4 mb-4'>
                    <div class='card shadow'>
                        <div class='card-body'>
                            <h5 class='card-title'>Quick Start</h5>
                            <p class='card-text'>Render Bootstrap with browser automation.</p>
                            <a href='#' class='btn btn-primary'>Learn More</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>");

    // Wait for Bootstrap CSS to load
    await page.WaitForNetworkIdleAsync();

    // Generate PDF
    await page.PdfAsync("bootstrap-layout.pdf");
}
finally
{
    // Required cleanup
    await browser.CloseAsync();
}
using PuppeteerSharp;

// Download Chromium if needed (one-time ~170MB)
await new BrowserFetcher().DownloadAsync();

// Launch browser instance
var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });

try
{
    var page = await browser.NewPageAsync();

    // Set Bootstrap content
    await page.SetContentAsync(@"
    <!DOCTYPE html>
    <html>
    <head>
        <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    </head>
    <body>
        <div class='container mt-5'>
            <div class='row'>
                <div class='col-md-4 mb-4'>
                    <div class='card shadow'>
                        <div class='card-body'>
                            <h5 class='card-title'>Quick Start</h5>
                            <p class='card-text'>Render Bootstrap with browser automation.</p>
                            <a href='#' class='btn btn-primary'>Learn More</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>");

    // Wait for Bootstrap CSS to load
    await page.WaitForNetworkIdleAsync();

    // Generate PDF
    await page.PdfAsync("bootstrap-layout.pdf");
}
finally
{
    // Required cleanup
    await browser.CloseAsync();
}
Imports PuppeteerSharp

' Download Chromium if needed (one-time ~170MB)
Await (New BrowserFetcher()).DownloadAsync()

' Launch browser instance
Dim browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {.Headless = True})

Try
    Dim page = Await browser.NewPageAsync()

    ' Set Bootstrap content
    Await page.SetContentAsync("
    <!DOCTYPE html>
    <html>
    <head>
        <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    </head>
    <body>
        <div class='container mt-5'>
            <div class='row'>
                <div class='col-md-4 mb-4'>
                    <div class='card shadow'>
                        <div class='card-body'>
                            <h5 class='card-title'>Quick Start</h5>
                            <p class='card-text'>Render Bootstrap with browser automation.</p>
                            <a href='#' class='btn btn-primary'>Learn More</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>")

    ' Wait for Bootstrap CSS to load
    Await page.WaitForNetworkIdleAsync()

    ' Generate PDF
    Await page.PdfAsync("bootstrap-layout.pdf")
Finally
    ' Required cleanup
    Await browser.CloseAsync()
End Try
$vbLabelText   $csharpLabel

Différences clés pour le développement Bootstrap

Complexité :

  • IronPDF: 4 lignes de code (initialisation, rendu, sauvegarde)
  • Puppeteer Sharp : plus de 15 lignes (téléchargement, lancement, gestion de page, nettoyage)

Caractéristiques :

  • IronPDF: Sécurité intégrée, compression, filigrane, signatures
  • Puppeteer Sharp : Les équipes ayant besoin de manipuler des fichiers PDF ajoutent des bibliothèques distinctes

Déploiement :

  • IronPDF: Autonome, sans dépendances externes
  • Puppeteer Sharp : Nécessite les binaires Chromium (~170 Mo) et la gestion du navigateur

Les deux bibliothèques rendent Bootstrap avec précision puisqu'elles utilisent des moteurs Chromium. Le choix dépend de si vous avez besoin d'un flux de travail de génération de PDF simple (IronPDF) ou de fonctionnalités plus larges d'automatisation du navigateur (Puppeteer Sharp).

Pour plus d'informations sur la compatibilité des frameworks CSS, consultez le Guide Bootstrap & Flexbox CSS.

Le Mot de la Fin

IronPDF et Puppeteer Sharp répondent tous deux à des besoins différents au sein de l'écosystème .NET . IronPDF offre une solution PDF complète dotée d'un large éventail de fonctionnalités, d'une assistance Professional et d'API conçues spécifiquement pour les opérations PDF. Il offre tout ce dont on a besoin pour les flux de travail PDF en Enterprise (génération, édition, sécurité et signature) dans un seul et même package bien documenté.

Puppeteer Sharp est un outil d'automatisation de navigateur particulièrement performant, l'exportation PDF étant l'une de ses fonctionnalités. Pour les équipes dont l'activité principale consiste à contrôler un navigateur sans interface graphique, à extraire des données du Web ou à réaliser des tests automatisés, c'est un choix judicieux. Sa licence MIT et sa communauté active le rendent accessible aux projets dont les besoins en génération de PDF sont simples.

Pour les applications professionnelles nécessitant une génération de PDF fiable ainsi que des fonctionnalités de manipulation, de sécurité et de conformité, IronPDF est la solution la plus pratique. Le gain de temps pour les développeurs grâce aux API dédiées et à l'assistance Professional compense souvent le coût de la licence. Cela dit, Puppeteer Sharp reste une option intéressante lorsque l'automatisation du navigateur est la priorité et que la génération de PDF est secondaire.

Prêt à faire l'expérience de la différence ? Commencez avec l'essai gratuit de 30 jours de IronPDF pour explorer ses fonctionnalités complètes et voir comment il peut simplifier vos flux de travail PDF. Que vous construisiez des factures, des rapports ou des systèmes de documents complexes, IronPDF fournit les outils et le support nécessaires pour réussir.

Commencez à utiliser IronPDF dans votre projet aujourd'hui avec un essai gratuit.

Première étape :
green arrow pointer

Veuillez noterPuppeteer Sharp est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé ou sponsorisé par Puppeteer Sharp. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.

Questions Fréquemment Posées

Comment puis-je convertir HTML en PDF en C# ?

Vous pouvez utiliser la méthode RenderHtmlAsPdf d'IronPDF pour convertir des chaînes HTML en PDFs. Vous pouvez également convertir des fichiers HTML en PDFs en utilisant RenderHtmlFileAsPdf.

Quelles sont les principales différences entre IronPDF et Puppeteer Sharp ?

IronPDF est une bibliothèque PDF complète conçue spécifiquement pour les développeurs .NET, offrant des fonctionnalités étendues de manipulation PDF telles que le cryptage, la signature et l'édition. Puppeteer Sharp est un outil d'automatisation de navigateur qui peut générer des PDF comme l'une de ses fonctionnalités, se concentrant principalement sur le contrôle de Chrome sans tête pour les tests et le web scraping.

Puis-je ajouter des fonctionnalités de sécurité aux PDF par programme ?

IronPDF offre des fonctionnalités de sécurité complètes, y compris le chiffrement AES-256, la protection par mot de passe et le contrôle granularisé des permissions. Vous pouvez définir des mots de passe utilisateur et propriétaire, restreindre l'impression, la copie et l'édition via la propriété SecuritySettings. Les signatures numériques sont également prises en charge nativement.

Quelle bibliothèque offre une meilleure compatibilité multiplateforme ?

IronPDF offre une compatibilité multiplateforme supérieure avec un support natif pour Windows, Linux, macOS, Docker, Azure et AWS. Il prend en charge .NET 10, 9, 8, 7, 6, Core, Standard et Framework sans nécessiter de configuration ou de packages supplémentaires pour différents environnements.

Comment ces bibliothèques gèrent-elles le rendu JavaScript ?

Les deux bibliothèques prennent en charge l'exécution de JavaScript puisqu'elles utilisent un rendu basé sur Chrome. IronPDF propose des options simples de délai de rendu et la classe WaitFor pour le contrôle du timing. Puppeteer Sharp offre un contrôle plus détaillé avec des conditions d'attente et des capacités d'exécution directe de JavaScript.

Quels sont les coûts de licence de ces bibliothèques ?

IronPDF utilise une licence commerciale à partir de 749 $ pour une licence Lite (1 développeur, 1 projet). Divers niveaux sont disponibles jusqu'à la licence illimitée pour entreprise. Puppeteer Sharp est entièrement gratuit sous la licence MIT mais manque de support professionnel et de fonctionnalités avancées.

Puis-je éditer des documents PDF existants avec ces bibliothèques ?

IronPDF offre des capacités étendues de modification de PDF, y compris la fusion, la séparation, l'ajout de filigranes, d'en-têtes/pieds de page, le remplissage de formulaires et la manipulation des pages. Puppeteer Sharp génère uniquement des PDF et nécessite des bibliothèques supplémentaires pour toute opération de modification.

L'automatisation du navigateur est-elle possible avec les deux bibliothèques ?

Puppeteer Sharp excelle dans l'automatisation du navigateur, offrant un contrôle total sur Chrome sans tête, y compris la navigation, le remplissage de formulaires et la capture d'écran. IronPDF se concentre sur les opérations PDF et ne fournit pas de fonctionnalités d'automatisation du navigateur au-delà du rendu de contenu web en PDF.

Quel type de support aux développeurs est disponible ?

IronPDF fournit un support professionnel d'ingénieur 24/5, une documentation étendue, des tutoriels et des références d'API. Le support inclut des options par email, téléphone et partage d'écran, selon le niveau de licence. Puppeteer Sharp s'appuie sur le support communautaire via GitHub et Stack Overflow.

Comment gérer le contenu dynamique et les éléments chargés par AJAX dans les PDF ?

IronPDF gère le contenu dynamique via des retards de rendu et des paramètres d'exécution JavaScript. Vous pouvez définir un RenderDelay ou utiliser la classe WaitFor pour un timing précis. Puppeteer Sharp fournit des conditions d'attente, des options de navigation et une exécution JavaScript directe pour des scénarios de contenu dynamique complexes.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur de la technologie chez Iron Software et un ingénieur visionnaire pionnier de la technologie C# PDF. En tant que développeur à l'origine de la base de code centrale d'Iron Software, il a façonné l'architecture des produits de l'entreprise depuis sa création, ...

Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi