Passer au contenu du pied de page
COMPARAISONS DE PRODUITS

IronPDF vs PDFTron (Apryse) : La comparaison complète des bibliothèques PDF C# pour 2025

Vous cherchez la bonne bibliothèque PDF pour votre projet .NET ? Cette comparaison complète entre IronPDF et PDFTron (désormais Apryse) analyse les fonctionnalités, les prix, les performances et l'expérience développeur pour vous aider à prendre une décision éclairée. Que vous créiez des applications web, des logiciels de bureau ou des services cloud, choisir le bon ensemble d'outils PDF peut avoir un impact significatif sur la vitesse de développement et le succès du projet.

Résumé de la comparaison rapide

Catégorie Fonctionnalité/Aspect IronPDF PDFTron (Apryse) Avantage Clé
Architecture de Base Philosophie de Conception Simplicité d'abord, moteur Chrome V8 Axé sur l'entreprise, moteur personnalisé IronPDF : Développement plus rapide
Complexité de l'API Méthodes simples comme RenderHtmlAsPdf() IronPDF : 70% de code en moins
Courbe d'Apprentissage 1-2 jours typiques 1-2 semaines typiques IronPDF : Adoption plus rapide
Support de la Plateforme Multiplateforme Support natif, package unique Packages/modules multiples nécessaires IronPDF : Déploiement plus simple
Versions .NET .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ Support similaire avec configuration supplémentaire Les deux : Support des frameworks modernes
HTML en PDF Moteur de Rendu Moteur complet Chrome V8 Moteur personnalisé (via module HTML2PDF) IronPDF : Fidélité au navigateur 98%+
Support JavaScript Support complet avec délais de rendu Support limité IronPDF : Prêt pour le contenu dynamique
Support MS Office DOCX en PDF Intégré DocxToPdfRenderer PDFTron : Meilleure fidélité Office
Support CAO Non disponible DWG, DXF, DGN en PDF PDFTron : Flux de travail CAO
Performance Vitesse de Rendu HTML 0.8-1.2s typiques (moteur Chrome) 0.3-0.5s typiques (HTML simple) PDFTron : Plus rapide pour HTML basique
Utilisation de la Mémoire 150-200MB (processus Chrome) 80-120MB typiques PDFTron : Empreinte mémoire plus faible
Licence & Tarification Niveau d'entrée Lite : $799 (1 dev, 1 projet) Devis personnalisé (env. ,000-,000+) IronPDF : Tarification transparente
Entreprise Professionnel : $2,399 (10 devs) Devis personnalisé (env. ,000+) IronPDF : Jusqu'à 90% d'économies de coût
Support Support Inclus Oui, support technique 24/5 Varie selon le niveau de licence IronPDF : Support inclus
Meilleur Pour Cas d'Utilisation Applications web modernes, rapports HTML, développement rapide Flux de travail lourds en documents, conversion CAO/Office Dépend du contexte

Qu'est-ce qu'IronPDF et PDFTron (Apryse) ?

Aperçu d'IronPDF

IronPDF est une bibliothèque complète .NET PDF qui simplifie la création, l'édition et la manipulation de PDF pour les développeurs. Construit sur un moteur de rendu Chrome, il excelle à convertir HTML, CSS et JavaScript en documents PDF parfaits en pixels. La conception API simple de la bibliothèque permet aux développeurs d'intégrer la fonctionnalité PDF avec un code minimal, ce qui la rend idéale pour les applications Web, les systèmes de rapport et l'automatisation documentaire.

Aperçu de PDFTron (Apryse)

PDFTron, rebaptisé Apryse en février 2023, est un SDK PDF axé sur l'entreprise qui offre des capacités étendues de traitement des documents. Initialement développé pour les flux de travail de documents complexes, il offre un support robuste pour divers formats de fichiers, y compris Microsoft Office, les dessins CAD et les types de documents spécialisés. PDFTron Systems Inc., un leader mondial dans la technologie de traitement des documents, a annoncé son rebranding en Apryse ; rassemblant 13 entreprises, y compris iText, Windward, Eversign, et plus encore.

Comment créer un projet ASP.NET pour la génération de PDF ?

La mise en place d'un projet ASP.NET pour la génération de PDF nécessite une configuration appropriée, quel que soit la bibliothèque que vous choisissez. Suivez ces étapes pour créer une base pour l'intégration soit d'IronPDF soit de PDFTron :

  1. Ouvrez Visual Studio 2022 ou une version ultérieure
  2. Cliquez sur "Créer un nouveau projet"
  3. Sélectionnez "Application Web ASP.NET Core" (.NET 6.0 ou plus recommandé)
  4. Choisissez votre nom de projet et l'emplacement
  5. Sélectionnez "Application Web (Modèle-Vue-Contrôleur)" ou "API Web" en fonction de vos besoins
  6. Assurez-vous que ".NET 8.0" ou une version ultérieure est sélectionnée pour une compatibilité optimale

Boîte de dialogue de nouveau projet dans Visual Studio montrant la sélection ASP.NET Core Web App Boîte de dialogue de Nouveau Projet de Visual Studio affichant les modèles de projet ASP.NET pour l'intégration de bibliothèque PDF

Pour les applications Web Forms :

  • Sélectionnez "Application Web ASP.NET (.NET Framework)"
  • Choisissez "Web Forms" dans les options de modèle
  • Cliquez sur "Créer" pour générer la structure du projet

Sélection de modèle Web Forms dans l'assistant de création de projet Visual Studio Sélection du modèle Web Forms pour les applications ASP.NET traditionnelles avec des capacités PDF

Comment installer IronPDF dans mon projet C# ?

IronPDF propose plusieurs méthodes d'installation pour s'adapter à différents flux de travail de développement. Dans Visual Studio, cliquez avec le bouton droit sur votre projet dans l'Explorateur de solutions et sélectionnez "Gérer les packages NuGet...". À partir de là, il vous suffit de rechercher IronPDF et d'installer la dernière version.

Méthode 1 : Utilisation du gestionnaire de packages Visual Studio

L'approche la plus simple utilise le gestionnaire de packages NuGet intégré de Visual Studio :

  1. Cliquez avec le bouton droit sur votre projet dans l'Explorateur de solutions
  2. Sélectionnez "Gérer les packages NuGet"
  3. Cliquez sur "Parcourir" et recherchez "IronPDF"
  4. Cliquez sur "Installer" sur le package IronPDF

Menu contextuel de l'Explorateur de solutions montrant l'option Gérer les packages NuGet Accès au gestionnaire de packages NuGet via l'Explorateur de solutions de Visual Studio pour l'installation d'IronPDF

Menu projet de Visual Studio affichant les options de gestion de package Accès alternatif au gestionnaire de packages NuGet via le menu Projet de Visual Studio

Interface du gestionnaire de packages NuGet montrant l'installation d'IronPDF Installation d'IronPDF via le gestionnaire de packages NuGet avec des informations sur les versions et les dépendances

Méthode 2 : Utilisation de la console du gestionnaire de packages

Pour les développeurs qui préfèrent les outils en ligne de commande :

# Open Package Manager Console in Visual Studio
# Tools > NuGet Package Manager > Package Manager Console
Install-Package IronPdf

# For specific version installation
Install-Package IronPdf -Version 2025.7.0
# Open Package Manager Console in Visual Studio
# Tools > NuGet Package Manager > Package Manager Console
Install-Package IronPdf

# For specific version installation
Install-Package IronPdf -Version 2025.7.0
SHELL

Méthode 3 : Installation par téléchargement direct

Pour les environnements sans accès à NuGet :

  1. Téléchargez depuis le site officiel d'IronPDF
  2. Extrayez le fichier ZIP dans le répertoire de votre projet
  3. Dans Visual Studio, cliquez droit sur "Références" → "Ajouter une référence"
  4. Parcourez et sélectionnez IronPdf.dll

Méthode 4 : Utilisation de .NET CLI

Pour les passionnés de ligne de commande et les pipelines CI/CD :

# Navigate to your project directory
cd MyProject

# Install IronPDF
dotnet add package IronPdf

# Restore packages
dotnet restore
# Navigate to your project directory
cd MyProject

# Install IronPDF
dotnet add package IronPdf

# Restore packages
dotnet restore
SHELL

Comment installer le SDK PDFTron (Apryse) ?

L'installation de PDFTron implique plus d'étapes en raison de son architecture modulaire et de son orientation entreprise. Le processus varie en fonction de la plateforme cible et des fonctionnalités requises.

Prérequis

  • Visual Studio 2019 ou ultérieur
  • Charge de travail de développement pour bureau .NET
  • Outils de développement .NET Framework 4.5.1+
  • Téléchargement du SDK PDFTron

Étapes d'intégration manuelle

  1. Extrayez le SDK

    # Example extraction path
    PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/
    # Example extraction path
    PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/
    SHELL
  2. Initialisez avec la clé de licence

    // Initialize PDFTron with your license key
    pdftron.PDFNet.Initialize("your-license-key-here");
    
    // Note: Demo keys expire after evaluation period
    // Contact Apryse sales for production licenses
    // Initialize PDFTron with your license key
    pdftron.PDFNet.Initialize("your-license-key-here");
    
    // Note: Demo keys expire after evaluation period
    // Contact Apryse sales for production licenses
    ' Initialize PDFTron with your license key
    pdftron.PDFNet.Initialize("your-license-key-here")
    
    ' Note: Demo keys expire after evaluation period
    ' Contact Apryse sales for production licenses
    $vbLabelText   $csharpLabel
  3. Copiez les bibliothèques requises

    • Copiez le dossier Lib de PDFNET_BASE vers votre répertoire de projet
    • Ajoutez des références à la fois à PDFNetLoader.dll et au PDFNet.dll spécifique à la plateforme
  4. Configurez la propriété Copier local

Propriété Copier local de PDFTron définie sur False dans Visual Studio Définir la propriété Copier local de PDFNet.dll sur Faux pour un déploiement PDFTron approprié

  1. Mettez à jour App.config

    <configuration>
       <runtime>
           <loadFromRemoteSources enabled="true" />
       </runtime>
    </configuration>
    <configuration>
       <runtime>
           <loadFromRemoteSources enabled="true" />
       </runtime>
    </configuration>
    XML
  2. Configurez les événements post-construction

    xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Y
    xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Y
    SHELL

Installation NuGet (Simplifié)

Pour une approche plus simplifiée :

  1. Ouvrez le gestionnaire de packages NuGet
  2. Recherchez "PDFTron.NET.x64" ou le package spécifique à la plateforme
  3. Installez le package approprié pour votre architecture

Interface d'installation du package NuGet PDFTron Installation de PDFTron via le gestionnaire de packages NuGet avec des packages spécifiques à la plateforme

PDFTron offre une plus large variété de plus de 30 types d'annotations comparé aux 10+ types de ComPDFKit. Cependant, cet ensemble de fonctionnalités étendu nécessite une sélection minutieuse des modules lors de l'installation.

Comment puis-je convertir une URL en PDF en utilisant ces bibliothèques ?

Les deux bibliothèques fournissent une conversion URL vers PDF, mais avec des approches et capacités différentes. Examinons les détails de l'implémentation et les caractéristiques de performance de chacune.

URL vers PDF avec IronPDF

Le moteur de rendu Chrome d'IronPDF offre un support exceptionnel pour les normes Web modernes :

using IronPdf;

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

// Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS execution

// Handle authentication if needed
renderer.LoginCredentials = new ChromeHttpLoginCredentials() {
    Username = "user@domain.com",
    Password = "secure_password"
};

// Render URL to PDF with full browser capabilities
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/");

// Add metadata for document management
pdf.MetaData.Author = "Development Team";
pdf.MetaData.Title = "Website Export - " + DateTime.Now.ToString("yyyy-MM-dd");

// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("website-export.pdf");
using IronPdf;

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

// Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS execution

// Handle authentication if needed
renderer.LoginCredentials = new ChromeHttpLoginCredentials() {
    Username = "user@domain.com",
    Password = "secure_password"
};

// Render URL to PDF with full browser capabilities
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/");

// Add metadata for document management
pdf.MetaData.Author = "Development Team";
pdf.MetaData.Title = "Website Export - " + DateTime.Now.ToString("yyyy-MM-dd");

// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("website-export.pdf");
Imports IronPdf

' Initialize the Chrome renderer with advanced options
Private renderer = New ChromePdfRenderer()

' Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.RenderDelay = 1000 ' Wait for JS execution

' Handle authentication if needed
renderer.LoginCredentials = New ChromeHttpLoginCredentials() With {
	.Username = "user@domain.com",
	.Password = "secure_password"
}

' Render URL to PDF with full browser capabilities
Dim pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/")

' Add metadata for document management
pdf.MetaData.Author = "Development Team"
pdf.MetaData.Title = "Website Export - " & DateTime.Now.ToString("yyyy-MM-dd")

' Save with compression
pdf.CompressImages(90)
pdf.SaveAs("website-export.pdf")
$vbLabelText   $csharpLabel

Le moteur Chrome dans IronPDF gère des scénarios complexes, y compris :

  • Applications monopage (SPA) avec beaucoup de JavaScript
  • Conceptions réactives avec des requêtes média
  • Polices Web et feuilles de style externes
  • Chargement de contenu AJAX
  • Animations CSS et transitions

La branche principale d'IronPDF prend désormais tout cela en charge : nuget.org/packages/IronPdf. Des améliorations récentes de performance ont considérablement amélioré la vitesse de rendu, en particulier pour les applications Web complexes.

URL vers PDF avec PDFTron (Apryse)

PDFTron nécessite le module HTML2PDF pour la conversion de contenu Web :

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

class UrlToPdfConverter 
{
    public static void ConvertUrlToPdf(string url, string outputPath)
    {
        // Initialize PDFTron with license
        PDFNet.Initialize("your-license-key");

        // Create a new PDF document
        using (PDFDoc doc = new PDFDoc())
        {
            // Initialize HTML2PDF converter
            HTML2PDF converter = new HTML2PDF();

            // Configure conversion settings
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            // Set page dimensions
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetMargins(0.5, 0.5, 0.5, 0.5);

            // Insert URL content
            converter.InsertFromURL(url);

            // Perform conversion
            if (converter.Convert(doc))
            {
                // Save the resulting PDF
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine($"Successfully converted {url} to {outputPath}");
            }
            else
            {
                Console.WriteLine("Conversion failed");
            }
        }
    }
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

class UrlToPdfConverter 
{
    public static void ConvertUrlToPdf(string url, string outputPath)
    {
        // Initialize PDFTron with license
        PDFNet.Initialize("your-license-key");

        // Create a new PDF document
        using (PDFDoc doc = new PDFDoc())
        {
            // Initialize HTML2PDF converter
            HTML2PDF converter = new HTML2PDF();

            // Configure conversion settings
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            // Set page dimensions
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetMargins(0.5, 0.5, 0.5, 0.5);

            // Insert URL content
            converter.InsertFromURL(url);

            // Perform conversion
            if (converter.Convert(doc))
            {
                // Save the resulting PDF
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine($"Successfully converted {url} to {outputPath}");
            }
            else
            {
                Console.WriteLine("Conversion failed");
            }
        }
    }
}
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF

Friend Class UrlToPdfConverter
	Public Shared Sub ConvertUrlToPdf(ByVal url As String, ByVal outputPath As String)
		' Initialize PDFTron with license
		PDFNet.Initialize("your-license-key")

		' Create a new PDF document
		Using doc As New PDFDoc()
			' Initialize HTML2PDF converter
			Dim converter As New HTML2PDF()

			' Configure conversion settings
			Dim settings As New HTML2PDF.WebPageSettings()
			settings.SetPrintBackground(True)
			settings.SetLoadImages(True)

			' Set page dimensions
			converter.SetPaperSize(PrinterMode.PaperSize.e_letter)
			converter.SetMargins(0.5, 0.5, 0.5, 0.5)

			' Insert URL content
			converter.InsertFromURL(url)

			' Perform conversion
			If converter.Convert(doc) Then
				' Save the resulting PDF
				doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
				Console.WriteLine($"Successfully converted {url} to {outputPath}")
			Else
				Console.WriteLine("Conversion failed")
			End If
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Considérations importantes pour PDFTron HTML2PDF :

  • Le SDK de PDFTron est coté en fonction de l'étendue de la technologie (API, fonctionnalités) et de l'étendue de la distribution (utilisateurs externes ou internes).
  • Support Javascript limité par rapport aux moteurs de navigateur
  • Peut nécessiter des configurations supplémentaires pour les mises en page complexes
  • Mieux adapté aux documents HTML simples

Comment créer des PDF à partir de chaînes HTML ?

Créer des PDF à partir de chaînes HTML est essentiel pour générer des rapports, factures et documents dynamiques. Les deux bibliothèques traitent cela différemment.

Chaîne HTML vers PDF avec IronPDF

IronPDF excelle dans le rendu de HTML complexe avec un support complet de CSS3 et JavaScript :

using IronPdf;
using System.Text;

public class HtmlStringToPdfConverter
{
    public static PdfDocument GenerateInvoice(InvoiceData data)
    {
        // Build dynamic HTML with modern CSS
        var html = new StringBuilder();
        html.Append(@"
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');

                body {
                    font-family: 'Roboto', sans-serif;
                    margin: 0;
                    padding: 20px;
                    color: #333;
                }

                .invoice-header {
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 2px solid #007bff;
                    padding-bottom: 20px;
                    margin-bottom: 30px;
                }

                .company-logo {
                    width: 150px;
                    height: auto;
                }

                .invoice-details {
                    text-align: right;
                }

                .invoice-number {
                    font-size: 24px;
                    font-weight: 700;
                    color: #007bff;
                }

                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin-top: 20px;
                }

                th {
                    background-color: #f8f9fa;
                    padding: 12px;
                    text-align: left;
                    border-bottom: 2px solid #dee2e6;
                }

                td {
                    padding: 12px;
                    border-bottom: 1px solid #dee2e6;
                }

                .total-row {
                    font-weight: 700;
                    font-size: 18px;
                    background-color: #e9ecef;
                }

                @media print {
                    body { margin: 0; }
                    .no-print { display: none; }
                }
            </style>
        </head>
        <body>
        ");

        // Add invoice header
        html.Append($@"
            <div class='invoice-header'>
                <div>
                    <img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
                    <h2>{data.CompanyName}</h2>
                    <p>{data.CompanyAddress}</p>
                </div>
                <div class='invoice-details'>
                    <div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
                    <p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
                    <p>Due: {data.DueDate:yyyy-MM-dd}</p>
                </div>
            </div>
        ");

        // Add line items table
        html.Append(@"
            <table>
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Quantity</th>
                        <th>Unit Price</th>
                        <th>Total</th>
                    </tr>
                </thead>
                <tbody>
        ");

        foreach (var item in data.LineItems)
        {
            html.Append($@"
                <tr>
                    <td>{item.Description}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.UnitPrice:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>
            ");
        }

        html.Append($@"
                </tbody>
                <tfoot>
                    <tr class='total-row'>
                        <td colspan='3'>Total</td>
                        <td>${data.Total:F2}</td>
                    </tr>
                </tfoot>
            </table>
        </body>
        </html>
        ");

        // Configure renderer for optimal output
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

        // Generate PDF with proper base path for assets
        var pdf = renderer.RenderHtmlAsPdf(html.ToString());

        // Add security if needed
        pdf.SecuritySettings.UserPassword = data.CustomerEmail;
        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;

        return pdf;
    }
}
using IronPdf;
using System.Text;

public class HtmlStringToPdfConverter
{
    public static PdfDocument GenerateInvoice(InvoiceData data)
    {
        // Build dynamic HTML with modern CSS
        var html = new StringBuilder();
        html.Append(@"
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');

                body {
                    font-family: 'Roboto', sans-serif;
                    margin: 0;
                    padding: 20px;
                    color: #333;
                }

                .invoice-header {
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 2px solid #007bff;
                    padding-bottom: 20px;
                    margin-bottom: 30px;
                }

                .company-logo {
                    width: 150px;
                    height: auto;
                }

                .invoice-details {
                    text-align: right;
                }

                .invoice-number {
                    font-size: 24px;
                    font-weight: 700;
                    color: #007bff;
                }

                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin-top: 20px;
                }

                th {
                    background-color: #f8f9fa;
                    padding: 12px;
                    text-align: left;
                    border-bottom: 2px solid #dee2e6;
                }

                td {
                    padding: 12px;
                    border-bottom: 1px solid #dee2e6;
                }

                .total-row {
                    font-weight: 700;
                    font-size: 18px;
                    background-color: #e9ecef;
                }

                @media print {
                    body { margin: 0; }
                    .no-print { display: none; }
                }
            </style>
        </head>
        <body>
        ");

        // Add invoice header
        html.Append($@"
            <div class='invoice-header'>
                <div>
                    <img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
                    <h2>{data.CompanyName}</h2>
                    <p>{data.CompanyAddress}</p>
                </div>
                <div class='invoice-details'>
                    <div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
                    <p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
                    <p>Due: {data.DueDate:yyyy-MM-dd}</p>
                </div>
            </div>
        ");

        // Add line items table
        html.Append(@"
            <table>
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Quantity</th>
                        <th>Unit Price</th>
                        <th>Total</th>
                    </tr>
                </thead>
                <tbody>
        ");

        foreach (var item in data.LineItems)
        {
            html.Append($@"
                <tr>
                    <td>{item.Description}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.UnitPrice:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>
            ");
        }

        html.Append($@"
                </tbody>
                <tfoot>
                    <tr class='total-row'>
                        <td colspan='3'>Total</td>
                        <td>${data.Total:F2}</td>
                    </tr>
                </tfoot>
            </table>
        </body>
        </html>
        ");

        // Configure renderer for optimal output
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

        // Generate PDF with proper base path for assets
        var pdf = renderer.RenderHtmlAsPdf(html.ToString());

        // Add security if needed
        pdf.SecuritySettings.UserPassword = data.CustomerEmail;
        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;

        return pdf;
    }
}
Imports IronPdf
Imports System.Text

Public Class HtmlStringToPdfConverter
	Public Shared Function GenerateInvoice(ByVal data As InvoiceData) As PdfDocument
		' Build dynamic HTML with modern CSS
		Dim html = New StringBuilder()
		html.Append("
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');

                body {
                    font-family: 'Roboto', sans-serif;
                    margin: 0;
                    padding: 20px;
                    color: #333;
                }

                .invoice-header {
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 2px solid #007bff;
                    padding-bottom: 20px;
                    margin-bottom: 30px;
                }

                .company-logo {
                    width: 150px;
                    height: auto;
                }

                .invoice-details {
                    text-align: right;
                }

                .invoice-number {
                    font-size: 24px;
                    font-weight: 700;
                    color: #007bff;
                }

                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin-top: 20px;
                }

                th {
                    background-color: #f8f9fa;
                    padding: 12px;
                    text-align: left;
                    border-bottom: 2px solid #dee2e6;
                }

                td {
                    padding: 12px;
                    border-bottom: 1px solid #dee2e6;
                }

                .total-row {
                    font-weight: 700;
                    font-size: 18px;
                    background-color: #e9ecef;
                }

                @media print {
                    body { margin: 0; }
                    .no-print { display: none; }
                }
            </style>
        </head>
        <body>
        ")

		' Add invoice header
		html.Append($"
            <div class='invoice-header'>
                <div>
                    <img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
                    <h2>{data.CompanyName}</h2>
                    <p>{data.CompanyAddress}</p>
                </div>
                <div class='invoice-details'>
                    <div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
                    <p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
                    <p>Due: {data.DueDate:yyyy-MM-dd}</p>
                </div>
            </div>
        ")

		' Add line items table
		html.Append("
            <table>
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Quantity</th>
                        <th>Unit Price</th>
                        <th>Total</th>
                    </tr>
                </thead>
                <tbody>
        ")

		For Each item In data.LineItems
			html.Append($"
                <tr>
                    <td>{item.Description}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.UnitPrice:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>
            ")
		Next item

		html.Append($"
                </tbody>
                <tfoot>
                    <tr class='total-row'>
                        <td colspan='3'>Total</td>
                        <td>${data.Total:F2}</td>
                    </tr>
                </tfoot>
            </table>
        </body>
        </html>
        ")

		' Configure renderer for optimal output
		Dim renderer = New ChromePdfRenderer()
		renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
		renderer.RenderingOptions.EnableJavaScript = True
		renderer.RenderingOptions.CreatePdfFormsFromHtml = True

		' Generate PDF with proper base path for assets
		Dim pdf = renderer.RenderHtmlAsPdf(html.ToString())

		' Add security if needed
		pdf.SecuritySettings.UserPassword = data.CustomerEmail
		pdf.SecuritySettings.AllowUserPrinting = True
		pdf.SecuritySettings.AllowUserCopyPasteContent = False

		Return pdf
	End Function
End Class
$vbLabelText   $csharpLabel

Principaux avantages du rendu HTML d'IronPDF :

  • Support complet de CSS3, y compris les mises en page flexbox et grid
  • Intégration des polices Google et polices Web
  • Bibliothèques de graphiques JavaScript (Chart.js, D3.js) parfaitement rendues
  • Support de conception réactive avec contrôle du viewport
  • Intégration d'image Base64 pour des documents autonomes

Chaîne HTML vers PDF avec PDFTron (Apryse)

Approche de PDFTron pour la conversion de chaîne HTML :

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronHtmlConverter
{
    public static void ConvertHtmlString(string htmlContent, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Create HTML2PDF converter instance
            HTML2PDF converter = new HTML2PDF();

            // Configure page settings
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetLandscape(false);
            converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches);

            // Enable images and backgrounds
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);
            settings.SetJavaScriptDelay(1000); // Limited JS support

            // Insert HTML content
            converter.InsertFromHtmlString(htmlContent);

            // Convert to PDF
            if (converter.Convert(doc))
            {
                // Post-processing options
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
            }
        }
    }
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronHtmlConverter
{
    public static void ConvertHtmlString(string htmlContent, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Create HTML2PDF converter instance
            HTML2PDF converter = new HTML2PDF();

            // Configure page settings
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetLandscape(false);
            converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches);

            // Enable images and backgrounds
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);
            settings.SetJavaScriptDelay(1000); // Limited JS support

            // Insert HTML content
            converter.InsertFromHtmlString(htmlContent);

            // Convert to PDF
            if (converter.Convert(doc))
            {
                // Post-processing options
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
            }
        }
    }
}
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF

Public Class PdfTronHtmlConverter
	Public Shared Sub ConvertHtmlString(ByVal htmlContent As String, ByVal outputPath As String)
		PDFNet.Initialize("your-license-key")

		Using doc As New PDFDoc()
			' Create HTML2PDF converter instance
			Dim converter As New HTML2PDF()

			' Configure page settings
			converter.SetPaperSize(PrinterMode.PaperSize.e_letter)
			converter.SetLandscape(False)
			converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches)

			' Enable images and backgrounds
			Dim settings As New HTML2PDF.WebPageSettings()
			settings.SetPrintBackground(True)
			settings.SetLoadImages(True)
			settings.SetJavaScriptDelay(1000) ' Limited JS support

			' Insert HTML content
			converter.InsertFromHtmlString(htmlContent)

			' Convert to PDF
			If converter.Convert(doc) Then
				' Post-processing options
				doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
			End If
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Limitations de PDFTron HTML à considérer :

  • Support CSS basique (pas de mises en page avancées)
  • Exécution limitée de JavaScript
  • L'intégration de polices nécessite des configurations supplémentaires
  • Mieux adapté aux mises en page de documents simples

Comment puis-je convertir des pages ASPX en PDF ?

La conversion de pages ASPX en PDF est une exigence courante pour les applications ASP.NET. IronPDF fournit un support natif, tandis que PDFTron nécessite des solutions de contournement.

ASPX vers PDF avec IronPDF

IronPDF offre une conversion ASPX transparente avec une seule ligne de code :

using IronPdf;

public partial class InvoicePage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Render the current ASPX page as PDF on page load
        if (Request.QueryString["pdf"] == "true")
        {
            // Configure PDF output options
            AspxToPdf.RenderThisPageAsPdf(
                AspxToPdf.FileBehavior.InBrowser,
                "Invoice_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");
        }
    }

    protected void ExportToPdfButton_Click(object sender, EventArgs e)
    {
        // Advanced configuration for ASPX to PDF
        IronPdf.AspxToPdf.RenderThisPageAsPdf(
            IronPdf.AspxToPdf.FileBehavior.Attachment,
            "Invoice.pdf",
            new ChromePdfRenderOptions()
            {
                PaperSize = PdfPaperSize.A4,
                MarginTop = 20,
                MarginBottom = 20,
                CssMediaType = PdfCssMediaType.Print,
                EnableJavaScript = true,
                CreatePdfFormsFromHtml = true,
                FitToPaper = true
            });
    }
}
using IronPdf;

public partial class InvoicePage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Render the current ASPX page as PDF on page load
        if (Request.QueryString["pdf"] == "true")
        {
            // Configure PDF output options
            AspxToPdf.RenderThisPageAsPdf(
                AspxToPdf.FileBehavior.InBrowser,
                "Invoice_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");
        }
    }

    protected void ExportToPdfButton_Click(object sender, EventArgs e)
    {
        // Advanced configuration for ASPX to PDF
        IronPdf.AspxToPdf.RenderThisPageAsPdf(
            IronPdf.AspxToPdf.FileBehavior.Attachment,
            "Invoice.pdf",
            new ChromePdfRenderOptions()
            {
                PaperSize = PdfPaperSize.A4,
                MarginTop = 20,
                MarginBottom = 20,
                CssMediaType = PdfCssMediaType.Print,
                EnableJavaScript = true,
                CreatePdfFormsFromHtml = true,
                FitToPaper = true
            });
    }
}
Imports IronPdf

Partial Public Class InvoicePage
	Inherits System.Web.UI.Page

	Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
		' Render the current ASPX page as PDF on page load
		If Request.QueryString("pdf") = "true" Then
			' Configure PDF output options
			AspxToPdf.RenderThisPageAsPdf(AspxToPdf.FileBehavior.InBrowser, "Invoice_" & DateTime.Now.ToString("yyyyMMdd") & ".pdf")
		End If
	End Sub

	Protected Sub ExportToPdfButton_Click(ByVal sender As Object, ByVal e As EventArgs)
		' Advanced configuration for ASPX to PDF
		IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.Attachment, "Invoice.pdf", New ChromePdfRenderOptions() With {
			.PaperSize = PdfPaperSize.A4,
			.MarginTop = 20,
			.MarginBottom = 20,
			.CssMediaType = PdfCssMediaType.Print,
			.EnableJavaScript = True,
			.CreatePdfFormsFromHtml = True,
			.FitToPaper = True
		})
	End Sub
End Class
$vbLabelText   $csharpLabel

Pour plus de contrôle sur le processus de rendu :

// In Global.asax.cs or Startup.cs
public static void ConfigureAspxToPdf()
{
    // Set global defaults for all ASPX to PDF conversions
    AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4;
    AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = true;
    AspxToPdf.GlobalSettings.EnableJavaScript = true;
    AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen;

    // Custom headers and footers
    AspxToPdf.GlobalSettings.HtmlHeader = new HtmlHeaderFooter()
    {
        HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
        Height = 25
    };
}
// In Global.asax.cs or Startup.cs
public static void ConfigureAspxToPdf()
{
    // Set global defaults for all ASPX to PDF conversions
    AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4;
    AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = true;
    AspxToPdf.GlobalSettings.EnableJavaScript = true;
    AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen;

    // Custom headers and footers
    AspxToPdf.GlobalSettings.HtmlHeader = new HtmlHeaderFooter()
    {
        HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
        Height = 25
    };
}
' In Global.asax.cs or Startup.cs
Public Shared Sub ConfigureAspxToPdf()
	' Set global defaults for all ASPX to PDF conversions
	AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4
	AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = True
	AspxToPdf.GlobalSettings.EnableJavaScript = True
	AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen

	' Custom headers and footers
	AspxToPdf.GlobalSettings.HtmlHeader = New HtmlHeaderFooter() With {
		.HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
		.Height = 25
	}
End Sub
$vbLabelText   $csharpLabel

La fonctionnalité d'ASPX vers PDF d'IronPDF préserve :

  • ViewState et les valeurs de formulaire
  • Données d'état de session
  • Style CSS et mises en page
  • Contenu rendu par JavaScript
  • Mises en page de la page maître

Alternative ASPX avec PDFTron

PDFTron n'offre pas de support direct ASPX, nécessitant des approches indirectes :

// Capture ASPX output as HTML, then convert
public void ConvertAspxWithPdfTron()
{
    // Render ASPX to string first
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    // Render the page to HTML
    this.RenderControl(hw);
    string htmlContent = sw.ToString();

    // Then use PDFTron's HTML2PDF
    PDFNet.Initialize("your-license-key");

    using (PDFDoc doc = new PDFDoc())
    {
        HTML2PDF converter = new HTML2PDF();
        converter.InsertFromHtmlString(htmlContent);
        converter.Convert(doc);

        // Send to browser
        byte[] pdfBytes = doc.Save(SDFDoc.SaveOptions.e_linearized);
        Response.ContentType = "application/pdf";
        Response.BinaryWrite(pdfBytes);
        Response.End();
    }
}
// Capture ASPX output as HTML, then convert
public void ConvertAspxWithPdfTron()
{
    // Render ASPX to string first
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    // Render the page to HTML
    this.RenderControl(hw);
    string htmlContent = sw.ToString();

    // Then use PDFTron's HTML2PDF
    PDFNet.Initialize("your-license-key");

    using (PDFDoc doc = new PDFDoc())
    {
        HTML2PDF converter = new HTML2PDF();
        converter.InsertFromHtmlString(htmlContent);
        converter.Convert(doc);

        // Send to browser
        byte[] pdfBytes = doc.Save(SDFDoc.SaveOptions.e_linearized);
        Response.ContentType = "application/pdf";
        Response.BinaryWrite(pdfBytes);
        Response.End();
    }
}
' Capture ASPX output as HTML, then convert
Public Sub ConvertAspxWithPdfTron()
	' Render ASPX to string first
	Dim sw As New StringWriter()
	Dim hw As New HtmlTextWriter(sw)

	' Render the page to HTML
	Me.RenderControl(hw)
	Dim htmlContent As String = sw.ToString()

	' Then use PDFTron's HTML2PDF
	PDFNet.Initialize("your-license-key")

	Using doc As New PDFDoc()
		Dim converter As New HTML2PDF()
		converter.InsertFromHtmlString(htmlContent)
		converter.Convert(doc)

		' Send to browser
		Dim pdfBytes() As Byte = doc.Save(SDFDoc.SaveOptions.e_linearized)
		Response.ContentType = "application/pdf"
		Response.BinaryWrite(pdfBytes)
		Response.End()
	End Using
End Sub
$vbLabelText   $csharpLabel

Comment puis-je convertir des images en PDF ?

La conversion d'images en PDF est essentielle pour l'archivage de documents et la création de portfolios. Les deux bibliothèques offrent cette fonctionnalité avec des approches différentes.

Image vers PDF avec IronPDF

IronPDF offre une classe dédiée ImageToPdfConverter pour un traitement par lots efficace :

using IronPdf;
using System.IO;
using System.Linq;

public class ImagePdfGenerator
{
    public static void CreatePhotoAlbum(string imageFolder, string outputPath)
    {
        // Get all supported image files
        var supportedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" };
        var imageFiles = Directory.GetFiles(imageFolder)
            .Where(f => supportedExtensions.Contains(Path.GetExtension(f).ToLower()))
            .OrderBy(f => f);

        // Convert images to PDF with options
        var pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage);

        // Add metadata
        pdf.MetaData.Title = "Photo Album";
        pdf.MetaData.Author = "Photography Department";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Apply compression for smaller file size
        pdf.CompressImages(80); // 80% quality

        // Save the PDF
        pdf.SaveAs(outputPath);
    }

    public static void CreateThumbnailCatalog(List<ProductImage> images)
    {
        var renderer = new ChromePdfRenderer();

        // Build HTML with image grid
        var html = @"
        <html>
        <head>
            <style>
                .image-grid {
                    display: grid;
                    grid-template-columns: repeat(3, 1fr);
                    gap: 20px;
                    padding: 20px;
                }
                .image-item {
                    text-align: center;
                }
                .image-item img {
                    max-width: 100%;
                    height: 200px;
                    object-fit: cover;
                    border: 1px solid #ddd;
                }
                .image-caption {
                    margin-top: 10px;
                    font-size: 12px;
                }
            </style>
        </head>
        <body>
            <h1>Product Catalog</h1>
            <div class='image-grid'>";

        foreach (var image in images)
        {
            html += $@"
                <div class='image-item'>
                    <img src='data:image/jpeg;base64,{image.Base64Data}' />
                    <div class='image-caption'>{image.ProductName}</div>
                </div>";
        }

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

        // Render with optimal settings for images
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("product-catalog.pdf");
    }
}
using IronPdf;
using System.IO;
using System.Linq;

public class ImagePdfGenerator
{
    public static void CreatePhotoAlbum(string imageFolder, string outputPath)
    {
        // Get all supported image files
        var supportedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" };
        var imageFiles = Directory.GetFiles(imageFolder)
            .Where(f => supportedExtensions.Contains(Path.GetExtension(f).ToLower()))
            .OrderBy(f => f);

        // Convert images to PDF with options
        var pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage);

        // Add metadata
        pdf.MetaData.Title = "Photo Album";
        pdf.MetaData.Author = "Photography Department";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Apply compression for smaller file size
        pdf.CompressImages(80); // 80% quality

        // Save the PDF
        pdf.SaveAs(outputPath);
    }

    public static void CreateThumbnailCatalog(List<ProductImage> images)
    {
        var renderer = new ChromePdfRenderer();

        // Build HTML with image grid
        var html = @"
        <html>
        <head>
            <style>
                .image-grid {
                    display: grid;
                    grid-template-columns: repeat(3, 1fr);
                    gap: 20px;
                    padding: 20px;
                }
                .image-item {
                    text-align: center;
                }
                .image-item img {
                    max-width: 100%;
                    height: 200px;
                    object-fit: cover;
                    border: 1px solid #ddd;
                }
                .image-caption {
                    margin-top: 10px;
                    font-size: 12px;
                }
            </style>
        </head>
        <body>
            <h1>Product Catalog</h1>
            <div class='image-grid'>";

        foreach (var image in images)
        {
            html += $@"
                <div class='image-item'>
                    <img src='data:image/jpeg;base64,{image.Base64Data}' />
                    <div class='image-caption'>{image.ProductName}</div>
                </div>";
        }

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

        // Render with optimal settings for images
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("product-catalog.pdf");
    }
}
Imports IronPdf
Imports System.IO
Imports System.Linq

Public Class ImagePdfGenerator
	Public Shared Sub CreatePhotoAlbum(ByVal imageFolder As String, ByVal outputPath As String)
		' Get all supported image files
		Dim supportedExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" }
		Dim imageFiles = Directory.GetFiles(imageFolder).Where(Function(f) supportedExtensions.Contains(Path.GetExtension(f).ToLower())).OrderBy(Function(f) f)

		' Convert images to PDF with options
		Dim pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage)

		' Add metadata
		pdf.MetaData.Title = "Photo Album"
		pdf.MetaData.Author = "Photography Department"
		pdf.MetaData.CreationDate = DateTime.Now

		' Apply compression for smaller file size
		pdf.CompressImages(80) ' 80% quality

		' Save the PDF
		pdf.SaveAs(outputPath)
	End Sub

	Public Shared Sub CreateThumbnailCatalog(ByVal images As List(Of ProductImage))
		Dim renderer = New ChromePdfRenderer()

		' Build HTML with image grid
		Dim html = "
        <html>
        <head>
            <style>
                .image-grid {
                    display: grid;
                    grid-template-columns: repeat(3, 1fr);
                    gap: 20px;
                    padding: 20px;
                }
                .image-item {
                    text-align: center;
                }
                .image-item img {
                    max-width: 100%;
                    height: 200px;
                    object-fit: cover;
                    border: 1px solid #ddd;
                }
                .image-caption {
                    margin-top: 10px;
                    font-size: 12px;
                }
            </style>
        </head>
        <body>
            <h1>Product Catalog</h1>
            <div class='image-grid'>"

		For Each image In images
			html &= $"
                <div class='image-item'>
                    <img src='data:image/jpeg;base64,{image.Base64Data}' />
                    <div class='image-caption'>{image.ProductName}</div>
                </div>"
		Next image

		html &= "</div></body></html>"

		' Render with optimal settings for images
		renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
		Dim pdf = renderer.RenderHtmlAsPdf(html)
		pdf.SaveAs("product-catalog.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Fonctionnalités avancées de traitement d'image :

  • Conversion SVG en PDF avec préservation de la qualité vectorielle
  • Traitement par lots avec optimisation mémoire
  • Options de dimensionnement et de positionnement personnalisées
  • Préservation des données EXIF

Image vers PDF avec PDFTron (Apryse)

PDFTron utilise son API de conversion pour le traitement des images :

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronImageConverter
{
    public static void ConvertImageToPdf(string imagePath, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Use Convert API for image to PDF
            pdftron.PDF.Convert.ToPdf(doc, imagePath);

            // Additional image processing
            PageIterator itr = doc.GetPageIterator();
            while (itr.HasNext())
            {
                Page page = itr.Current();

                // Adjust page size to image
                Rect crop_box = page.GetCropBox();
                page.SetMediaBox(crop_box);

                itr.Next();
            }

            // Save optimized PDF
            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }

    public static void CreateMultiPageImagePdf(string[] imagePaths, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            ElementBuilder builder = new ElementBuilder();
            ElementWriter writer = new ElementWriter();

            foreach (string imagePath in imagePaths)
            {
                // Create a new page for each image
                Page page = doc.PageCreate();
                writer.Begin(page);

                // Add image to page
                Image img = Image.Create(doc, imagePath);
                Element element = builder.CreateImage(img, 0, 0, 612, 792);
                writer.WritePlacedElement(element);

                writer.End();
                doc.PagePushBack(page);
            }

            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronImageConverter
{
    public static void ConvertImageToPdf(string imagePath, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Use Convert API for image to PDF
            pdftron.PDF.Convert.ToPdf(doc, imagePath);

            // Additional image processing
            PageIterator itr = doc.GetPageIterator();
            while (itr.HasNext())
            {
                Page page = itr.Current();

                // Adjust page size to image
                Rect crop_box = page.GetCropBox();
                page.SetMediaBox(crop_box);

                itr.Next();
            }

            // Save optimized PDF
            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }

    public static void CreateMultiPageImagePdf(string[] imagePaths, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            ElementBuilder builder = new ElementBuilder();
            ElementWriter writer = new ElementWriter();

            foreach (string imagePath in imagePaths)
            {
                // Create a new page for each image
                Page page = doc.PageCreate();
                writer.Begin(page);

                // Add image to page
                Image img = Image.Create(doc, imagePath);
                Element element = builder.CreateImage(img, 0, 0, 612, 792);
                writer.WritePlacedElement(element);

                writer.End();
                doc.PagePushBack(page);
            }

            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }
}
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF

Public Class PdfTronImageConverter
	Public Shared Sub ConvertImageToPdf(ByVal imagePath As String, ByVal outputPath As String)
		PDFNet.Initialize("your-license-key")

		Using doc As New PDFDoc()
			' Use Convert API for image to PDF
			pdftron.PDF.Convert.ToPdf(doc, imagePath)

			' Additional image processing
			Dim itr As PageIterator = doc.GetPageIterator()
			Do While itr.HasNext()
				Dim page As Page = itr.Current()

				' Adjust page size to image
				Dim crop_box As Rect = page.GetCropBox()
				page.SetMediaBox(crop_box)

				itr.Next()
			Loop

			' Save optimized PDF
			doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
		End Using
	End Sub

	Public Shared Sub CreateMultiPageImagePdf(ByVal imagePaths() As String, ByVal outputPath As String)
		PDFNet.Initialize("your-license-key")

		Using doc As New PDFDoc()
			Dim builder As New ElementBuilder()
			Dim writer As New ElementWriter()

			For Each imagePath As String In imagePaths
				' Create a new page for each image
				Dim page As Page = doc.PageCreate()
				writer.Begin(page)

				' Add image to page
				Dim img As Image = Image.Create(doc, imagePath)
				Dim element As Element = builder.CreateImage(img, 0, 0, 612, 792)
				writer.WritePlacedElement(element)

				writer.End()
				doc.PagePushBack(page)
			Next imagePath

			doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Quelles sont les options de licence et les coûts ?

Comprendre les licences est crucial pour la budgétisation et la conformité. Les deux bibliothèques ont des modèles de tarification très différents.

Licences IronPDF

IronPDF propose 3 éditions de tarification, de $799 à $2,399. Un essai gratuit d'IronPDF est également disponible. IronPDF offre une tarification transparente, publiée (à partir de 2025) :

Niveaux de Licence :

  • Licence Lite: $799

    • 1 an de support et de mises à jour
    • 1 développeur
    • 1 emplacement
    • 1 projet
    • Idéal pour les développeurs individuels ou les petits projets
  • Licence Professionnelle: $2,399
    • 3 développeurs
    • 3 emplacements
    • 3 projets
    • Parfait pour les petites équipes

Options additionnelles :

  • Redistribution sans redevance : +$2,399
  • Licences SaaS/OEM disponibles

    • 10 développeurs
    • 10 emplacements
    • 10 projets
    • Meilleur pour les équipes en croissance
  • Licence Illimitée : Tarification personnalisée
    • Développeurs illimités
    • Sites illimités
  • GemBox Bundle : 2,200 $ pour 7 produits

Options Supplémentaires :

  • Redistribution Libre de Droits : +$2,399 (en une fois)
  • Licences perpétuelles (achat unique)
  • Pack Iron Suite : Obtenez 10 produits pour le prix de 2

Toutes les licences d'équipe sont non transférables et le partage de licences en dehors d'une organisation ou d'une relation agence/client est interdit.

Licences PDFTron (Apryse)

Les licences de PDFTron sont basées sur un devis sans tarification publiée. D'après les retours des utilisateurs et les rapports de l'industrie :

Estimations de Tarifs :

  • Petite Entreprise : 5 000 $ - 15 000 $ par an
  • Entreprise : 30 000 $ - 100 000 $ + par an
  • Les modules additionnels nécessitent des licences séparées

Le manque de transparence des tarifs est un gros inconvénient chez PDFTRON. Tout est un module complémentaire, nécessitant des termes de licence et des contrats spécifiques. Les utilisateurs rapportent :

  • Après 6500$ investis dans PDFTRON, leur produit n'a tout simplement pas fonctionné comme annoncé, nous laissant les mains vides et tout un bazar à nettoyer dans notre produit.
  • Négociations de licence complexes requises
  • Le coût par module augmente le coût total
  • Politiques de remboursement limitées

Différences Clés :

  • IronPDF : Licences perpétuelles, paiement unique
  • PDFTron : Souvent basées sur l'abonnement ou les frais annuels
  • IronPDF : Toutes les fonctionnalités incluses dans la licence de base
  • PDFTron : Fonctions de base avec modules payants

Comment se comparent les options de support ?

Le support développeur peut faire ou défaire les délais de projet. Voici comment chaque fournisseur aborde l'assistance clients.

Support IronPDF

IronPDF inclut une assistance professionnelle avec toutes les licences :

La bibliothèque IronPDF fonctionne dans Azure WebApps, Functions et WebJobs. Elle fonctionne à la fois dans les variantes Linux et Windows, bien que je recommande les Functions et WebApps variant Windows, car nettement mieux testées et plus faciles à installer.

Support PDFTron (Apryse)

Le support de PDFTron varie selon le niveau de licence :

  • Le coût de PDFTron est élevé. L'importance pour notre entreprise justifie le coût, mais c'était certainement un obstacle pour nous lors de la comparaison de ce produit avec d'autres solutions PDF Web.
  • Support basé sur forum pour les licences basiques
  • Plans de support payant disponible
  • Parfois, le support peut être insuffisant et les développeurs doivent se débrouiller seuls.
  • Les temps de réponse varient en fonction du niveau de support

Quelles sont les caractéristiques de performance ?

La performance impacte l'expérience utilisateur et les coûts de serveur. Examinons les données de performance réelles.

Performance d'IronPDF

Les améliorations récentes ont considérablement amélioré les performances d'IronPDF :

// Optimized batch processing example
public async Task BatchConvertWithPerformanceMonitoring()
{
    var renderer = new ChromePdfRenderer();

    // Configure for performance
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
    renderer.RenderingOptions.RenderDelay = 0; // No delay for static content
    renderer.RenderingOptions.Timeout = 30; // 30 second timeout

    // Enable parallel processing
    var tasks = new List<Task<PdfDocument>>();
    var urls = GetUrlsToConvert();

    // Process in parallel with throttling
    using (var semaphore = new SemaphoreSlim(4)) // Max 4 concurrent
    {
        foreach (var url in urls)
        {
            await semaphore.WaitAsync();

            tasks.Add(Task.Run(async () =>
            {
                try
                {
                    return await renderer.RenderUrlAsPdfAsync(url);
                }
                finally
                {
                    semaphore.Release();
                }
            }));
        }

        var results = await Task.WhenAll(tasks);

        // Merge results if needed
        var merged = PdfDocument.Merge(results);
        merged.SaveAs("batch-output.pdf");
    }
}
// Optimized batch processing example
public async Task BatchConvertWithPerformanceMonitoring()
{
    var renderer = new ChromePdfRenderer();

    // Configure for performance
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
    renderer.RenderingOptions.RenderDelay = 0; // No delay for static content
    renderer.RenderingOptions.Timeout = 30; // 30 second timeout

    // Enable parallel processing
    var tasks = new List<Task<PdfDocument>>();
    var urls = GetUrlsToConvert();

    // Process in parallel with throttling
    using (var semaphore = new SemaphoreSlim(4)) // Max 4 concurrent
    {
        foreach (var url in urls)
        {
            await semaphore.WaitAsync();

            tasks.Add(Task.Run(async () =>
            {
                try
                {
                    return await renderer.RenderUrlAsPdfAsync(url);
                }
                finally
                {
                    semaphore.Release();
                }
            }));
        }

        var results = await Task.WhenAll(tasks);

        // Merge results if needed
        var merged = PdfDocument.Merge(results);
        merged.SaveAs("batch-output.pdf");
    }
}
' Optimized batch processing example
Public Async Function BatchConvertWithPerformanceMonitoring() As Task
	Dim renderer = New ChromePdfRenderer()

	' Configure for performance
	renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen
	renderer.RenderingOptions.RenderDelay = 0 ' No delay for static content
	renderer.RenderingOptions.Timeout = 30 ' 30 second timeout

	' Enable parallel processing
	Dim tasks = New List(Of Task(Of PdfDocument))()
	Dim urls = GetUrlsToConvert()

	' Process in parallel with throttling
	Using semaphore = New SemaphoreSlim(4) ' Max 4 concurrent
		For Each url In urls
			Await semaphore.WaitAsync()

			tasks.Add(Task.Run(Async Function()
				Try
					Return Await renderer.RenderUrlAsPdfAsync(url)
				Finally
					semaphore.Release()
				End Try
			End Function))
		Next url

		Dim results = Await Task.WhenAll(tasks)

		' Merge results if needed
		Dim merged = PdfDocument.Merge(results)
		merged.SaveAs("batch-output.pdf")
	End Using
End Function
$vbLabelText   $csharpLabel

Métriques de performance à partir d'environnements de production :

  • HTML simple : 200-400ms
  • HTML complexe avec CSS/JS : 800-1200ms
  • IronPDF a des variantes Async des méthodes de rendu comme documenté ici ironpdf.com/examples/async. L'utilisation de Parallel.ForEach était la stratégie la plus performante pour le rendu par lots HTML vers PDF pour mon cas d'utilisation

Performance de PDFTron (Apryse)

PDFTron offre généralement des performances brutes plus rapides pour les conversions simples :

  • HTML basique : 100-300ms
  • Documents Office : 500-1000ms
  • Moindre empreinte mémoire
  • Meilleur pour les documents simples à fort volume

Cependant, les utilisateurs rapportent des problèmes avec des scénarios complexes :

  • Des bugs apparaissent parfois. Parfois des bugs assez préjudiciables qui auraient probablement dû être vus lors des tests QA. Cela peut prendre un certain temps pour qu'ils finissent par être corrigés.

Support des cadres CSS modernes et Bootstrap

À mesure que les applications d'entreprise adoptent de plus en plus des cadres CSS modernes comme Bootstrap, Tailwind et Foundation, la capacité à convertir précisément ces cadres en PDF devient un critère de sélection critique pour les bibliothèques PDF.

IronPDF : Support Complet de Cadre Basé sur Chromium

Le moteur de rendu Chrome V8 d'IronPDF offre une prise en charge complète pour tous les cadres CSS modernes et normes Web :

  • Bootstrap 5 : Prise en charge complète de flexbox et CSS Grid avec toutes les utilités réactives
  • Bootstrap 4 : Compatibilité totale avec les composants de carte, systèmes de navigation et mises en page de formulaire
  • Tailwind CSS : Toutes les classes utilitaires, modificateurs réactifs et modèles de compilation JIT
  • Foundation : Support complet de la grille et de la bibliothèque de composants
  • CSS3 Moderne : Flexbox, CSS Grid, variables CSS, animations, transformations et transitions
  • Cadres JavaScript : Rendu des composants React, Vue, Angular avec un support d'interactivité complet

Production validation: The Bootstrap homepage and official templates convert with 98%+ browser fidelity.

Exemple de Code : Tableau de Bord d'Entreprise avec Tables de Données

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapDashboard = @"
<!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-fluid py-4'>
        <div class='d-flex justify-content-between align-items-center mb-4'>
            <h1>Sales Dashboard - Q1 2025</h1>
            <span class='badge bg-success fs-5'>+15.3% YoY</span>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Total Revenue</h6>
                        <h2 class='text-primary'>$1.2M</h2>
                        <small class='text-success'>↑ 12%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>New Customers</h6>
                        <h2 class='text-info'>1,847</h2>
                        <small class='text-success'>↑ 8%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Avg Order Value</h6>
                        <h2 class='text-warning'>$649</h2>
                        <small class='text-danger'>↓ 3%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Conversion Rate</h6>
                        <h2 class='text-success'>3.2%</h2>
                        <small class='text-success'>↑ 0.4%</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='card'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Top Products by Revenue</h5>
            </div>
            <div class='card-body p-0'>
                <table class='table table-striped table-hover mb-0'>
                    <thead class='table-light'>
                        <tr>
                            <th>Product</th>
                            <th>Category</th>
                            <th>Units Sold</th>
                            <th class='text-end'>Revenue</th>
                            <th class='text-end'>Growth</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td><strong>Professional License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>1,234</td>
                            <td class='text-end'>$369,000</td>
                            <td class='text-end'><span class='badge bg-success'>+18%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Plus License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>2,891</td>
                            <td class='text-end'>$289,000</td>
                            <td class='text-end'><span class='badge bg-success'>+15%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Support Package</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>892</td>
                            <td class='text-end'>$178,000</td>
                            <td class='text-end'><span class='badge bg-success'>+22%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Training Program</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>456</td>
                            <td class='text-end'>$91,000</td>
                            <td class='text-end'><span class='badge bg-warning'>+5%</span></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard);
pdf.SaveAs("sales-dashboard.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapDashboard = @"
<!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-fluid py-4'>
        <div class='d-flex justify-content-between align-items-center mb-4'>
            <h1>Sales Dashboard - Q1 2025</h1>
            <span class='badge bg-success fs-5'>+15.3% YoY</span>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Total Revenue</h6>
                        <h2 class='text-primary'>$1.2M</h2>
                        <small class='text-success'>↑ 12%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>New Customers</h6>
                        <h2 class='text-info'>1,847</h2>
                        <small class='text-success'>↑ 8%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Avg Order Value</h6>
                        <h2 class='text-warning'>$649</h2>
                        <small class='text-danger'>↓ 3%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Conversion Rate</h6>
                        <h2 class='text-success'>3.2%</h2>
                        <small class='text-success'>↑ 0.4%</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='card'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Top Products by Revenue</h5>
            </div>
            <div class='card-body p-0'>
                <table class='table table-striped table-hover mb-0'>
                    <thead class='table-light'>
                        <tr>
                            <th>Product</th>
                            <th>Category</th>
                            <th>Units Sold</th>
                            <th class='text-end'>Revenue</th>
                            <th class='text-end'>Growth</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td><strong>Professional License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>1,234</td>
                            <td class='text-end'>$369,000</td>
                            <td class='text-end'><span class='badge bg-success'>+18%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Plus License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>2,891</td>
                            <td class='text-end'>$289,000</td>
                            <td class='text-end'><span class='badge bg-success'>+15%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Support Package</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>892</td>
                            <td class='text-end'>$178,000</td>
                            <td class='text-end'><span class='badge bg-success'>+22%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Training Program</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>456</td>
                            <td class='text-end'>$91,000</td>
                            <td class='text-end'><span class='badge bg-warning'>+5%</span></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard);
pdf.SaveAs("sales-dashboard.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Résultat : Un tableau de bord d'entreprise professionnel avec cartes à métriques flexbox de Bootstrap, mise en page grille réactive et tables de données stylisées - tout rendu avec une fidélité parfaite dans le PDF.

PDFTron (Apryse) : Module HTML2PDF avec Limitations Cadre

La conversion HTML en PDF de PDFTron est fournie via le module HTML2PDF, qui utilise un moteur de rendu personnalisé avec des limitations spécifiques pour les cadres CSS modernes :

  • Moteur Personnalisé : Non basé sur Chromium, ce qui signifie que le support CSS3 est sélectif plutôt que complet
  • Support Flexbox : Mise en œuvre partielle, les mises en page flexbox de Bootstrap 4/5 peuvent ne pas se rendre correctement
  • CSS Grid : Prise en charge limitée des spécifications de mise en page CSS Grid
  • Limitations JavaScript : Exécution limitée de JavaScript par rapport aux moteurs de navigateur complets
  • Bootstrap 3 : Fonctionne généralement mieux que Bootstrap 4/5 en raison des mises en page basées sur des tableaux
  • Nécessité de Tester le Cadre : Les composants Bootstrap complexes nécessitent des tests approfondis et des solutions de contournement potentielles

Selon les rapports des développeurs, les utilisateurs de PDFTron travaillant avec Bootstrap rencontrent :

  • Barres de navigation basées sur flexbox avec des problèmes d'alignement
  • Decks de cartes et systèmes de grille nécessitant des ajustements CSS
  • Utilitaires réactifs non respectés dans le rendu PDF
  • Besoin de simplifier les composants Bootstrap ou d'utiliser des CSS de secours

Considération d'Entreprise : Pour les applications construites sur les versions modernes de Bootstrap (4+), PDFTron peut nécessiter des efforts de développement supplémentaires significatifs pour gérer les conversions de mise en page, ce qui pourrait compenser ses autres avantages en termes de performance. L'approche du moteur personnalisé signifie que vous n'obtenez pas la même fidélité de rendu qu'un véritable navigateur.

Pour un support complet du cadre Bootstrap et des conseils de test, voir le Guide de CSS Bootstrap & Flexbox.

Quand devrais-je choisir chaque bibliothèque ?

Faire le bon choix dépend de vos exigences et contraintes spécifiques.

  • Le budget est une considération : Coût d'entrée inférieur et meilleure valeur pour les scénarios HTML en PDF

La Fidélité HTML/CSS est Critique

  • Applications Web modernes avec des mises en page complexes
  • Contenu riche en JavaScript
  • Conceptions réactives qui doivent être préservées

Le Développement Rapide est une Priorité

La Transparence Budgétaire Compte

  • Tarification publiée permettant une budgétisation précise
  • Aucun coût surprise ou frais cachés
  • Inclut toutes les fonctionnalités dans la licence de base

Vous Avez Besoin de Fonctionnalités Spécifiques

Choisissez PDFTron (Apryse) Lorsque :

Flux de Travail Documentaire d'Entreprise

  • Traitement de formulaires complexes avec support XFA
  • Conversions de fichiers CAO (DWG, DXF)
  • Gestion avancée des documents Office

Performance sur les Fonctionnalités

  • Traitement de documents simples à fort volume
  • Exigences en mémoire réduites
  • Besoins de conversion HTML basiques

Exigences Spécialisées

  • Composants de visionneuse de documents intégrés
  • Types d'annotations étendus (30+)
  • Intégration de systèmes hérités

Grand Environnement d'Entreprise

  • Contrats de support dédiés
  • Développement de fonctionnalités sur mesure
  • Certifications de conformité

Résumé et Conclusion

IronPDF et PDFTron (Apryse) sont deux bibliothèques PDF capables, mais elles servent différents segments de marché et cas d'utilisation.

IronPDF excelle dans :

  • Support des technologies Web modernes (HTML5, CSS3, JavaScript)
  • Conception d'API conviviale pour les développeurs
  • Tarification transparente et abordable
  • Développement rapide d'applications
  • Déploiements cloud et conteneurisés

Les points forts de PDFTron (Apryse) incluent :

  • Flux de travail documentaire d'entreprise
  • Support des formats spécialisés et CAO
  • Consommation de ressources réduite
  • Capacités d'annotation étendues
  • Compatibilité avec les systèmes hérités

Pour la plupart des développeurs .NET construisant des applications modernes, IronPDF offre la meilleure combinaison de fonctionnalités, de facilité d'utilisation et de valeur. Son moteur de rendu basé sur Chrome assure une conversion HTML en PDF parfaite en pixels, tandis que l'API simple accélère le développement.

PDFTron demeure viable pour les entreprises avec des besoins spécifiques en matière de conversion de CAO, de traitement de formulaires complexes, ou lorsqu'ils travaillent avec des formats de documents hérités. Cependant, le manque de transparence tarifaire et la structure de licences modulaires peuvent augmenter considérablement les coûts totaux.

Démarrer

Essayez IronPDF :

Explorez PDFTron :

N'oubliez pas d'évaluer minutieusement les deux options avec vos cas d'utilisation spécifiques avant de prendre une décision. Considérez des facteurs comme les coûts à long terme, la qualité du support et les feuilles de route des fonctionnalités à côté des capacités techniques.

Commencez avec IronPDF maintenant.
green arrow pointer

Veuillez noterPDFTron est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé ou sponsorisé par PDFTron. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à des fins d'information uniquement et reflètent les informations disponibles publiquement au moment de la rédaction.

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 différences de performance entre IronPDF et PDFTron pour la conversion de HTML en PDF ?

IronPDF offre un rendu supérieur pour le contenu web complexe avec son moteur basé sur Chrome, offrant un meilleur support pour JavaScript et CSS3. PDFTron, bien que plus rapide pour le HTML simple, peut ne pas gérer le contenu complexe aussi efficacement.

Quelles sont les options de licence pour IronPDF et PDFTron ?

IronPDF propose des licences transparentes et perpétuelles avec toutes les fonctionnalités incluses à partir de 749 $. PDFTron, cependant, nécessite des devis personnalisés pour les licences, pouvant aller de 5 000 $ à 100 000 $+ par an.

Est-il possible de convertir des pages ASPX en PDF en utilisant ces bibliothèques ?

Oui, IronPDF peut convertir des pages ASPX en PDF en utilisant la méthode AspxToPdf.RenderThisPageAsPdf en une seule ligne de code. PDFTron ne prend pas directement en charge la conversion des pages ASPX.

Quelle bibliothèque est plus adaptée aux environnements cloud comme Azure ?

IronPDF est optimisé pour les environnements cloud, y compris Azure et AWS, et fonctionne parfaitement avec les Fonctions et WebApps. PDFTron peut nécessiter une configuration supplémentaire pour un déploiement cloud optimal.

Pouvez-vous créer des formulaires PDF remplissables avec IronPDF ou PDFTron ?

Oui, les deux bibliothèques prennent en charge la création de formulaires PDF remplissables. IronPDF utilise CreatePdfFormsFromHtml pour la conversion automatique des formulaires HTML. PDFTron propose de nombreux types de champs de formulaire mais nécessite une intégration plus complexe.

Quelles options de support sont disponibles pour les utilisateurs d'IronPDF et PDFTron ?

IronPDF offre un support technique 24/5 avec accès direct aux développeurs et un temps de réponse typique de 24 à 48 heures. Les options de support de PDFTron varient en fonction du niveau de licence, avec un support basique par forum et une assistance directe payante.

Comment IronPDF et PDFTron se comparent-ils dans la gestion des sites web protégés par mot de passe ?

IronPDF prend en charge l'authentification via ChromeHttpLoginCredentials pour la gestion des formulaires de connexion et l'authentification HTTP, tandis que PDFTron a un support limité pour cette fonctionnalité.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur technique chez Iron Software et un ingénieur visionnaire pionnier dans la technologie des PDF en C#. En tant que développeur original derrière la base de code principale d'Iron Software, il a façonné l'architecture du produit de l'entreprise depuis sa création, ...

Lire la suite