Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de DynamicPDF à IronPDF en C#

Migrer de DynamicPDFàIronPDF: Guide de migration complet en C

DynamicPDF est une bibliothèque PDF .NET établie de longue date, connue pour son ensemble complet de fonctionnalités de génération, de fusion et de manipulation de fichiers PDF. Cependant, le modèle de produit fragmenté de DynamicPDF- qui nécessite des licences distinctes pour le générateur, le fusionneur, le convertisseur HTML et d'autres composants - crée des problèmes de complexité et de coût pour les équipes de développement. Ce guide complet fournit un chemin de migration étape par étape de DynamicPDFversIronPDF- une bibliothèque PDF .NET tout-en-un qui combine la génération, la manipulation et la conversion HTML dans un seul package avec un rendu moderne basé sur Chromium.

Pourquoi migrer de DynamicPDFà IronPDF?

La fragmentation du produit DynamicPDFreprésente le principal moteur de la migration. Il est essentiel de comprendre le modèle de licence pour évaluer le coût réel de votre implémentation actuelle.

Le problème de la fragmentation des produits

DynamicPDF est vendu en tant que produits séparés avec des licences séparées :

  1. DynamicPDF Generator : Créer des PDF à partir de zéro
  2. DynamicPDF Merger : Fusionner, diviser et manipuler des PDF existants (achat séparé)
  3. DynamicPDF Core Suite : Générateur et fusion combinés
  4. DynamicPDF ReportWriter : Génération de rapports
  5. DynamicPDF HTML Converter : conversion de HTML en PDF (module complémentaire séparé)
  6. DynamicPDF Print Manager : Imprimer des PDF de manière programmatique

Une solution PDF complète nécessite 3 à 5 licences distinctes avec DynamicPDF.IronPDFinclut tout dans un seul et même package.

Comparaison des architectures

Aspect DynamicPDF IronPDF
Modèle de produit Fragmenté (5+ produits) Bibliothèque tout-en-un
Licence Plusieurs licences requises Licence unique
HTML à PDF Achat séparé d'un module complémentaire Intégrée, basée sur Chromium
Support CSS Limité (nécessite un module complémentaire) CSS3 complet avec Flexbox/Grid
Style API Positionnement par coordonnées HTML/CSS + manipulation API
Courbe d'apprentissage Steep (plusieurs API) Doux (technologies web)
Moderne .NET .NET Standard 2.0 .NET 6/7/8/9+ natif

Avantages principaux de la migration

  1. Paquet unique : Un package NuGet remplace 3 à 5 packages DynamicPDF
  2. Rendu moderne : Le moteur Chromium contre le rendu traditionnel
  3. Technologies du web : Utiliser HTML/CSS au lieu du positionnement par coordonnées
  4. Simpler API : Moins de code, plus lisible, maintenance plus facile
  5. Pas d'achats supplémentaires : HTML, fusion, sécurité inclus

Préparation de la migration

Prérequis

Assurez-vous que votre environnement répond à ces exigences :

  • .NET Framework 4.6.2+ ou .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ ou VS Code avec l'extension C#
  • Accès au gestionnaire de paquets NuGet
  • Clé de licenceIronPDF(essai gratuit disponible sur ironpdf.com)

Audit de l'utilisation de DynamicPDF

Exécutez ces commandes dans le répertoire de votre solution pour identifier toutes les références à DynamicPDF:

# Find all DynamicPDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep -i dynamic
# Find all DynamicPDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep -i dynamic
SHELL

Paquets courants à rechercher :

  • ceTe.DynamicPDF.CoreSuite.NET
  • ceTe.DynamicPDF.Generator.NET
  • ceTe.DynamicPDF.Merger.NET
  • ceTe.DynamicPDF.HtmlConverter.NET

Comprendre le changement de paradigme

Le changement le plus important lors de la migration de DynamicPDFversIronPDFest l'approche fondamentale de la création de documents. DynamicPDFutilise un positionnement basé sur les coordonnées où vous placez des éléments à des coordonnées X,Y spécifiques sur une page.IronPDFutilise le rendu HTML/CSS où vous concevez avec les technologies du web.

Ce changement de paradigme implique la conversion des éléments Label, TextAreaet Tableau2en leurs équivalents HTML - un changement qui se traduit généralement par un code plus lisible et plus facile à maintenir.

Processus de migration étape par étape

Étape 1 : Mise à jour des paquets NuGet

Supprimez tous les paquets DynamicPDFet installezIronPDF:

# Remove DynamicPDFpackages
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.Generator.NET
dotnet remove package ceTe.DynamicPDF.Merger.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET

# Install IronPDF
dotnet add package IronPdf
# Remove DynamicPDFpackages
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.Generator.NET
dotnet remove package ceTe.DynamicPDF.Merger.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

Étape 2 : Mise à jour des références aux espaces de noms

Remplacer les espaces de noms DynamicPDFparIronPDF:

// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;
// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Étape 3 : 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

Référence complète de migration des API

Mappage des classes de base

Classe DynamicPDF Équivalent d'IronPDF Notes
Document ChromePdfRenderer Pour générer de nouveaux PDF
Document Document PDF Pour la manipulation de PDF existants
Page HTML <div> avec saut de page Ou plusieurs rendus
Fusion de documents PdfDocument.Merge() Méthode de fusion statique
HtmlConverter ChromePdfRenderer Intégré, sans ajout

Mappage des éléments de page en HTML

DynamicPDFPageElement Équivalent IronPDF/HTML
Label <p>, <span>, <div>
Zone de texte <div>, <p> avec CSS
Image <img> balise
Tableau2 HTML <table>
PageNumberingLabel {page} / {total-pages} caractères génériques

Mappages API clés

DynamicPDF IronPDF Notes
Document+ Page ChromePdfRenderer Génération basée sur HTML
Label, TextArea HTML <p>, <div> Style avec CSS
Tableau2 HTML <table> Style CSS complet
Fusion de documents PdfDocument.Merge() Méthode statique
HtmlConverter ChromePdfRenderer Intégré, sans ajout
document.Draw() pdf.SaveAs() / pdf.BinaryData
PageNumberingLabel``%%CP%% {page} placeholder Syntaxe différente

Exemples de migration de code

Conversion HTML en PDF

La conversion de HTML en PDF démontre la nécessité pour DynamicPDFd'utiliser un module complémentaire HtmlConverterdistinct par rapport au rendu Chromium intégré d'IronPDF.

Mise en œuvre de DynamicPDF:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mise en œuvre d'IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Le ChromePdfRendererd'IronPDF fournit un rendu basé sur Chromium avec un support CSS3 complet - aucun achat de module complémentaire séparé n'est nécessaire. Pour plus d'options, consultez la documentation HTML vers PDF.

Fusionner plusieurs fichiers PDF

La fusion de PDF démontre la différence entre la classe Fusion de documentsde DynamicPDF(nécessitant la licence du produit Merger) et la méthode statique intégrée Merge d'IronPDF.

Mise en œuvre de DynamicPDF:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mise en œuvre d'IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

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;

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

La méthode statique Merge d'IronPDF accepte directement plusieurs objets PdfDocument. Pour plus d'options, consultez la documentation sur la fusion des PDF.

Ajouter du texte aux PDF

Le placement du texte démontre le changement de paradigme entre les éléments Labelde DynamicPDF, basés sur les coordonnées, et le TextStamper d'IronPDF, basé sur HTML.

Mise en œuvre de DynamicPDF:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mise en œuvre d'IronPDF:

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

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,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

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,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Le TextStamper d'IronPDF permet un positionnement basé sur l'alignement plutôt que sur les coordonnées, ce qui rend les mises en page plus adaptables à différentes tailles de pages. Pour plus d'options, consultez la documentation sur les filigranes et l'estampillage.

Exemple complet de génération de document

Cet exemple complet montre la conversion d'un document DynamicPDFcomportant plusieurs éléments vers l'approche HTML d'IronPDF.

Mise en œuvre de DynamicPDF:

using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mise en œuvre d'IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Notesde migration essentielles

Positionnement basé sur les coordonnées vers HTML/CSS

Le changement de paradigme fondamental nécessite de convertir le positionnement par coordonnées X,Y en mises en page basées sur CSS :

// DynamicPDF- coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

//IronPDF- CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

//IronPDF- preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";
// DynamicPDF- coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

//IronPDF- CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

//IronPDF- preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Syntaxe de numérotation des pages

DynamicPDF etIronPDFutilisent une syntaxe différente pour les numéros de page :

// DynamicPDFplaceholders
"Page %%CP%% of %%TP%%"

//IronPDFplaceholders
"Page {page} of {total-pages}"
// DynamicPDFplaceholders
"Page %%CP%% of %%TP%%"

//IronPDFplaceholders
"Page {page} of {total-pages}"
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

En-têtes et pieds de page

Convertir les éléments DynamicPDFTemplate en HtmlHeaderFooterIronPDF:

//IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
//IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

Paramètres de sécurité

//IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";
//IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Pour des options de sécurité complètes, voir la documentation sur le chiffrement.

Liste de contrôle post-migration

Après avoir effectué la migration du code, vérifiez les points suivants :

  • [Comparaison visuelle des PDF générés
  • [Vérifier le positionnement et la mise en page du texte
  • [Tester le rendu des tableaux et le débordement
  • [Vérifier les en-têtes/pieds de page sur toutes les pages
  • [Tester la fonctionnalité de remplissage de formulaires
  • [Vérifier la sécurité/le cryptage
  • [ ] Analyse comparative des performances
  • [Supprimer les fichiers de licence DynamicPDFinutilisés
  • [Mise à jour de la documentation

Protéger l'avenir de votre infrastructure PDF

Avec .NET 10 à l'horizon et C# 14 qui introduit de nouvelles fonctionnalités de langage, le choix d'une bibliothèque PDF qui adopte les modèles .NET modernes garantit une compatibilité à long terme. La prise en charge native d'IronPDF pour .NET 6/7/8/9+ permet d'aller de l'avant lorsque les projets se prolongent jusqu'en 2025 et 2026 - sans la complexité de la gestion de plusieurs licences de produits ou de la navigation dans des API fragmentées.

Ressources supplémentaires


La migration de DynamicPDFversIronPDFélimine la complexité de la gestion de plusieurs licences de produits tout en offrant un rendu moderne basé sur Chromium et une prise en charge complète de CSS3. Le passage d'un positionnement basé sur les coordonnées à une conception HTML/CSS se traduit généralement par un code plus facile à maintenir, qui exploite des technologies web familières.

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