Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer d'iText vers IronPDF en C#

Migrer d'iText àIronPDF: Guide de migration complet en C

La migration d'iText versIronPDFtransforme votre flux de travail PDF .NET d'une API programmatique nécessitant la construction manuelle d'objets Paragraph, Tableet Cellà une approche moderne HTML-first avec une prise en charge complète de CSS3 et de JavaScript. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine les problèmes de licence AGPL et le besoin de modules complémentaires pdfHTML distincts pour les développeurs .NET professionnels.

Pourquoi migrer d'iText à IronPDF

Le piège de la licence AGPL

iText présente de sérieux risques juridiques et commerciaux pour les applications commerciales, que de nombreuses équipes de développement découvrent trop tard :

  1. AGPL Viral License : Si vous utilisez iText dans une application web, l'AGPL exige que vous open-sourcez votre application ENTIÈRE - pas seulement le code PDF, mais l'ensemble de votre base de code. La plupart des logiciels commerciaux ne sont pas concernés.

  2. Pas de licence perpétuelle : iText a éliminé les licences perpétuelles, qui obligent à renouveler les abonnements annuels, ce qui augmente le coût total de possession.

  3. <Coût du module complémentaire pdfHTML : la fonctionnalité HTML vers PDFnécessite le module complémentaire pdfHTML, vendu séparément à un coût supplémentaire en plus de la licence de base.

  4. Audits de licences complexes : les déploiements en entreprise sont confrontés à la complexité des licences et aux risques d'audit qui peuvent retarder les projets et créer un risque juridique.

  5. <API uniquement programmatique : iText nécessite la construction manuelle de PDF de bas niveau avec les objets Paragraph, Table, Cell, ce qui est fastidieux et source d'erreurs pour les mises en page complexes.

  6. Rendu Web moderne limité : même avec pdfHTML, les contenus CSS et JavaScriptcomplexes nécessitent un effort supplémentaire important.

Comparaison entreIronPDFet iText

Fonction iText 7 / iTextSharp IronPDF
Licence AGPL (virale) ou abonnement onéreux Option commerciale, perpétuelle
HTML vers PDF Module complémentaire pdfHTML séparé Rendu Chromium intégré
Support CSS CSS de base CSS3 complet, Flexbox, Grille
JavaScript Aucun Exécution complète
Paradigme API Programmatique (paragraphe, tableau, cellule) HTML d'abord avec CSS
Courbe d'apprentissage Steep (système de coordonnées PDF) Convivialité pour les développeurs web
Risque lié à l'Open Source Doit utiliser des applications web open-source Aucune exigence virale
Modèle de tarification Abonnement uniquement Perpétuel ou abonnement

Pour les équipes qui prévoient l'adoption de .NET 10 et C# 14 jusqu'en 2025 et 2026,IronPDFconstitue une base à l'épreuve du temps grâce à son approche HTML-first qui tire parti des compétences en développement web que votre équipe possède déjà.


Évaluation de la complexité de la migration

Estimation de l'effort par fonctionnalité

Fonction Complexité de la migration Notes
HTML vers PDF Très faible Remplacement direct de la méthode
Fusionner des PDF Faible API plus simple
Texte et images Faible Le HTML remplace le programmatique
Tableaux Moyen Les tableaux HTML remplacent la classe iText Table
En-têtes/Pieds de page Moyen Gestionnaires d'événements → Modèles HTML
Sécurité/Cryptage Faible API basée sur les propriétés

Changement de paradigme

Le changement fondamental dans cette migration iText est de passer de la construction programmatique de PDF au rendu HTML d'abord :

iText :    PdfWriter → PdfDocument → Document → Add(Paragraph) → Add(Table)
IronPDF :  ChromePdfRenderer → RenderHtmlAsPdf(htmlString) → SaveAs()

Ce changement de paradigme est libérateur : au lieu d'apprendre le modèle d'objet d'iText, vous utilisez les compétences HTML et CSS que les développeurs web possèdent déjà.


Avant de commencer

Prérequis

  1. Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Accès NuGet : Capacité à installer des paquets NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur ironpdf.com

Modifications du paquet NuGet

# Remove iText packages
dotnet remove package itext7
dotnet remove package itext7.pdfhtml
dotnet remove package itextsharp

# Install IronPDF
dotnet add package IronPdf
# Remove iText packages
dotnet remove package itext7
dotnet remove package itext7.pdfhtml
dotnet remove package itextsharp

# Install IronPDF
dotnet add package IronPdf
SHELL

Configuration de la licence

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Identifier l'utilisation d'iText

# Find all iText references
grep -r "using iText\|using iTextSharp" --include="*.cs" .
grep -r "PdfWriter\|PdfDocument\|Document\|Paragraph\|Table\|Cell" --include="*.cs" .
grep -r "HtmlConverter\|ConverterProperties" --include="*.cs" .
# Find all iText references
grep -r "using iText\|using iTextSharp" --include="*.cs" .
grep -r "PdfWriter\|PdfDocument\|Document\|Paragraph\|Table\|Cell" --include="*.cs" .
grep -r "HtmlConverter\|ConverterProperties" --include="*.cs" .
SHELL

Référence API complète

Mappages de classes

classe iText 7 classe iTextSharp Équivalent d'IronPDF
PdfWriter PdfWriter ChromePdfRenderer
Document PDF Document Document PDF
Document Document ChromePdfRenderer.RenderHtmlAsPdf()
Paragraphe Paragraphe HTML <p>, <h1>, etc.
Table PdfPTable HTML <table>
Cell PdfPCell HTML <td>, <th>
Image Image HTML <img>
PdfReader PdfReader PdfDocument.FromFile()
PdfMerger N/A PdfDocument.Merge()

Mappages d'espaces de noms

espace de noms iText 7 Équivalent d'IronPDF
iText.Kernel.Pdf IronPDF
iText.Layout IronPDF
iText.Layout.Element Utiliser des éléments HTML
iText.Html2Pdf IronPDF(intégré)
iText.IO.Image Utiliser HTML <img>
iText.Kernel.Utils IronPDF

Exemples de migration de code

Exemple 1 : Conversion HTML vers PDF

Avant (iText 7):

// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
        string outputPath = "output.pdf";

        using (FileStream fs = new FileStream(outputPath, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, fs);
        }
    }
}
// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
        string outputPath = "output.pdf";

        using (FileStream fs = new FileStream(outputPath, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, fs);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

L'approche iText nécessite le paquetage séparé iText.Html2pdf (pdfHTML add-on, vendu séparément), la création d'un FileStream, et l'enveloppement de tout dans des déclarations utilisant pour une élimination appropriée. La méthode HtmlConverter.ConvertToPdf() écrit directement dans le flux.

L'approche d'IronPDF est plus propre : créez un ChromePdfRenderer, appelez RenderHtmlAsPdf() avec votre chaîne HTML, et appelez SaveAs() sur le Document PDFrésultant. Il n'y a pas de paquets séparés, pas de gestion de flux, et le moteur de rendu Chromium fournit un support CSS3 et JavaScriptsupérieur. Voir la documentation HTML vers PDF pour des options de rendu supplémentaires.

Exemple 2 : fusionner plusieurs PDF

Avant (iText 7):

// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;

class Program
{
    static void Main()
    {
        string outputPath = "merged.pdf";
        string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdfDoc = new PdfDocument(writer))
        {
            PdfMerger merger = new PdfMerger(pdfDoc);

            foreach (string file in inputFiles)
            {
                using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
                {
                    merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
                }
            }
        }
    }
}
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;

class Program
{
    static void Main()
    {
        string outputPath = "merged.pdf";
        string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdfDoc = new PdfDocument(writer))
        {
            PdfMerger merger = new PdfMerger(pdfDoc);

            foreach (string file in inputFiles)
            {
                using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
                {
                    merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
                }
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        var pdfDocuments = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf"),
            PdfDocument.FromFile("document3.pdf")
        };

        var merged = PdfDocument.Merge(pdfDocuments);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfDocuments = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf"),
            PdfDocument.FromFile("document3.pdf")
        };

        var merged = PdfDocument.Merge(pdfDocuments);
        merged.SaveAs("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

L'opération de fusion d'iText nécessite une importante documentation : création d'un PdfWriterpour la sortie, enveloppement dans un PdfDocument, création d'un PdfMerger, puis itération dans les fichiers source avec des déclarations using imbriquées pour chaque Document PDFet PdfReader. Vous devez également spécifier des plages de pages avec merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages()).

IronPDF réduit cela à trois étapes : charger les documents avec PdfDocument.FromFile(), appeler la méthode statique PdfDocument.Merge()avec la liste, et enregistrer. L'ensemble de l'opération de fusion devient lisible et facile à maintenir. En savoir plus sur la fusion et la division de PDF.

Exemple 3 : Créer un PDF avec du texte et des images

Avant (iText 7):

// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;

class Program
{
    static void Main()
    {
        string outputPath = "document.pdf";

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdf = new PdfDocument(writer))
        using (Document document = new Document(pdf))
        {
            document.Add(new Paragraph("Sample PDF Document"));
            document.Add(new Paragraph("This document contains text and an image."));

            Image img = new Image(ImageDataFactory.Create("image.jpg"));
            img.SetWidth(200);
            document.Add(img);
        }
    }
}
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;

class Program
{
    static void Main()
    {
        string outputPath = "document.pdf";

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdf = new PdfDocument(writer))
        using (Document document = new Document(pdf))
        {
            document.Add(new Paragraph("Sample PDF Document"));
            document.Add(new Paragraph("This document contains text and an image."));

            Image img = new Image(ImageDataFactory.Create("image.jpg"));
            img.SetWidth(200);
            document.Add(img);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Sample PDF Document</h1>
            <p>This document contains text and an image.</p>
            <img src='image.jpg' width='200' />";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("document.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Sample PDF Document</h1>
            <p>This document contains text and an image.</p>
            <img src='image.jpg' width='200' />";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("document.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Cet exemple illustre parfaitement le changement de paradigme. iText nécessite :

  • Déclarations utilisant triplement imbriquées (PdfWriter, PdfDocument, Document)
  • Création d'objets Paragraphe pour chaque élément de texte avec new Paragraph()
  • Utilisation de ImageDataFactory.Create() pour charger des images
  • Création d'un objet Imageet appel séparé de SetWidth()
  • Appeler document.Add() pour chaque élément

IronPDF utilise le langage HTML standard : <h1> pour les titres, <p> pour les paragraphes et <img> pour les images avec un attribut width. Les développeurs web peuvent immédiatement tirer parti de leurs compétences existantes et les concepteurs peuvent styliser les documents à l'aide des feuilles de style CSS qu'ils connaissent déjà.


Notesde migration essentielles

Changement de paradigme : De la programmation à l'HTML d'abord

Le changement le plus important dans cette migration iText est d'ordre conceptuel. iText crée des PDF par programmation :

// iText approach
document.Add(new Paragraph("Title")
    .SetTextAlignment(TextAlignment.CENTER)
    .SetFontSize(24)
    .SetBold());

var table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth();
table.AddHeaderCell(new Cell().Add(new Paragraph("ID")));
table.AddHeaderCell(new Cell().Add(new Paragraph("Name")));
// ... many more lines
// iText approach
document.Add(new Paragraph("Title")
    .SetTextAlignment(TextAlignment.CENTER)
    .SetFontSize(24)
    .SetBold());

var table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth();
table.AddHeaderCell(new Cell().Add(new Paragraph("ID")));
table.AddHeaderCell(new Cell().Add(new Paragraph("Name")));
// ... many more lines
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF utilise HTML et CSS :

//IronPDFapproach
string html = @"
    <style>
        h1 { text-align: center; font-size: 24px; font-weight: bold; }
        table { width: 100%; border-collapse: collapse; }
        th { background-color: #4CAF50; color: white; padding: 8px; }
    </style>
    <h1>Title</h1>
    <table>
        <tr><th>ID</th><th>Name</th></tr>
    </table>";

var pdf = renderer.RenderHtmlAsPdf(html);
//IronPDFapproach
string html = @"
    <style>
        h1 { text-align: center; font-size: 24px; font-weight: bold; }
        table { width: 100%; border-collapse: collapse; }
        th { background-color: #4CAF50; color: white; padding: 8px; }
    </style>
    <h1>Title</h1>
    <table>
        <tr><th>ID</th><th>Name</th></tr>
    </table>";

var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La licence AGPL a été éliminée

la licence AGPL d'iText nécessite la mise en open source de l'ensemble de votre application web ou l'achat d'une licence commerciale onéreuse. La licence commerciale d'IronPDF permet un déploiement dans des logiciels propriétaires sans exigence de licence virale.

Aucun complément pdfHTML requis

iText nécessite le module complémentaire pdfHTML pour la conversion HTML-PDF, vendu à un prix supplémentaire.IronPDFinclut le rendu HTML complet basé sur Chromium dans le package de base.

Method Replacement Patterns (Modèles de remplacement de méthodes)

modèle iText Remplacement d'IronPDF
SetTextAlignment(TextAlignment.CENTER) CSS text-align : center
SetFontSize(24) CSS font-size : 24px
SetBold() CSS font-weight : bold
nouveau tableau(3) HTML <table>
AddHeaderCell(new Cell().Add(new Paragraph())) HTML <th>
AddCell(new Cell().Add(new Paragraph())) HTML <td>

Dépannage

Édition 1 : PdfWriter/Document Pattern (en anglais)

Problème : Le code utilise le modèle d'imbrication PdfWriterDocument PDFDocument.

Solution : Remplacer par ChromePdfRenderer:

// Delete this iText pattern:
// using (var writer = new PdfWriter(outputPath))
// using (var pdfDoc = new PdfDocument(writer))
// using (var document = new Document(pdfDoc))

// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
// Delete this iText pattern:
// using (var writer = new PdfWriter(outputPath))
// using (var pdfDoc = new PdfDocument(writer))
// using (var document = new Document(pdfDoc))

// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Édition 2 : HtmlConverter introuvable

Problème : Le code utilise iText.Html2pdf.HtmlConverter qui nécessite le module complémentaire pdfHTML.

Solution : Utilisez le rendu HTML intégré d'IronPDF :

// iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream);

//IronPDF(built-in)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
// iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream);

//IronPDF(built-in)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Édition 3 : Complexité de PdfMerger

Problème : Le PdfMergerd'iText nécessite des lecteurs imbriqués et la spécification d'une plage de pages.

Solution : Utilisez la méthode de fusion statique d'IronPDF :

// iText merger pattern (delete this)
// using (PdfDocument pdfDoc = new PdfDocument(writer))
// {
//     PdfMerger merger = new PdfMerger(pdfDoc);
//     foreach (string file in inputFiles)
//     {
//         using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
//         {
//             merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
//         }
//     }
// }

//IronPDF(simple)
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
// iText merger pattern (delete this)
// using (PdfDocument pdfDoc = new PdfDocument(writer))
// {
//     PdfMerger merger = new PdfMerger(pdfDoc);
//     foreach (string file in inputFiles)
//     {
//         using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
//         {
//             merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
//         }
//     }
// }

//IronPDF(simple)
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Liste de contrôle de la migration

Pré-migration

  • [Inventaire de tous les appels API d'iText dans la base de code
  • [Identifier les modèles programmatiques de construction de PDF (Paragraphe, Tableau, Cellule)
  • [Utilisation de Document HtmlConverter (pdfHTML add-on)
  • [ ] Évaluer le risque de conformité à l'AGPL
  • [Obtenir la clé de licence IronPDF

Migration de code

  • [Supprimer les paquets NuGet d'iText : dotnet remove package itext7
  • [Installer le paquet NuGet IronPdf : dotnet add package IronPdf
  • [Mise à jour des importations de l'espace de noms (utilisant iText.*utilisant IronPdf)
  • [Remplacer le modèle PdfWriter/Document par ChromePdfRenderer
  • [ ] Convertir Paragraphe/Table/Cellule en éléments HTML
  • [Remplacer HtmlConverter.ConvertToPdf() par RenderHtmlAsPdf()
  • [Mise à jour des opérations de fusion vers PdfDocument.Merge()
  • [Ajouter l'initialisation de la clé de licence au démarrage

Testing

  • [Test de tous les chemins de génération PDF
  • [Vérifier que le résultat visuel correspond aux attentes
  • [Test avec contenu HTML/CSS complexe
  • [Performances de référence

Post-Migration

  • [Supprimer les fichiers de licence iText et les références
  • [Mise à jour de la documentation
  • [Annuler l'abonnement à iText (le cas échéant)
  • [Archiver le code iText existant

Conclusion

La migration d'iText versIronPDFélimine le piège de la licence AGPL tout en simplifiant votre code de génération de PDF. Le changement de paradigme entre la construction programmatique et le rendu HTML signifie que votre équipe peut tirer parti de ses compétences en matière de développement web au lieu d'apprendre le modèle d'objet d'iText.

Les principaux changements apportés à cette migration sont les suivants :

  1. <Licence : AGPL (virale) → Commerciale (permissive)
  2. Support HTML : module complémentaire pdfHTML séparé → Chromium intégré
  3. Paradigme API : Programmatique (paragraphe, tableau, cellule) → HTML/CSS
  4. Fusion : PdfMerger complexe → Simple PdfDocument.Merge()
  5. Courbe d'apprentissage : Système de coordonnées PDF → convivialité pour les développeurs web

Explorez la documentation complète IronPDF, tutoriel, et référence API pour accélérer votre migration vers iText.

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 ...

Lire la suite