Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de XFINIUM.PDF vers IronPDF en C#

Migrer de XFINIUM.PDF àIronPDF: Un guide complet du développeur C

XFINIUM.PDF est une bibliothèque PDF multiplateforme qui offre des outils complets pour créer et modifier des PDF de manière programmatique en C#. Bien qu'elle propose deux éditions - Generator et Viewer - la bibliothèque s'appuie sur une programmation graphique basée sur les coordonnées, ce qui crée des défis importants pour les équipes de développement qui créent des applications lourdes en termes de documents. Chaque élément doit être positionné manuellement à l'aide de coordonnées de pixels, ce qui transforme ce qui devrait être un simple document en un exercice de dessin complexe.

Ce guide fournit un chemin de migration complet de XFINIUM.PDF vers 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 XFINIUM.PDF

XFINIUM.PDF est une bibliothèque PDF de bas niveau qui repose sur une programmation graphique basée sur les coordonnées, obligeant les développeurs à positionner manuellement chaque élément sur la page. Cette approche devient un cauchemar de maintenance au fur et à mesure que les besoins évoluent. Les principales raisons pour lesquelles les équipes de développement envisagent la migration sont les suivantes

Pas de support HTML : XFINIUM.PDF ne peut pas convertir HTML/CSS en PDF directement. Elle se concentre sur la création programmatique de PDF à l'aide de primitives de dessin de bas niveau, ce qui peut ne pas suffire pour des projets nécessitant des capacités étendues de conversion de HTML en PDF.

<API basée sur les coordonnées : Le positionnement manuel à l'aide de coordonnées de pixels comme DrawString("text", font, brush, 50, 100) est nécessaire pour chaque élément de la page.

Gestion manuelle des polices : Les objets polices doivent être créés et gérés explicitement à l'aide de classes telles que PdfStandardFontet PdfBrush.

Pas de style CSS : pas de prise en charge du style web moderne. Les couleurs, les polices et les mises en page doivent être gérées manuellement par le biais d'appels de méthodes programmatiques.

Pas de rendu JavaScript : contenu statique uniquement. XFINIUM.PDF ne peut pas rendre un contenu web dynamique ou exécuter JavaScript.

Mise en page complexe : Des calculs manuels de mesure et d'habillage du texte sont nécessaires pour tout ce qui dépasse le simple texte d'une ligne.

Ressources communautaires limitées : les ressources fournies par la communauté, telles que les exemples et les didacticiels, sont insuffisantes par rapport aux solutions courantes, ce qui peut compliquer la tâche des nouveaux utilisateurs.

Le problème central : API graphique vs HTML

XFINIUM.PDF vous oblige à penser comme un programmeur graphique, et non comme un concepteur de documents :

// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, 50, 50);
page.Graphics.DrawString("Customer:", labelFont, brush, 50, 80);
page.Graphics.DrawString(customer.Name, valueFont, brush, 120, 80);
// ... hundreds of lines for a simple document
// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, 50, 50);
page.Graphics.DrawString("Customer:", labelFont, brush, 50, 80);
page.Graphics.DrawString(customer.Name, valueFont, brush, 120, 80);
// ... hundreds of lines for a simple document
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF utilise des langages HTML/CSS familiers :

// IronPDF: Declarative HTML
var html = @"<h1>Invoice</h1><p><b>Customer:</b> " + customer.Name + "</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Declarative HTML
var html = @"<h1>Invoice</h1><p><b>Customer:</b> " + customer.Name + "</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFvs XFINIUM.PDF : Comparaison des fonctionnalités

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

Fonction XFINIUM.PDF IronPDF
HTML à PDF Prise en charge limitée du HTML, axée sur la création programmatique de PDF Conversion complète de HTML en PDF avec une assistance complète
Communauté et assistance Communauté plus restreinte, moins de ressources en ligne disponibles Une grande communauté avec une documentation et des tutoriels complets
Licence Commercial avec licence basée sur les développeurs Commercial
Support multiplateforme De solides capacités multiplateformes Prend également en charge les opérations multiplateformes
Support CSS Non CSS3 complet
JavaScript Non ES2024 complet
Flexbox/Grid Non Oui
Mise en page automatique Non Oui
Sauts de page automatiques Non Oui
Positionnement manuel Les exigences sont les suivantes Facultatif (positionnement CSS)
Courbe d'apprentissage Haut (système de coordonnées) Faible (HTML/CSS)
Verbosité du code Très élevé Faible

Démarrage rapide : Migration de XFINIUM.PDF vers IronPDF

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

Étape 1 : Remplacer le package NuGet

Supprimer XFINIUM.PDF :

# Remove XFINIUM.PDF
dotnet remove package Xfinium.Pdf
# Remove XFINIUM.PDF
dotnet remove package Xfinium.Pdf
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 XFINIUM.PDF par l'espace de noms IronPdf :

// Before (XFINIUM.PDF)
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Content;
using Xfinium.Pdf.FlowDocument;

// After (IronPDF)
using IronPdf;
// Before (XFINIUM.PDF)
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Content;
using Xfinium.Pdf.FlowDocument;

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

L'opération la plus fondamentale révèle la différence de complexité entre ces bibliothèques PDF .NET.

Approche XFINIUM.PDF:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfFlowDocument flowDocument = new PdfFlowDocument();

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

        PdfFlowContent content = new PdfFlowContent();
        content.AppendHtml(html);
        flowDocument.AddContent(content);

        flowDocument.RenderDocument(document);
        document.Save("output.pdf");
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfFlowDocument flowDocument = new PdfFlowDocument();

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

        PdfFlowContent content = new PdfFlowContent();
        content.AppendHtml(html);
        flowDocument.AddContent(content);

        flowDocument.RenderDocument(document);
        document.Save("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Approche IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

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

        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 = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

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

XFINIUM.PDF nécessite la création d'un PdfFixedDocument, d'un PdfFlowDocument, d'un objet PdfFlowContent, l'appel à AppendHtml(), l'ajout de contenu au document de flux, le rendu dans le document fixe et enfin l'enregistrement.IronPDFsimplifie cela en trois lignes : créer un moteur de rendu, effectuer le rendu HTML et enregistrer.

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 montre clairement les différences de complexité des API.

Approche XFINIUM.PDF:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument output = new PdfFixedDocument();

        FileStream file1 = File.OpenRead("document1.pdf");
        PdfFixedDocument pdf1 = new PdfFixedDocument(file1);

        FileStream file2 = File.OpenRead("document2.pdf");
        PdfFixedDocument pdf2 = new PdfFixedDocument(file2);

        for (int i = 0; i < pdf1.Pages.Count; i++)
        {
            output.Pages.Add(pdf1.Pages[i]);
        }

        for (int i = 0; i < pdf2.Pages.Count; i++)
        {
            output.Pages.Add(pdf2.Pages[i]);
        }

        output.Save("merged.pdf");

        file1.Close();
        file2.Close();
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument output = new PdfFixedDocument();

        FileStream file1 = File.OpenRead("document1.pdf");
        PdfFixedDocument pdf1 = new PdfFixedDocument(file1);

        FileStream file2 = File.OpenRead("document2.pdf");
        PdfFixedDocument pdf2 = new PdfFixedDocument(file2);

        for (int i = 0; i < pdf1.Pages.Count; i++)
        {
            output.Pages.Add(pdf1.Pages[i]);
        }

        for (int i = 0; i < pdf2.Pages.Count; i++)
        {
            output.Pages.Add(pdf2.Pages[i]);
        }

        output.Save("merged.pdf");

        file1.Close();
        file2.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Approche IronPDF:

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

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.Collections.Generic;

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

XFINIUM.PDF nécessite la création d'un document de sortie, l'ouverture de flux de fichiers, le chargement de chaque document, l'itération manuelle des pages et leur ajout une à une, la sauvegarde, puis la fermeture des flux.IronPDFfournit une seule méthode PdfDocument.Merge() qui gère toute la complexité en interne.

Explorez la documentation sur la fusion de fichiers PDF pour obtenir des options de fusion supplémentaires.

Créer des PDF avec du texte et des images

Les documents au contenu mixte montrent la différence fondamentale de paradigme.

Approche XFINIUM.PDF:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfPage page = document.Pages.Add();

        PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
        PdfBrush brush = new PdfBrush(PdfRgbColor.Black);

        page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);

        FileStream imageStream = File.OpenRead("image.jpg");
        PdfJpegImage image = new PdfJpegImage(imageStream);
        page.Graphics.DrawImage(image, 50, 100, 200, 150);
        imageStream.Close();

        document.Save("output.pdf");
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfPage page = document.Pages.Add();

        PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
        PdfBrush brush = new PdfBrush(PdfRgbColor.Black);

        page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);

        FileStream imageStream = File.OpenRead("image.jpg");
        PdfJpegImage image = new PdfJpegImage(imageStream);
        page.Graphics.DrawImage(image, 50, 100, 200, 150);
        imageStream.Close();

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

Approche IronPDF:

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

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

        string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
        string html = $@"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
                </body>
            </html>";

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

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

        string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
        string html = $@"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
                </body>
            </html>";

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

XFINIUM.PDF nécessite la création d'un document, l'ajout d'une page, la création d'objets police et pinceau, le dessin de texte à des coordonnées spécifiques, l'ouverture d'un flux d'images, la création d'une PdfJpegImage, le dessin de l'image à des coordonnées avec des dimensions, la fermeture du flux et l'enregistrement.IronPDFutilise du HTML standard avec des images base64 intégrées - la même approche que celle utilisée quotidiennement par les développeurs web.

Référence de mappage de l'API XFINIUM.PDF vers IronPDF

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

XFINIUM.PDF IronPDF Notes
PdfFixedDocument ChromePdfRenderer Créer un moteur de rendu, pas un document
PdfPage Automatique Pages créées à partir de contenu HTML
page.Graphics.DrawString() Éléments de texte HTML <p>, <h1>, <span>, etc.
page.Graphics.DrawImage() <img> balise Images HTML
page.Graphics.DrawLine() CSS border ou <hr> Lignes HTML/CSS
page.Graphics.DrawRectangle() CSS border sur <div> Boîtes HTML
PdfStandardFont CSS font-family Aucun objet de police n'est nécessaire
PdfRgbColor CSS color Couleurs CSS standard
PdfBrush Propriétés CSS Arrière-plan, couleur, etc.
PdfJpegImage balise <img> avec base64 Ou chemin d'accès au fichier
document.Save(stream) pdf.SaveAs() ou pdf.BinaryData Plusieurs options de sortie
PdfFlowDocument RenderHtmlAsPdf() Prise en charge complète du HTML
PdfFlowContent.AppendHtml() RenderHtmlAsPdf() Rendu HTML direct

Problèmes de migration courants et solutions

Édition 1 : Mise en page basée sur les coordonnées

XFINIUM.PDF: Tout nécessite des coordonnées X,Y exactes avec positionnement manuel.

Solution: Utiliser la mise en page HTML/CSS. Pour un positionnement absolu lorsque cela est nécessaire, utilisez CSS :

.positioned-element {
    position: absolute;
    top: 100px;
    left: 50px;
}

Édition 2 : Gestion des objets de police

XFINIUM.PDF: Créez des objets PdfStandardFontou PdfUnicodeTrueTypeFont pour chaque police.

Solution: Utilisez CSS fontamily - les polices sont gérées automatiquement :

<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
HTML

Numéro 3 : Traitement des couleurs

XFINIUM.PDF: Créer des objets PdfRgbColoret PdfBrushpour les couleurs.

Solution: Utilisez les couleurs CSS standard :

.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }
.info { color: rgba(0, 0, 255, 0.8); }

Edition 4 : Sauts de page manuels

XFINIUM.PDF: Suivre la position Y et créer de nouvelles pages manuellement lorsque le contenu déborde.

Solution:IronPDFgère les sauts de page automatiques. Pour un contrôle explicite, utilisez CSS :

.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }

Edition 5 : Chargement d'images

XFINIUM.PDF: Ouvrir des flux de fichiers, créer des objets PdfJpegImage, dessiner aux coordonnées, fermer les flux.

Solution: Utilisez les balises HTML <img> avec les chemins d'accès aux fichiers ou les données base64 :

<img src="image.jpg" width="200" height="150" />
<!-- or -->
<img src="data:image/jpeg;base64,..." />
<img src="image.jpg" width="200" height="150" />
<!-- or -->
<img src="data:image/jpeg;base64,..." />
HTML

Liste de contrôle pour la migration vers XFINIUM.PDF

Tâches préalables à la migration

Auditez votre base de code pour identifier toute utilisation de XFINIUM.PDF :

grep -r "using Xfinium.Pdf" --include="*.cs" .
grep -r "Graphics.DrawString\|Graphics.DrawImage\|Graphics.DrawLine" --include="*.cs" .
grep -r "using Xfinium.Pdf" --include="*.cs" .
grep -r "Graphics.DrawString\|Graphics.DrawImage\|Graphics.DrawLine" --include="*.cs" .
SHELL

Documentez les mises en page basées sur les coordonnées et notez toutes les valeurs de positionnement X,Y. Identifier les objets police et couleur (PdfStandardFont, PdfRgbColor, PdfBrush). Cartographiez les flux de travail PDF fusionnés à l'aide de PdfFixedDocument.Pages.Add().

Tâches de mise à jour du code

  1. Supprimer le paquet NuGet Xfinium.Pdf
  2. Installer le paquet NuGet IronPdf
  3. Mise à jour des importations de l'espace de noms de Xfinium.Pdf vers IronPdf
  4. Convertir les appels DrawString() en éléments de texte HTML
  5. Convertir les appels DrawImage() en balises HTML <img>
  6. Convertir DrawRectangle() et DrawLine() en bordures CSS
  7. Remplacer PdfStandardFontpar CSS font-family
  8. Remplacer PdfRgbColoret PdfBrushpar des couleurs CSS
  9. Remplacer la fusion de boucle de page par PdfDocument.Merge()
  10. Ajouter l'initialisation de la licenceIronPDFau démarrage

Test de post-migration

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

  • Comparer les résultats visuels pour s'assurer que l'apparence correspond aux attentes
  • Vérifier le rendu du texte avec la nouvelle approche HTML/CSS
  • Vérifier le positionnement des images à l'aide de CSS
  • Les sauts de page de test se produisent comme prévu
  • Vérifier que les paramètres de sécurité des PDF sont correctement appliqués
  • Test sur toutes les plateformes cibles

Avantages clés de la migration vers IronPDF

Le passage de XFINIUM.PDF àIronPDFprésente plusieurs avantages décisifs :

Création de contenu basée sur le HTML : Les développeurs web peuvent tirer parti de leurs compétences en HTML et CSS. Il n'est pas nécessaire d'apprendre les API de dessin basées sur les coordonnées ou de gérer les objets de police et de pinceau.

Mise en page automatique : l'habillage du texte, la pagination et la mise en page des flux se font automatiquement. Pas de calcul manuel de la position des éléments ou des sauts de page.

Support CSS moderne : CSS3 complet, y compris les mises en page Flexbox et Grid. Les conceptions réactives sont traduites directement en PDF.

Opérations PDF simplifiées : des appels à une seule méthode pour des opérations courantes telles que PdfDocument.Merge() remplacent les boucles complexes d'itération de pages.

Développement actif : Alors que l'adoption de .NET 10 et C# 14 augmente jusqu'en 2026, les mises à jour régulières d'IronPDF garantissent la compatibilité avec les versions .NET actuelles et futures.

Documentation détaillée : Grande communauté disposant d'une documentation complète, de tutoriels et de ressources d'assistance par rapport à l'écosystème plus restreint de XFINIUM.PDF.

Conclusion

XFINIUM.PDF propose des outils complets de manipulation de PDF dotés de solides capacités multiplateformes. Cependant, son approche de programmation graphique basée sur les coordonnées crée une complexité inutile pour les tâches de génération de documents. Chaque élément nécessite un positionnement manuel, la création d'objets de police et une gestion explicite des couleurs.

IronPDF transforme la génération de PDF d'un exercice de programmation graphique en un développement HTML/CSS familier. Le chemin de migration est simple : remplacer les packages NuGet, convertir les commandes de dessin en éléments HTML et exploiter les CSS pour le style et la mise en page.

Commencez votre migration dès aujourd'hui avec un essai gratuit d'IronPDF et découvrez la simplicité de la génération de documents basée sur HTML.

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