IRONSOFTWAREHOME
VIDÉOS

Comment rendre un fichier HTML en PDF en utilisant C#

Curtis Chau
Curtis Chau
Updated: 11 janvier 2026

Pourquoi migrer loin d'Aspose.PDF?

Bien qu'Aspose.PDF offre des fonctionnalités de niveau professionnel, plusieurs facteurs poussent les équipes de développement à rechercher des alternatives modernes pour leurs besoins en matière de génération de PDF.

Comparaison des coûts

Aspose.PDF utilise un modèle de licence perpétuelle qui inclut un an de mises à jour ; le renouvellement optionnel prolonge la fenêtre de mise à jour. Source : Page de tarification d'Aspose.

AspectAspose.PDFIronPDF
Prix de départ (Développeur Petite Entreprise)1 199 $/développeur749 $ en une seule fois (Lite)
Modèle de licencePerpétuel + 1 an de mises à jour ; optional renewalLicence perpétuelle
OEM Développeur3 597 $/développeur (déploiements illimités)Inclus dans les niveaux supérieurs
SupportInclus dans tous les niveaux payantsInclus dans l'offre
Évaluation gratuiteLicence temporaire de 30 jours (sinon filigrane + limites de taille)Gratuit pour le développement

Comparaison des moteurs de rendu HTML

Aspose.PDF utilise un moteur de rendu HTML/CSS interne (pas Chromium) ; les utilisateurs signalent sur le forum Aspose des lacunes avec des fonctionnalités de mise en page CSS moderne telles que Flexbox et CSS Grid.IronPDF utilise une version intégrée de Chromium pour le rendu HTML en PDF.

FonctionAspose.PDF (moteur interne)IronPDF(Chromium)
Support CSS3Partiel ; lacunes dans les fonctionnalités de mise en page modernesCSS3 complet
Flexbox/GridLimité / incohérent (selon les rapports du forum Aspose)Prise en charge complète
JavaScriptLimitéSupport complet (V8 via Chromium)
Fontes WebPartielComplète
Moderne HTML5PartielComplète
Qualité du renduVariable selon les mises en page complexesÉquivalent Chrome

Caractéristiques de performance

Les utilisateurs ont signalé des différences de performance sur le forum de support Aspose. Les chiffres ci-dessous reflètent des scénarios rapportés par la communauté — vérifiez par rapport à votre propre charge de travail.

MétriqueAspose.PDFIronPDF
Rendu HTMLRalentissements rapportés par les utilisateurs sur des charges de travail CSS complexesMoteur Chromium optimisé
Grands documentsCroissance de la mémoire rapportée dans certains scénariosStreaming efficace
Linux PerformanceCroissance élevée du CPU et de la mémoire rapportée sur le forum communautaireStable

Aspose.PDF vs.IronPDF: Principales différences

AspectAspose.PDFIronPDF
Tarification (entrée)1 199 $/développeur (perpétuel + 1 an de mises à jour)749 $ en une seule fois (Lite)
HTML EngineMoteur interne (CSS moderne limité)Chromium (CSS3/JS complet)
PerformanceRalentissements rapportés sur le forum lors de la manipulation de CSS complexesOptimisé
Modèle de licencePerpétuel + .lic fichier ; renouvellement optionnel pour mises à jourClé perpétuelle + clé basée sur le code
Support LinuxRapports de forum sur les problèmes de CPU/mémoireStable
Indexation des pagesBasé sur 1 (Pages[1])Basé sur 0 (Pages[0])

Préparation de la migration

Prérequis

Assurez-vous que votre environnement répond à ces exigences :

  • .NET Framework 4.6.2+ ou .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ ou VS Code avec l'extension C#
  • Accès au Package Manager NuGet
  • Clé de licence IronPDF(essai gratuit disponible sur ironpdf.com)

Audit de l'utilisation d'Aspose.PDF

Exécutez ces commandes dans le répertoire de votre solution pour identifier toutes les références à Aspose.PDF :

# Find all Aspose.Pdf using statements
grep -r "using Aspose.Pdf" --include="*.cs" .

# Find HtmlLoadOptions usage
grep -r "HtmlLoadOptions\|HtmlFragment" --include="*.cs" .

# Find Facades usage
grep -r "PdfFileEditor\|PdfFileMend\|PdfFileStamp" --include="*.cs" .

# Find TextAbsorber usage
grep -r "TextAbsorber\|TextFragmentAbsorber" --include="*.cs" .
SHELL

Modifications importantes à prévoir

Modèle Aspose.PDFChangements requis
new Document() + Pages.Add()Utiliser le rendu HTML à la place
HtmlLoadOptionsChromePdfRenderer.RenderHtmlAsPdf()
TextFragment + positionnement manuelPositionnement basé sur CSS
PdfFileEditor.Concatenate()PdfDocument.Merge()
TextFragmentAbsorberpdf.ExtractAllText()
ImageStampFiligranes au format HTML
.lic licence de fichierClé de licence basée sur le code
indexation des pages basée sur 1indexation des pages basée sur 0

Processus de migration étape par étape

Étape 1 : Mise à jour des paquets NuGet

Supprimez Aspose.PDF et installez IronPDF:

# Remove Aspose.PDF
dotnet remove package Aspose.PDF

# Install IronPDF
dotnet add package IronPdf
SHELL

Ou via la console du Package Manager :

Uninstall-Package Aspose.PDF
Install-Package IronPdf
PowerShell

Étape 2 : Mise à jour des références aux espaces de noms

Remplacer les espaces de noms Aspose.PDF par IronPDF:

// Remove these
using Aspose.Pdf;
using Aspose.Pdf.Text;
using Aspose.Pdf.Facades;
using Aspose.Pdf.Generator;

// Add these
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;

Étape 3 : mise à jour de la configuration de la licence

Aspose.PDF utilise des licences de fichiers .pdf.IronPDF utilise une clé simple basée sur le code.

Mise en œuvre d'Aspose.PDF:

var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");

Mise en œuvre d'IronPDF:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Référence complète de migration des API

Mappage des classes de base

Classe Aspose.PDFÉquivalent d'IronPDF
DocumentPdfDocument
HtmlLoadOptionsChromePdfRenderer
TextFragmentAbsorberPdfDocument.ExtractAllText()
PdfFileEditorPdfDocument.Merge()
TextStamp / ImageStampPdfDocument.ApplyWatermark()
LicenseIronPdf.License

Opérations documentaires

Méthode Aspose.PDFMéthode IronPDF
new Document()new PdfDocument()
new Document(path)PdfDocument.FromFile(path)
doc.Save(path)pdf.SaveAs(path)
doc.Pages.Countpdf.PageCount
doc.Pages.Delete(index)pdf.RemovePages(index)

Conversion HTML en PDF

Méthode Aspose.PDFMéthode IronPDF
new HtmlLoadOptions()new ChromePdfRenderer()
new Document(stream, htmlOptions)renderer.RenderHtmlAsPdf(html)
new Document(path, htmlOptions)renderer.RenderHtmlFileAsPdf(path)

Exemples de migration de code

Chaîne HTML convertie en PDF

L'opération Aspose.PDF la plus courante démontre la différence fondamentale d'approche - Aspose.PDF nécessite d'envelopper du HTML dans un MemoryStream, alors qu'IronPDF accepte directement les chaînes de caractères.

Mise en œuvre d'Aspose.PDF:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
        
        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent)))
        {
            var htmlLoadOptions = new HtmlLoadOptions();
            var document = new Document(stream, htmlLoadOptions);
            document.Save("output.pdf");
        }
        
        Console.WriteLine("PDF created from HTML string");
    }
}

Mise en œuvre d'IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
        
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        
        Console.WriteLine("PDF created from HTML string");
    }
}

IronPDF élimine entièrement le wrapper MemoryStream - une API plus propre et plus intuitive.

Fichier HTML vers PDF

Mise en œuvre d'Aspose.PDF:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;

class Program
{
    static void Main()
    {
        var htmlLoadOptions = new HtmlLoadOptions();
        var document = new Document("input.html", htmlLoadOptions);
        document.Save("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

Mise en œuvre d'IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

Fusionner plusieurs fichiers PDF

Aspose.PDF nécessite de parcourir les pages manuellement.IronPDF fournit une méthode statique Merge.

Mise en œuvre d'Aspose.PDF:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;

class Program
{
    static void Main()
    {
        var document1 = new Document("file1.pdf");
        var document2 = new Document("file2.pdf");
        
        foreach (Page page in document2.Pages)
        {
            document1.Pages.Add(page);
        }
        
        document1.Save("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}

Mise en œuvre d'IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("file1.pdf");
        var pdf2 = PdfDocument.FromFile("file2.pdf");
        
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
        
        Console.WriteLine("PDFs merged successfully");
    }
}

Extraction de texte

Mise en œuvre d'Aspose.PDF:

using Aspose.Pdf;
using Aspose.Pdf.Text;

var document = new Document("document.pdf");
var absorber = new TextAbsorber();

foreach (Page page in document.Pages)
{
    page.Accept(absorber);
}

string extractedText = absorber.Text;
Console.WriteLine(extractedText);

Mise en œuvre d'IronPDF:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text - one line!
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Or extract from specific page
string page1Text = pdf.ExtractTextFromPage(0);

IronPDF simplifie l'extraction de texte en la faisant passer de plusieurs étapes à un seul appel de méthode.

Ajouter des filigranes

Mise en œuvre d'Aspose.PDF:

using Aspose.Pdf;
using Aspose.Pdf.Text;

var document = new Document("document.pdf");

var textStamp = new TextStamp("CONFIDENTIAL");
textStamp.Background = true;
textStamp.XIndent = 100;
textStamp.YIndent = 100;
textStamp.Rotate = Rotation.on45;
textStamp.Opacity = 0.5;
textStamp.TextState.Font = FontRepository.FindFont("Arial");
textStamp.TextState.FontSize = 72;
textStamp.TextState.ForegroundColor = Color.Red;

foreach (Page page in document.Pages)
{
    page.AddStamp(textStamp);
}

document.Save("watermarked.pdf");

Mise en œuvre d'IronPDF:

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.5;
    font-family: Arial;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");

IronPDF utilise un filigrane basé sur HTML/CSS , offrant un contrôle total du style grâce à des technologies web familières.

Protection par mot de passe

Mise en œuvre d'Aspose.PDF:

using Aspose.Pdf;

var document = new Document("document.pdf");
document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256);
document.Save("protected.pdf");

Mise en œuvre d'IronPDF:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");

IronPDF permet un contrôle granulaire des permissions grâce à des propriétés fortement typées. Pour plus d'options, consultez la documentation sur le chiffrement .

En-têtes et pieds de page

Mise en œuvre d'IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-family:Arial; font-size:12px;'>
            Company Header
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-family:Arial; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content here</h1>");
pdf.SaveAs("with_headers.pdf");

IronPDF prend en charge des jetons de remplacement comme {page} et {total-pages} pour la numérotation dynamique des pages. Pour plus d'options, consultez la documentation sur les en-têtes et les pieds de page.

Notes de migration essentielles

Modification de l'indexation des pages

Aspose.PDF utilise une indexation basée sur 1.IronPDF utilise une indexation basée sur 0 :

// Aspose.PDF - 1-based indexing
var firstPage = doc.Pages[1];  // First page
var thirdPage = doc.Pages[3];  // Third page

//IronPDF- 0-based indexing
var firstPage = pdf.Pages[0];  // First page
var thirdPage = pdf.Pages[2];  // Third page

Fichier de licence à la clé de code

Remplacez .lic licence de fichier par une activation par code :

// Aspose.PDF
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");

// IronPDF
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or from environment variable
IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY");

Intégration d'ASP.NET Core

Modèle IronPDF:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }
}

Configuration de l'injection de dépendance

// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();
}

Optimisation des performances

// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}

Dépannage des problèmes de migration courants

Sujet : HtmlLoadOptions introuvable

Remplacer par ChromePdfRenderer :

// Remove this
var doc = new Document(stream, new HtmlLoadOptions());

// Use this
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);

Sujet : TextFragmentAbsorber introuvable

Utilisez l'extraction directe de texte :

// Remove this
var absorber = new TextFragmentAbsorber();
page.Accept(absorber);
string text = absorber.Text;

// Use this
var pdf = PdfDocument.FromFile("doc.pdf");
string text = pdf.ExtractAllText();

Sujet : PdfFileEditor.Concatenate non disponible

Utiliser PdfDocument.Merge() :

// Remove this
var editor = new PdfFileEditor();
editor.Concatenate(files, output);

// Use this
var pdfs = files.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs(output);

Liste de contrôle post-migration

Après avoir effectué la migration du code, vérifiez les points suivants :

  • Supprimer les fichiers de licence Aspose.PDF (.lic)
  • Vérifier la qualité du rendu HTML (CSS Grid et Flexbox devraient maintenant fonctionner correctement)
  • Tester les cas limites avec des documents volumineux et du CSS complexe
  • Mise à jour des références d'index de page (de 1 à 0)
  • Mettre à jour les configurations Docker si nécessaire
  • Mettre à jour les pipelines CI/CD avec la nouvelle configuration de clé de licence
  • Documentez les nouveaux modèles pour votre équipe

Ressources supplémentaires


Migrer de Aspose.PDF à IronPDF déplace votre code source d'un moteur HTML interne à un rendu basé sur Chromium. L'élimination des wrappers MemoryStream, l'extraction de texte simplifiée et un support CSS3 plus large offrent des gains de productivité immédiats, et la clé basée sur le code de IronPDF remplace la gestion des fichiers .lic.

Veuillez noter: Aspose est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié, approuvé ou sponsorisé par Aspose Pty Ltd. 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.
Curtis Chau
Rédacteur technique

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

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise