Comment migrer de Spire.PDF vers IronPDF en C#
La migration de Spire.PDF versIronPDFtransforme votre flux de travail de génération de PDF d'une bibliothèque qui rend le texte sous forme d'images à une bibliothèque qui produit du texte véritable, sélectionnable et consultable à l'aide d'un moteur de rendu moderne Chromium. Ce guide fournit un chemin de migration complet, étape par étape, qui résout les limitations critiques de Spire.PDF en matière de rendu HTML et les problèmes d'intégration des polices.
Pourquoi migrer de Spire.PDF à IronPDF
Comprendre Spire.PDF
Spire.PDF est une bibliothèque PDF commerciale robuste conçue pour les développeurs .NET afin de traiter efficacement les documents PDF. Spire.PDF s'est imposé dans la communauté des programmeurs pour ses capacités spécifiques, en particulier dans les applications patrimoniales, et ses capacités d'intégration s'alignent parfaitement sur les autres composants de la gamme d'outils E-iceblue.
Cependant, Spire.PDF présente plusieurs problèmes fondamentaux qui affectent son utilisation dans le monde réel, en particulier en ce qui concerne la conversion HTML vers PDF et la prise en charge des normes web modernes.
Questions techniques essentielles
| Problème | Impact | Solution IronPDF |
|---|---|---|
| Texte rendu en images | PDF non consultables, non accessibles, impossibilité de copier le texte | Rendu de texte réel |
| Dépendance d'Internet Explorer | Rendu obsolète, risques de sécurité | Moteur moderne Chromium |
| Echecs d'intégration des polices | Les documents ne semblent pas corrects sur d'autres systèmes | Gestion fiable des polices |
| Grande empreinte de déploiement | Utilisation élevée de la mémoire, démarrage lent | Déploiement efficace |
| Support CSS limité | Les mises en page modernes ne s'affichent pas correctement | Prise en charge complète de CSS3 |
Le problème principal : les PDF basés sur des images
L'un des inconvénients majeurs de Spire.PDF est sa tendance à rendre le texte des documents HTML sous forme d'images. Il en résulte des PDF dont le texte n'est ni sélectionnable ni consultable, ce qui peut constituer une sérieuse limitation pour les applications nécessitant une fonctionnalité de recherche ou une interaction avec le texte du document.
Lorsque vous utilisez la méthode LoadFromHTML() de Spire.PDF, le texte est souvent rendu sous forme d'images bitmap plutôt que de texte réel, ce qui crée les problèmes suivants :
- Le texte NE PEUT PAS être sélectionné
- Le texte NE PEUT PAS faire l'objet d'une recherche
- Le texte NE PEUT PAS être copié
- Les lecteurs d'écran NE PEUVENT PAS la lire (violation de l'accessibilité)
- La taille du fichier est BEAUCOUP plus importante
- Le zoom provoque une pixellisation
Comparaison entre Spire.PDF et IronPDF
| Fonction | Spire.PDF | IronPDF |
|---|---|---|
| Rendu HTML vers PDF | Texte rendu sous forme d'images | Rendu en texte intégral (sélectionnable et consultable) |
| Moteur de rendu | Internet Explorer dépend de certains systèmes | Basé sur Chromium, conforme aux normes web modernes |
| Traitement des polices | Problèmes connus avec l'intégration des polices | Gestion fiable et robuste des polices |
| Support CSS3 | Limité | Complet |
| Flexbox/Grid | Non pris en charge | Prise en charge |
| JavaScript | Limité | ES6+ complet |
| Accessibilité des PDF | Médiocre (basé sur l'image) | Excellente |
| Conception d'API | Complexe | Simple et intuitif |
| Empreinte de déploiement | Grandes | Modéré |
| Licence | Freemium/Commercial | Commercial |
Pour les équipes qui prévoient d'adopter .NET 10 et C# 14 d'ici 2025 et 2026,IronPDFrésout les problèmes critiques liés à la conversion HTML-PDF de Spire.PDF en rendant le texte sous forme de texte sélectionnable réel plutôt que d'images, ce qui garantit que les PDF sont consultables et accessibles.
Avant de commencer
Prérequis
- Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Accès à NuGet : possibilité d'installer des packages NuGet
- Licence IronPDF : Obtenez votre clé de licence sur IronPDF
Modifications du paquet NuGet
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdf
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdf
Configuration de la licence
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Référence API complète
Modifications de l'espace de nommage
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
Mappages de l'API de base
| Spire.PDF | IronPDF |
|---|---|
new PdfDocument() |
new ChromePdfRenderer() |
pdf.LoadFromHTML() |
renderer.RenderHtmlAsPdf() |
pdf.LoadFromFile() |
PdfDocument.FromFile() |
pdf.SaveToFile() |
pdf.SaveAs() |
pdf.Close() |
Pas nécessaire |
pdf.Pages.Add() |
renderer.RenderHtmlAsPdf() |
pdf.InsertPageRange() |
PdfDocument.Merge() |
page.Canvas.DrawString() |
TextStamper + ApplyStamp() |
PdfFont |
Style CSS en HTML |
PdfBrush |
Style CSS en HTML |
Exemples de migration de code
Exemple 1 : Conversion HTML vers PDF
Avant (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System
Class Program
Shared Sub Main()
Dim pdf As New PdfDocument()
Dim htmlLayoutFormat As New PdfHtmlLayoutFormat()
Dim htmlString As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
pdf.LoadFromHTML(htmlString, False, True, True)
pdf.SaveToFile("output.pdf")
pdf.Close()
End Sub
End Class
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlString As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
pdf.SaveAs("output.pdf")
End Sub
End Class
Cet exemple illustre la différence fondamentale dans le rendu HTML. Spire.PDF utilise LoadFromHTML() avec un objet PdfHtmlLayoutFormat, qui rend souvent le texte sous forme d'images bitmap. Le résultat est un PDF dans lequel les utilisateurs ne peuvent pas sélectionner, copier ou rechercher du texte.
IronPDF utilise un ChromePdfRenderer avec RenderHtmlAsPdf(), produisant un texte véritable entièrement sélectionnable, consultable et accessible. Aucun appel à Close() n'est requis :IronPDFutilise le modèle de suppression pour le nettoyage automatique. Consultez la documentation HTML vers PDF pour des exemples complets.
Exemple 2 : Fusionner plusieurs PDF
Avant (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
Imports Spire.Pdf
Imports System
Class Program
Shared Sub Main()
Dim pdf1 As New PdfDocument()
pdf1.LoadFromFile("document1.pdf")
Dim pdf2 As New PdfDocument()
pdf2.LoadFromFile("document2.pdf")
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1)
pdf1.SaveToFile("merged.pdf")
pdf1.Close()
pdf2.Close()
End Sub
End Class
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
Spire.PDF nécessite de charger manuellement chaque document avec new PdfDocument() + LoadFromFile(), puis d'utiliser InsertPageRange() pour spécifier les pages à insérer, et enfin d'appeler Close() sur chaque document.
IronPDF utilise le modèle plus simple PdfDocument.FromFile() et une méthode statique PdfDocument.Merge() qui accepte plusieurs documents. Aucun appel Close() nécessaire. Pour en savoir plus, consultez nos tutoriels.
Exemple 3 : Ajouter du texte à un PDF
Avant (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
Imports System
Class Program
Shared Sub Main()
Dim pdf As New PdfDocument()
Dim page As PdfPageBase = pdf.Pages.Add()
Dim font As New PdfFont(PdfFontFamily.Helvetica, 20)
Dim brush As PdfBrush = New PdfSolidBrush(Color.Black)
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, New PointF(50, 50))
pdf.SaveToFile("output.pdf")
pdf.Close()
End Sub
End Class
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>")
Dim textStamper = New TextStamper() With {
.Text = "Hello from IronPDF!",
.FontSize = 20,
.VerticalOffset = 50,
.HorizontalOffset = 50
}
pdf.ApplyStamp(textStamper)
pdf.SaveAs("output.pdf")
End Sub
End Class
Spire.PDF utilise un modèle de dessin basé sur un canevas avec PdfFont, PdfBrush et page.Canvas.DrawString() pour positionner le texte à des coordonnées spécifiques en utilisant PointF.
IronPDF utilise un objet TextStamper avec des propriétés intuitives comme Text, FontSize, VerticalOffset et HorizontalOffset, puis l'applique avec ApplyStamp(). Cette approche est plus déclarative et plus facile à maintenir.
Le problème du texte en tant qu'image
Pourquoi c'est essentiel
Lorsque Spire.PDF convertit du HTML au PDF en utilisant un rendu basé sur l'image, vos documents perdent des fonctionnalités essentielles :
1. Recherche de texte impossible : les utilisateurs ne peuvent pas utiliser Ctrl+F pour rechercher du texte. Les systèmes de gestion documentaire ne peuvent pas indexer le contenu.
2. Impossible de sélectionner/copier du texte : les utilisateurs qui tentent de copier une citation, une référence ou des données ne peuvent pas sélectionner de texte, car il s'agit d'une image.
3. Violations de l'accessibilité : Les PDF basés sur des images ne sont pas conformes aux WCAG 2.1, à la Section 508 (gouvernement américain), aux exigences de l'ADA et à la compatibilité avec les lecteurs d'écran.
4. Taille importante des fichiers : Une comparaison du même contenu montre que Spire.PDF (basé sur l'image) produit des fichiers jusqu'à 16 fois plus volumineuxIronPDF(basé sur le texte).
Détection : Votre PDF est-il basé sur des images ?
Ouvrez votre document généré par Spire.PDF et effectuez les tests suivants :
- Sélection de texte : Cliquez et faites glisser le curseur sur le texte. Si rien n'est souligné → IMAGE-BASED
- Recherche Ctrl+F : Rechercher n'importe quel mot sur la page. Si "Aucune correspondance trouvée" → IMAGE-BASED
- Copier/Coller : Sélectionnez et copiez le texte dans le Bloc-notes. Si rien ne colle → IMAGE-BASED
Le problème d'Internet Explorer
Le moteur de rendu de Spire.PDF
Spire.PDF s'appuie sur Internet Explorer/Edge Legacy pour le rendu HTML dans certains environnements. IE a été supprimé en 2022, les feuilles de style CSS modernes ne fonctionnent pas, la prise en charge de JavaScript est limitée et le rendu n'est pas cohérent d'un système à l'autre.
Le CSS moderne qui échoue dans Spire.PDF
<div style="display: flex; justify-content: space-between; gap: 20px;">
<div style="flex: 1;">Column 1</div>
<div style="flex: 1;">Column 2</div>
</div>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
<div style="display: flex; justify-content: space-between; gap: 20px;">
<div style="flex: 1;">Column 1</div>
<div style="flex: 1;">Column 2</div>
</div>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
IronPDF utilise le rendu moderne de Chromium, de sorte que toutes ces fonctionnalités CSS fonctionnent correctement.
Nouvelles capacités après la migration
Après avoir migré vers IronPDF, vous bénéficiez de fonctionnalités que Spire.PDF ne peut pas vous offrir :
Texte sélectionnable et consultable
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>")
pdf.SaveAs("contract.pdf")
' Result:
' ✅ Text is fully selectable
' ✅ Text is searchable with Ctrl+F
' ✅ Text can be copied to clipboard
' ✅ Screen readers work perfectly
' ✅ File size is compact
' ✅ Zooming is crystal clear
Support CSS moderne
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
Dim renderer = New ChromePdfRenderer()
Dim html = "
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
' All modern CSS features render correctly!
Filigranes basés sur le HTML
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.ApplyWatermark("
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>")
Liste de contrôle de la migration
Pré-migration
- Recenser toutes les utilisations de Spire.PDF dans le code source
- Tester la sélection du texte dans les fichiers PDF existants (détection des problèmes critiques)
- Document
LoadFromHTML()appels (ces appels sont prioritaires à corriger) - Obtenez votre clé de licenceIronPDFsur IronPDF
Mises à jour du code
- Supprimez le package NuGet
Spire.PDF(etFreeSpire.PDFsi vous utilisez la version gratuite) - Installer le package NuGet
IronPdf - Mise à jour des importations d'espace de noms (
using Spire.Pdf;→using IronPdf;) - Remplacer
LoadFromHTML()parRenderHtmlAsPdf()(CORRECTION CRITIQUE) - Remplacez
new PdfDocument()+LoadFromFile()parPdfDocument.FromFile() - Remplacez
InsertPageRange()parPdfDocument.Merge() - Remplacez
Canvas.DrawString()parTextStamper+ApplyStamp() - Remplacez
SaveToFile()parSaveAs() - Supprimer tous les appels
Close()(inutiles dans IronPDF) - Ajouter l'initialisation de la licence au démarrage de l'application
Essai
- Vérifier que le texte est sélectionnable dans les PDF générés (TEST CRITIQUE)
- Vérifier les améliorations du rendu CSS (Flexbox/Grid fonctionnent désormais)
- Vérifiez que la taille des fichiers est plus petite
- Tester l'accessibilité avec les lecteurs d'écran
- Comparaison des performances

