Comment migrer de Spire.PDF vers IronPDF en C#
La migration de Spire.PDF vers IronPDF déplace votre génération de PDF en dehors d'un chemin HTML hérité qui produit souvent du texte basé sur des images et vers un pipeline Chromium qui produit du texte vrai, sélectionnable et consultable. Ce guide fournit un chemin de migration complet, étape par étape, couvrant les compromis de rendu HTML de Spire.PDF et les problèmes d'intégration de polices signalés.
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 |
|---|---|---|
| Le texte est souvent rendu sous forme d'images sur le chemin HTML hérité | PDF non consultables, non accessibles, impossibilité de copier le texte | Rendu de texte réel |
| Dépendance IE/Edge Legacy ou QtWebKit sur le chemin hérité | Rendu obsolète, problèmes de CSS moderne | Chromium moderne intégré |
| Problèmes d'intégration de polices signalés | Les documents ne semblent pas corrects sur d'autres systèmes | Gestion fiable des polices |
| Grande empreinte de déploiement | Utilisation de mémoire plus élevée | Runtime Chromium intégré |
| CSS limité sur le chemin hérité | 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
Un inconvénient signalé du chemin HTML hérité de Spire.PDF est son inclination à rendre le texte dans les documents HTML sous forme d'images. Cela produit des PDFs où le texte n'est pas sélectionnable ou consultable — une limitation pour les applications nécessitant une recherche ou une interaction avec le texte.
Lorsque vous utilisez la méthode LoadFromHTML() de Spire.PDF sur l'ancien moteur, elle rend souvent le texte sous forme d'images bitmap plutôt que du texte réel, créant ces problèmes :
- 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 | IE/QtWebKit hérité par défaut ; opt-in ChromeHtmlConverter (nécessite Chrome système) depuis v10.7.21 |
Chromium intégré (moderne, pas d'installation supplémentaire) |
| Sortie texte (chemin HTML) | Souvent rendu comme des images sur le chemin hérité | Texte réel (sélectionnable et consultable) |
| Traitement des polices | Problèmes signalés sur le chemin hérité | Gestion fiable des polices |
| Support CSS3 | Limité sur le chemin hérité | Complet |
| Flexbox/Grid | Non pris en charge sur le chemin hérité | Prise en charge |
| JavaScript | Limité sur le chemin hérité | ES6+ complet |
| Accessibilité des PDF | Mauvais sur le chemin hérité (sortie basée sur des images) | Sortie de texte balisé |
| Conception d'API | Beaucoup de surcharges, paramètres manuels de page | Rendu fluide unique |
| Licence | Freemium/Commercial | Commercial |
Sur le .NET moderne,IronPDF aborde les compromis HTML-to-PDF de Spire.PDF en rendant le texte comme du texte réellement sélectionnable plutôt que des images, de sorte que les PDFs résultants 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 vrai texte entièrement sélectionnable, recherchable et accessible. Aucun appel Close() requis—IronPDF utilise le modèle dispose pour une récupération 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 quelles pages insérer, et enfin d'appeler Close() sur chaque document.
IronPDF utilise le modèle PdfDocument.FromFile() plus simple 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 le 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 des fichiers volumineuse : La sortie basée sur l'image à partir du chemin HTML hérité peut produire des fichiers dix fois plus volumineux que la sortie texte produite par IronPDF pour le même contenu.
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 du moteur HTML hérité
Les moteurs de rendu de Spire.PDF
Le LoadFromHTML(...) de Spire.PDF a historiquement offert deux chemins : un chemin non-plugin soutenu par le contrôle WebBrowser legacy de Windows Internet Explorer / Edge, et un chemin plugin QT/WebKit téléchargeable séparément. Spire.PDF 10.7.21 (mi-2024) a ajouté une troisième option, ChromeHtmlConverter, qui passe par un Google Chrome installé localement — mais elle est opt-in et l'API originale LoadFromHTML utilise toujours par défaut les anciens moteurs. IE/Edge Legacy a été abandonné par Microsoft en 2022, le CSS moderne est peu fiable sur le chemin hérité, le support JavaScript est partiel, et le rendu peut varier selon les systèmes.
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)
- Appels
LoadFromHTML()des documents (ceci est la priorité à corriger) - Obtenez votre clé de licence IronPDF sur IronPDF
Mises à jour du code
- Supprimer le paquet NuGet
Spire.PDF(etFreeSpire.PDFsi vous utilisez la version gratuite) - Installer le paquet NuGet
IronPdf - Mettre à jour les imports de namespace (
using Spire.Pdf;→using IronPdf;) - Remplacer
LoadFromHTML()parRenderHtmlAsPdf()(CORRECTION CRITIQUE) - Remplacer
new PdfDocument()+LoadFromFile()parPdfDocument.FromFile() - Remplacer
InsertPageRange()parPdfDocument.Merge() - Remplacer
Canvas.DrawString()parTextStamper+ApplyStamp() - Remplacer
SaveToFile()parSaveAs() - Supprimer tous les appels
Close()(non nécessaire 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

