Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de TextControl à IronPDF en C#

Migrer de TextControl àIronPDF: Un guide complet du développeur C

TX Text Control s'est imposé comme un composant d'édition de documents complet dans l'écosystème .NET, offrant de solides capacités d'édition DOCX avec des contrôles d'interface utilisateur intégrés. Cependant, pour les équipes de développement dont le besoin principal est la génération de PDF plutôt que l'édition complète de documents, l'architecture de TextControl présente des frais généraux importants en termes de coûts de licence, de complexité et de dépendances d'exécution.

Ce guide fournit un chemin de migration complet de TextControl à IronPDF, avec des instructions étape par étape, des comparaisons de code et des exemples pratiques pour les développeurs .NET professionnels qui évaluent cette transition.

Pourquoi migrer de TextControl

La décision de migrer à partir de TextControl est généralement centrée sur l'adaptation de votre outil à vos besoins réels. Contrôle de texte TXest fondamentalement un éditeur de documents qui traite la génération de PDF comme une fonctionnalité secondaire. Les principales raisons pour lesquelles les équipes de développement envisagent la migration sont les suivantes

Licences coûteuses : TextControl fonctionne sur la base d'une licence commerciale au prix minimum de 3 398 $ par an et par développeur. Une équipe de quatre personnes peut s'attendre à investir environ 6 749 $ par an, avec des coûts supplémentaires pour les licences d'exécution de déploiement de serveur. Les coûts de renouvellement s'élèvent à 40 % par an, ce qui est obligatoire pour conserver l'accès aux mises à jour.

Le PDF, une réflexion après coup : l'architecture de base est le traitement de texte, pas le PDF. Bien que la génération de PDF soit disponible, il s'agit davantage d'une fonctionnalité supplémentaire que d'un objectif principal, ce qui se traduit par une qualité de sortie qui n'est pas optimale.

Bogues matériels : Le bogue graphique Intel Iris Xe affecte le rendu des documents dans les processeurs Intel les plus récents (11e génération), nécessitant une solution de contournement du registre pour être résolu.

Dépendances gonflées : TextControl comprend des composants d'interface utilisateur pour l'édition de documents dont vous n'avez peut-être pas besoin si vous vous concentrez uniquement sur la génération de PDF.

<Architecture du processeur de mots : non optimisée pour les flux de travail HTML vers PDF que les applications web modernes exigent.

<API complexe : la gestion du contexte et le modèle de sélection du ServerTextControl ajoutent une complexité inutile aux tâches simples de génération de PDF.

Comparaison des coûts

Aspect Contrôle de texte TX IronPDF
Licence de base $3,398+ Une baisse significative
Renouvellement annuel 40% obligatoire Support optionnel
Par développeur Oui Oui
Composants de l'interface utilisateur Ensembles (bloat) Axé sur le PDF
Coût total sur 3 ans $5,750+ Beaucoup plus bas

IronPDFvs TextControl : Comparaison des fonctionnalités

La compréhension des différences architecturales aide les décideurs techniques à évaluer l'investissement dans la migration :

Fonction Contrôle de texte TX IronPDF
Objectif principal Edition DOCX Génération PDF
Coût de la licence 3 398 $/an par développeur 749 $ par développeur
Qualité PDF Fonctionnalité de base, complémentaire Fonctionnalité de base élevée
Compatibilité matérielle Problèmes connus avec Intel Iris Stabilité sur tous les appareils
Intégration à l'interface utilisateur Composants d'interface utilisateur requis Pas de composants gonflés dans l'interface utilisateur
Rendu HTML/CSS Buggy avec HTML HTML5/CSS3 moderne
HTML vers PDF Oui (secondaire) Oui (principal)
Support CSS Limité CSS3 complet
JavaScript Limité ES2024 complet
URL vers PDF Configurationcomplexe Natif
En-têtes/Pieds de page API complexe HTML simple
Fusion de courriers Propriétaire Modèles HTML
PDF/A Oui Oui
Protection par mot de passe Oui Oui
Signatures numériques Oui Oui
Fusionner des PDF Limité Oui
Diviser les PDF Limité Oui
Gestion du contexte Les exigences sont les suivantes Pas nécessaire
Multiplateforme Axé sur Windows Oui

Démarrage rapide : Migration de TextControl vers IronPDF

La migration peut commencer immédiatement grâce à ces étapes fondamentales.

Étape 1 : Remplacer les paquets NuGet

Supprimez tous les paquets TextControl :

# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
# Remove TX Text Control
dotnet remove package TXTextControl.TextControl
dotnet remove package TXTextControl.DocumentServer
SHELL

InstallezIronPDF:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

Étape 2 : Mise à jour des espaces de noms

Remplacer les espaces de noms TextControl par l'espace de noms IronPdf :

// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;

// After (IronPDF)
using IronPdf;
// Before (TextControl)
using TXTextControl;
using TXTextControl.DocumentServer;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Étape 3 : initialisation de la licence

Ajouter l'initialisation de la licence au démarrage de l'application :

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Exemples de migration de code

Conversion de HTML en PDF

Le cas d'utilisation le plus courant démontre la différence architecturale entre ces bibliothèques PDF .NET.

Approche de TextControl:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

                textControl.Load(html, StreamType.HTMLFormat);
                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

                textControl.Load(html, StreamType.HTMLFormat);
                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Approche IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

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

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

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

La version TextControl nécessite la création d'une instance ServerTextControl, l'appel à Create() pour initialiser le contexte, le chargement de HTML avec StreamType.HTMLFormat, et l'enregistrement avec StreamType.AdobePDF. Le bloc utilisant est obligatoire pour une élimination correcte des ressources.

IronPDF élimine totalement la gestion du contexte. Le ChromePdfRenderer ne nécessite aucune cérémonie d'initialisation : il suffit de le créer, de rendre le code HTML et de l'enregistrer. Cette simplification architecturale réduit la charge cognitive et les bogues potentiels liés à la gestion des ressources.

Pour les scénarios avancés de conversion de HTML en PDF, voir le guide de conversion de HTML en PDF.

Fusionner plusieurs fichiers PDF

La fusion des PDF révèle une autre différence de complexité importante entre ces bibliothèques.

Approche de TextControl:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                byte[] pdf1 = File.ReadAllBytes("document1.pdf");
                textControl.Load(pdf1, StreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);

                textControl.Save("merged.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                byte[] pdf1 = File.ReadAllBytes("document1.pdf");
                textControl.Load(pdf1, StreamType.AdobePDF);

                byte[] pdf2 = File.ReadAllBytes("document2.pdf");
                textControl.Load(pdf2, StreamType.AdobePDF, LoadAppendMode.Append);

                textControl.Save("merged.pdf", StreamType.AdobePDF);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Approche IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            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;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var pdf1 = PdfDocument.FromFile("document1.pdf");
            var pdf2 = PdfDocument.FromFile("document2.pdf");

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

TextControl nécessite la lecture de fichiers dans des tableaux d'octets, la gestion du contexte ServerTextControl et l'utilisation de LoadAppendMode.Append pour fusionner des documents. La méthode PdfDocument.Merge() d'IronPDF s'occupe de tout avec un seul appel explicite.

Pour des scénarios de fusion avancés, notamment l'extraction sélective de pages, voir le guide de fusion et de division de PDF.

Ajouter des en-têtes et des pieds de page

Des en-têtes et des pieds de page avec des numéros de page dynamiques illustrent la différence de complexité des API.

Approche de TextControl:

// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
                textControl.Load(html, StreamType.HTMLFormat);

                HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
                header.Text = "Document Header";
                textControl.Sections[0].HeadersAndFooters.Add(header);

                HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
                footer.Text = "Page {page} of {numpages}";
                textControl.Sections[0].HeadersAndFooters.Add(footer);

                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
// NuGet: Install-Package TXTextControl.Server
using TXTextControl;
using System.IO;

namespace TextControlExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServerTextControl textControl = new ServerTextControl())
            {
                textControl.Create();

                string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";
                textControl.Load(html, StreamType.HTMLFormat);

                HeaderFooter header = new HeaderFooter(HeaderFooterType.Header);
                header.Text = "Document Header";
                textControl.Sections[0].HeadersAndFooters.Add(header);

                HeaderFooter footer = new HeaderFooter(HeaderFooterType.Footer);
                footer.Text = "Page {page} of {numpages}";
                textControl.Sections[0].HeadersAndFooters.Add(footer);

                textControl.Save("output.pdf", StreamType.AdobePDF);
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Approche IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            pdf.AddTextHeader("Document Header");
            pdf.AddTextFooter("Page {page} of {total-pages}");

            pdf.SaveAs("output.pdf");
        }
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var renderer = new ChromePdfRenderer();

            string html = "<html><body><h1>Document Content</h1><p>Main body text.</p></body></html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            pdf.AddTextHeader("Document Header");
            pdf.AddTextFooter("Page {page} of {total-pages}");

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

TextControl nécessite la création d'objets HeaderFooter avec des enums HeaderFooterType spécifiques, l'accès à des sections de document via textControl.Sections[0], et l'ajout à la collection HeadersAndFooters.IronPDFfournit des méthodes directes AddTextHeader et AddTextFooter avec une syntaxe de placeholder simple.

Pour les en-têtes basés sur HTML avec un contrôle total du style,IronPDFprend également en charge HtmlHeaderFooter:

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: right; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt;'>
            Company Report
        </div>",
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: right; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Pour en savoir plus sur les options d'en-tête et de pied de page, consultez la documentation sur les en-têtes et les pieds de page.

Référence de mappage de l'API TextControl vers IronPDF

Cette cartographie accélère la migration en indiquant les équivalents directs des API :

Contrôle de texte TX IronPDF Notes
ServerTextControl.Create() new ChromePdfRenderer() Pas de gestion du contexte
tx.Load(html, StreamType.HTMLFormat) renderer.RenderHtmlAsPdf(html) Rendu direct
tx.Load(url, StreamType.HTMLFormat) renderer.RenderUrlAsPdf(url) Prise en charge des URL
tx.Save(path, StreamType.AdobePDF) pdf.SaveAs(path) Simple save
SaveSettings.PDFAConformance RenderingOptions.PdfAFormat PDF/A
DocumentServer.MailMerge Modèles HTML + Razor Fusion de modèles
DocumentTarget.HeadersAndFooters HtmlHeaderFooter En-têtes/pieds de page
LoadSettings Options de rendu Configuration
StreamType.AdobePDF Résultat par défaut Le format PDF est primordial

Problèmes de migration courants et solutions

Enjeu 1 : Contexte du ServerTextControl

TextControl nécessite le bloc Create() et using pour chaque opération.

Solution:IronPDFne dispose pas de gestion du contexte :

// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just create and use
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Édition 2 : Conversions de types de flux

le TextControl charge différents formats et les convertit en PDF grâce aux énumérations StreamType.

Solution:IronPDFrend le HTML directement sans conversion de format intermédiaire :

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

Édition 3 : Modèles DOCX

TextControl utilise des fichiers DOCX pour les modèles avec fusion de courrier.

Solution: Convertir en modèles HTML avec l'interpolation de chaînes de caractères C# ou Razor :

var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };

var html = $@"
<html>
<head>
    <style>
        body {{ font-family: Arial; padding: 40px; }}
        h1 {{ color: #333; }}
        .total {{ font-size: 24px; color: green; }}
    </style>
</head>
<body>
    <h1>Invoice #{data.InvoiceNumber}</h1>
    <p>Customer: {data.CustomerName}</p>
    <p class='total'>Total: {data.Total}</p>
</body>
</html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");
var data = new { CustomerName = "John Doe", InvoiceNumber = "12345", Total = "$1,500.00" };

var html = $@"
<html>
<head>
    <style>
        body {{ font-family: Arial; padding: 40px; }}
        h1 {{ color: #333; }}
        .total {{ font-size: 24px; color: green; }}
    </style>
</head>
<body>
    <h1>Invoice #{data.InvoiceNumber}</h1>
    <p>Customer: {data.CustomerName}</p>
    <p class='total'>Total: {data.Total}</p>
</body>
</html>";

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

Edition 4 : Intel Iris Xe Graphics Bug (en anglais)

TextControl a documenté des problèmes de rendu avec les processeurs Intel de 11e génération, nécessitant des solutions de contournement du registre.

Solution:IronPDFutilise le rendu Chromium - aucun bug d'accélération matérielle ni aucune modification de registre n'est nécessaire.

Liste de contrôle de la migration vers TextControl

Tâches préalables à la migration

Auditez votre base de code pour identifier toutes les utilisations de TextControl :

grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
grep -r "using TXTextControl" --include="*.cs" .
grep -r "ServerTextControl\|Load\|Save" --include="*.cs" .
SHELL

Modèles de publipostage pour la conversion en HTML. Notez les exigences en matière d'en-tête et de pied de page pour la mise en œuvre avec HtmlHeaderFooter. Identifiez toute fonctionnalité d'édition DOCX qui pourrait nécessiter des solutions alternatives.

Tâches de mise à jour du code

  1. Supprimer les paquets NuGet de TX Text Control
  2. Installer le paquet NuGet IronPdf
  3. Suppression de la gestion du contexte du ServerTextControl (plus d'appels Create())
  4. Convert StreamType.HTMLFormat loads to RenderHtmlAsPdf (Convertir les charges StreamType.HTMLFormat en RenduHtmlAsPdf)
  5. Convertir les modèles de fusion de courrier en modèles HTML avec l'interpolation de chaînes de caractères ou Razor
  6. Mettre à jour les en-têtes/pieds de page pour utiliser HtmlHeaderFooterou AddTextHeader/AddTextFooter
  7. Simplifier les paramètres de la page en utilisant RenderingOptions
  8. Ajouter l'initialisation de la licence au démarrage

Test de post-migration

Après la migration, vérifiez ces aspects :

  • Testez l'affichage correct de tous les modèles de documents
  • Vérifier la conformité PDF/Asi nécessaire
  • Tester la fonctionnalité de la protection par mot de passe
  • Vérifier que les en-têtes/pieds de page apparaissent sur toutes les pages
  • Vérification sur le matériel Intel 11e génération - plus besoin de contourner le registre avec IronPDF

Avantages clés de la migration vers IronPDF

Le passage de TextControl àIronPDFprésente plusieurs avantages pour les équipes axées sur la génération de PDF :

PDF-First Architecture :IronPDFest conçu spécifiquement pour la génération de PDF, offrant de solides capacités de création et de rendu de documents en s'appuyant sur les normes modernes HTML5 et CSS3.

Rendement économique : la tarification unique d'IronPDF la rend nettement moins chère au fil du temps, notamment par rapport au service de TextControl basé sur un abonnement avec des renouvellements annuels obligatoires de 40 %.

Stabilité éprouvée : Fiabilité documentée sur différents matériels, évitant les problèmes tels que ceux rencontrés par TextControl avec les cartes graphiques Intel.

Pas de gestion de contexte : Éliminez la cérémonie de création du ServerTextControl et les modèles d'élimination des ressources. Le rendu sans état d'IronPDF simplifie le code et réduit les fuites de mémoire potentielles.

Moteur de rendu moderne : Alors que l'adoption de .NET 10 et C# 14 augmente jusqu'en 2026, le rendu d'IronPDF basé sur Chromium garantit la compatibilité avec les normes web actuelles et futures.

Conclusion

TX Text Control excelle en tant que composant d'édition de documents complet avec des capacités d'édition DOCX et des contrôles d'interface utilisateur intégrés. Cependant, pour les équipes de développement dont la principale exigence est de générer des PDF à partir de HTML, d'URL ou de données, l'infrastructure d'édition de documents représente une complexité et un coût inutiles.

IronPDF offre une génération de PDF ciblée avec une API plus simple, un rendu HTML5/CSS3 moderne et un coût total de possession nettement inférieur. Le chemin de migration est simple : remplacer les packages NuGet, éliminer la gestion du contexte et convertir les opérations StreamType en appels de rendu directs.

Commencez votre migration dès aujourd'hui avec un essai gratuit d'IronPDF et évaluez la différence que la génération de PDF conçue à cet effet fait pour votre flux de travail de développement.

Pour des conseils de mise en œuvre complets, explorez la documentation IronPDF et les tutoriels.

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