Comment migrer de DynamicPDF à IronPDF en C#
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 :
- Générateur de PDF dynamiques : Créez des PDF à partir de zéro
- DynamicPDF Merger : Fusionnez, divisez et manipulez des PDF existants (achat séparé)
- Suite DynamicPDFCore : Générateur et fusion combinés
- DynamicPDF ReportWriter : Génération de rapports
- DynamicPDF HTML Converter : Conversion HTML vers PDF (module complémentaire séparé)
- Gestionnaire d'impression DynamicPDF : Impression de PDF par programmation
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
- Un seul package : un package NuGet remplace 3 à 5 packages DynamicPDF
- Rendu moderne : moteur Chromium contre rendu traditionnel
- Technologies Web : Utilisez HTML/CSS au lieu du positionnement par coordonnées.
- API simplifiée : moins de code, plus lisible, maintenance facilitée
- Aucun achat supplémentaire : HTML, fusion et 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 Package Manager 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
Paquets courants à rechercher :
ceTe.DynamicPDF.CoreSuite.NETceTe.DynamicPDF.Generator.NETceTe.DynamicPDF.Merger.NETceTe.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 Shift de paradigme signifie convertir les éléments Label, TextArea et Table2 en 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
É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;
Imports IronPdf
É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";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Référence complète de migration des API
Mappage des classes de base
| Classe DynamicPDF | Équivalent d'IronPDF |
|---|---|
Document |
ChromePdfRenderer |
Document |
PdfDocument |
Page |
HTML <div> avec saut de page |
MergeDocument |
PdfDocument.Merge() |
HtmlConverter |
ChromePdfRenderer |
Mappage des éléments de page en HTML
| DynamicPDFPageElement | Équivalent IronPDF/HTML |
|---|---|
Label |
<p>, <span>, <div> |
TextArea |
<div>, <p> avec CSS |
Image |
<img> balise |
Table2 |
HTML <table> |
PageNumberingLabel |
{page} / {total-pages} espaces réservés |
Mappages API clés
| DynamicPDF | IronPDF |
|---|---|
Document + Page |
ChromePdfRenderer |
Label, TextArea |
HTML <p>, <div> |
Table2 |
HTML <table> |
MergeDocument |
PdfDocument.Merge() |
HtmlConverter |
ChromePdfRenderer |
document.Draw() |
pdf.SaveAs() / pdf.BinaryData |
PageNumberingLabel %%CP%% |
{page} espace réservé |
Exemples de migration de code
Conversion HTML en PDF
La conversion HTML vers PDF démontre l'exigence de DynamicPDFd'un module complémentaire séparé HtmlConverter 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");
}
}
Imports ceTe.DynamicPDF
Imports ceTe.DynamicPDF.Conversion
Class Program
Shared Sub Main()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim converter As New HtmlConverter(html)
converter.Convert("output.pdf")
End Sub
End Class
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");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF's ChromePdfRenderer fournit un rendu basé sur Chromium avec une prise en charge complète de CSS3 — aucun achat de module complémentaire séparé requis. 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 MergeDocument de 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");
}
}
Imports ceTe.DynamicPDF
Imports ceTe.DynamicPDF.Merger
Class Program
Shared Sub Main()
Dim document As New MergeDocument("document1.pdf")
document.Append("document2.pdf")
document.Draw("merged.pdf")
End Sub
End Class
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");
}
}
Imports IronPdf
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
La méthode statique Merge d'IronPDF accepte directement plusieurs objets PdfDocument. Pour plus d'options, consultez la documentation sur la fusion de fichiers PDF .
Ajouter du texte aux PDF
Le placement du texte démontre le Shift de paradigme des éléments Label basés sur les coordonnées de DynamicPDFaux éléments TextStamper basés sur HTML d'IronPDF.
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");
}
}
Imports ceTe.DynamicPDF
Imports ceTe.DynamicPDF.PageElements
Class Program
Shared Sub Main()
Dim document As New Document()
Dim page As New Page(PageSize.Letter)
Dim label As New Label("Hello from DynamicPDF!", 0, 0, 504, 100)
page.Elements.Add(label)
document.Pages.Add(page)
document.Draw("output.pdf")
End Sub
End Class
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");
}
}
Imports IronPdf
Imports IronPdf.Editing
Class Program
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>")
Dim textStamper As New TextStamper() With {
.Text = "Hello from IronPDF!",
.FontSize = 20,
.VerticalAlignment = VerticalAlignment.Top
}
pdf.ApplyStamp(textStamper)
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF's TextStamper fournit un positionnement basé sur l'alignement plutôt qu'un placement basé sur les coordonnées, ce qui rend les mises en page plus adaptables à différentes tailles de page. 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");
Imports ceTe.DynamicPDF
Imports ceTe.DynamicPDF.PageElements
Imports ceTe.DynamicPDF.Merger
' Generation (requires Generator license)
Dim document As New Document()
Dim page As New Page(PageSize.A4)
Dim title As New Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18)
title.Align = TextAlign.Center
page.Elements.Add(title)
Dim table As 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)
Dim mergeDoc As New MergeDocument("cover.pdf")
mergeDoc.Append("invoice.pdf")
mergeDoc.Draw("final.pdf")
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");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' All features in one library
Dim html As String = "
<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>"
Dim invoice As PdfDocument = renderer.RenderHtmlAsPdf(html)
' Merging included - no separate license
Dim cover As PdfDocument = PdfDocument.FromFile("cover.pdf")
Dim final As PdfDocument = PdfDocument.Merge(cover, invoice)
final.SaveAs("final.pdf")
Notes de 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>";
' DynamicPDF- coordinate-based
Dim label = New Label("Hello World", 100, 200, 300, 50)
' IronPDF- CSS positioning (if absolute positioning needed)
Dim html As String = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>"
' IronPDF- preferred approach (flow-based)
html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>"
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}"
' DynamicPDFplaceholders
"Page %%CP%% of %%TP%%"
' IronPDFplaceholders
"Page {page} of {total-pages}"
En-têtes et pieds de page
Convertir les éléments DynamicPDFTemplate enIronPDFHtmlHeaderFooter :
//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
};
'IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
.MaxHeight = 25
}
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";
'IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
pdf.SecuritySettings.UserPassword = "userPassword"
Pour connaître toutes les options de sécurité, consultez 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
- Testez le rendu et le débordement des tableaux
- Vérifiez les en-têtes et pieds de page sur toutes les pages
- Tester la fonctionnalité de remplissage de formulaires
- Vérifier la sécurité/le chiffrement
- Évaluation 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 for .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.

