Comment migrer de ZetPDF à IronPDF en C#
ZetPDF est une bibliothèque PDF sous licence commerciale pour les applications C#, construite sur la base de la bibliothèque open-source PDFSharp largement utilisée. Bien que ZetPDFfournisse un support commercial et des capacités de manipulation PDF de base, il hérite de limitations significatives de sa fondation PDFSharp. La bibliothèque s'appuie notamment sur une programmation graphique basée sur les coordonnées et offre des capacités de conversion HTML-PDF limitées par rapport aux alternatives modernes.
Ce guide fournit un chemin de migration complet de ZetPDFvers 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 ZetPDF
ZetPDF, en tant que fork de PDFSharp, hérite des mêmes contraintes architecturales qui limitent son efficacité pour les flux de travail de génération de documents modernes. Les principales raisons pour lesquelles les équipes de développement envisagent la migration sont les suivantes
API basée sur les coordonnées : ZetPDFoblige les développeurs à positionner chaque élément avec des coordonnées exactes. Le positionnement manuel complexe de chaque élément pose des problèmes de maintenance au fur et à mesure que les besoins évoluent.
Prise en charge CSS limitée : L'absence de système de style implique une gestion manuelle des polices et des couleurs pour chaque élément.
Rendu JavaScript impossible : Impossible de rendre le contenu Web dynamique ou d'exécuter du JavaScript lors de la génération du PDF.
Offres uniques limitées : comparé à l'utilisation directe et gratuite de PDFSharp, ZetPDFoffre peu de raisons convaincantes justifiant sa licence commerciale.
Sauts de page manuels : il est nécessaire de calculer et de gérer manuellement le débordement de page plutôt que de se fier à la pagination automatique.
Mesure du texte requise : le calcul manuel du retour à la ligne engendre des frais de développement supplémentaires.
Le problème fondamental
ZetPDF et PDFSharp vous obligent à positionner chaque élément avec des coordonnées exactes :
// ZetPDF: Manuel positioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple form
// ZetPDF: Manuel positioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple form
' ZetPDF: Manuel positioning nightmare
graphics.DrawString("Name:", font, brush, New XPoint(50, 100))
graphics.DrawString("John Doe", font, brush, New XPoint(100, 100))
graphics.DrawString("Address:", font, brush, New XPoint(50, 120))
graphics.DrawString("123 Main St", font, brush, New XPoint(100, 120))
' ... hundreds of lines for a simple form
IronPDF utilise HTML/CSS- le moteur de mise en page s'occupe de tout :
// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
' IronPDF: Simple HTML
Dim html As String = "
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
IronPDF vs ZetPDF: Comparaison des fonctionnalités
La compréhension des différences architecturales aide les décideurs techniques à évaluer l'investissement dans la migration :
| Fonction | ZetPDF | IronPDF |
|---|---|---|
| Basé sur PDFSharp | Oui | Non |
| Conversion HTML vers PDF | Limité | Oui (Chromium complet) |
| Licence commerciale | Oui, Perpetual | Oui |
| Open Source Foundation | PDFSharp (Licence MIT) | Basé sur Chromium |
| Support CSS | Non | CSS3 complet |
| JavaScript | Non | ES2024 complet |
| Mise en page automatique | Non | Oui |
| Sauts de page automatiques | Non | Oui |
| Tables | Dessin manuel | HTML <table> |
| En-têtes/Pieds de page | Manuel | HTML/CSS |
| Marqueurs d'eau | Code manuel | Intégré |
| Fusionner des PDF | Limité | Oui |
| Diviser les PDF | Limité | Oui |
| Signatures numériques | Non | Oui |
| PDF/A | Non | Oui |
| Simplicité et facilité d'utilisation | Modéré | Haut |
Démarrage rapide : Migration de ZetPDFvers IronPDF
La migration peut commencer immédiatement grâce à ces étapes fondamentales.
Étape 1 : Remplacer le package NuGet
Supprimer ZetPDF:
# Remove ZetPDF
dotnet remove package ZetPDF
# Remove ZetPDF
dotnet remove package ZetPDF
InstallezIronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Étape 2 : Mise à jour des espaces de noms
Remplacer les espaces de noms ZetPDFpar l'espace de nomsIronPDF:
// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;
// After (IronPDF)
using IronPdf;
// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;
// After (IronPDF)
using IronPdf;
Imports IronPdf
É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"
Exemples de migration de code
Conversion de HTML en PDF
L'opération HTML-to-PDF démontre les différences d'API entre ces bibliothèques PDF .NET.
L'approche de ZetPDF:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports ZetPDF
Imports System
Module Program
Sub Main()
Dim converter As New HtmlToPdfConverter()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
converter.ConvertHtmlToPdf(htmlContent, "output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Module
Approche IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlContent = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
ZetPDF utilise HtmlToPdfConverter avec ConvertHtmlToPdf() qui écrit directement dans un chemin de fichier.IronPDFfournit ChromePdfRenderer avec RenderHtmlAsPdf() qui renvoie un objet PdfDocument, vous offrant une plus grande flexibilité avec la sortie : vous pouvez enregistrer dans un fichier, obtenir des données binaires ou effectuer des opérations supplémentaires avant l'enregistrement.
Pour les scénarios avancés de conversion de HTML en PDF, voir le guide de conversion de HTML en PDF.
Conversion des URL en PDF
La conversion d'URL en PDF montre clairement les différences de modèles.
L'approche de ZetPDF:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
Imports ZetPDF
Imports System
Module Program
Sub Main()
Dim converter As New HtmlToPdfConverter()
Dim url As String = "https://www.example.com"
converter.ConvertUrlToPdf(url, "webpage.pdf")
Console.WriteLine("PDF from URL created successfully")
End Sub
End Module
Approche IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim url = "https://www.example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
pdf.SaveAs("webpage.pdf")
Console.WriteLine("PDF from URL created successfully")
End Sub
End Class
ZetPDF utilise la même classe HtmlToPdfConverter avec ConvertUrlToPdf().IronPDFfournit RenderUrlAsPdf() sur ChromePdfRenderer, qui exploite un moteur de rendu Chromium complet pour une capture précise des pages Web, y compris l'exécution de JavaScript et de CSS moderne.
Explorez la URL vers la documentation PDF pour l'authentification et les options d'en-tête personnalisées.
Fusionner plusieurs fichiers PDF
La fusion de PDF révèle des différences API significatives dans la manière dont les documents sont traités.
L'approche de ZetPDF:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
Imports ZetPDF
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
Dim merger As New PdfMerger()
Dim files As New List(Of String) From {"document1.pdf", "document2.pdf"}
merger.MergeFiles(files, "merged.pdf")
Console.WriteLine("PDFs merged successfully")
End Sub
End Module
Approche IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
Dim pdfs As New List(Of PdfDocument) From {
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
}
Dim merged = PdfDocument.Merge(pdfs)
merged.SaveAs("merged.pdf")
Console.WriteLine("PDFs merged successfully")
End Sub
End Module
ZetPDF utilise une classe dédiée PdfMerger qui fonctionne sur les chemins de fichiers avec MergeFiles().IronPDFcharge les documents en tant qu'objets PdfDocument en utilisant PdfDocument.FromFile(), puis les fusionne avec la méthode statique PdfDocument.Merge(). Cette approche orientée objet permet d'effectuer des opérations supplémentaires sur le document fusionné avant de l'enregistrer.
Explorez la documentation sur la fusion de fichiers PDF pour obtenir des options de fusion supplémentaires.
Dessin basé sur les coordonnées vs HTML
Pour les développeurs disposant d'un code ZetPDFexistant utilisant des graphiques basés sur les coordonnées, le chemin de migration consiste à convertir les commandes de dessin en HTML/CSS.
Approche basée sur les coordonnées ZetPDF:
using ZetPdf;
using ZetPdf.Drawing;
var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);
var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);
graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
new XPoint(50, 100));
document.Save("report.pdf");
using ZetPdf;
using ZetPdf.Drawing;
var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);
var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);
graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
new XPoint(50, 100));
document.Save("report.pdf");
Imports ZetPdf
Imports ZetPdf.Drawing
Dim document As New PdfDocument()
Dim page = document.AddPage()
page.Width = XUnit.FromMillimeter(210)
page.Height = XUnit.FromMillimeter(297)
Dim graphics = XGraphics.FromPdfPage(page)
Dim titleFont As New XFont("Arial", 24, XFontStyle.Bold)
Dim bodyFont As New XFont("Arial", 12)
graphics.DrawString("Company Report", titleFont, XBrushes.Navy, New XPoint(50, 50))
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black, New XPoint(50, 80))
graphics.DrawString("Generated: " & DateTime.Now.ToString(), bodyFont, XBrushes.Gray, New XPoint(50, 100))
document.Save("report.pdf")
ApprocheIronPDFHTML:
using IronPdf;
var html = $@"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 50px; }}
h1 {{ color: navy; }}
.date {{ color: gray; }}
</style>
</head>
<body>
<h1>Company Report</h1>
<p>This is the introduction paragraph.</p>
<p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
using IronPdf;
var html = $@"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 50px; }}
h1 {{ color: navy; }}
.date {{ color: gray; }}
</style>
</head>
<body>
<h1>Company Report</h1>
<p>This is the introduction paragraph.</p>
<p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
Imports IronPdf
Dim html As String = $"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 50px; }}
h1 {{ color: navy; }}
.date {{ color: gray; }}
</style>
</head>
<body>
<h1>Company Report</h1>
<p>This is the introduction paragraph.</p>
<p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("report.pdf")
L'approche ZetPDFnécessite la création d'objets de police, le calcul des positions exactes des pixels et la gestion manuelle du contexte graphique. L'approche d'IronPDF utilise le HTML et le CSS standard que les développeurs web connaissent déjà - les polices, les couleurs et la mise en page sont gérées par des propriétés CSS familières.
Référence de mappage de l'API ZetPDFvers IronPDF
Cette cartographie accélère la migration en indiquant les équivalents directs des API :
| ZetPDF | IronPDF |
|---|---|
new PdfDocument() |
new ChromePdfRenderer() |
document.AddPage() |
Automatique |
XGraphics.FromPdfPage(page) |
N/A |
graphics.DrawString() |
Éléments de texte HTML |
graphics.DrawImage() |
<img> balise |
graphics.DrawLine() |
Bordures CSS |
graphics.DrawRectangle() |
CSS border + div |
new XFont() |
CSS font-family |
XBrushes.Black |
CSS color |
document.Save() |
pdf.SaveAs() |
PdfReader.Open() |
PdfDocument.FromFile() |
HtmlToPdfConverter |
ChromePdfRenderer |
ConvertHtmlToPdf() |
RenderHtmlAsPdf() |
ConvertUrlToPdf() |
RenderUrlAsPdf() |
PdfMerger |
PdfDocument.Merge() |
Problèmes de migration courants et solutions
Édition 1 : Mise en page basée sur les coordonnées
ZetPDF: Tout nécessite des coordonnées X,Y exactes avec un 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
ZetPDF : Créez des objets XFont pour chaque variante de police.
Solution: Utilisez CSS font-family - les polices sont gérées automatiquement :
<style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>
<style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>
Numéro 3 : Traitement des couleurs
ZetPDF : Utilisez XBrushes et les objets de couleur.
Solution: Utilisez les couleurs CSS standard :
.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }
Edition 4 : Sauts de page manuels
ZetPDF: Suivi de la position Y et création manuelle de nouvelles pages en cas de débordement du contenu.
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 : Création de tableaux
ZetPDF: Il faut dessiner manuellement des rectangles, des lignes et positionner du texte.
Solution: Utilisez des tableaux HTML standard avec un style CSS :
<table style="border-collapse: collapse; width: 100%;">
<tr>
<th style="border: 1px solid black; padding: 8px;">Header</th>
</tr>
<tr>
<td style="border: 1px solid black; padding: 8px;">Data</td>
</tr>
</table>
<table style="border-collapse: collapse; width: 100%;">
<tr>
<th style="border: 1px solid black; padding: 8px;">Header</th>
</tr>
<tr>
<td style="border: 1px solid black; padding: 8px;">Data</td>
</tr>
</table>
Liste de contrôle pour la migration vers ZetPDF
Tâches préalables à la migration
Auditez votre base de code pour identifier toute utilisation de ZetPDF:
grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .
grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .
Documenter le code de dessin basé sur les coordonnées qui doit être converti en HTML. Notez les modèles d'utilisation des polices et des couleurs. Mettez en correspondance les structures de mise en page avec les équivalents HTML.
Tâches de mise à jour du code
- Supprimer le paquet NuGet ZetPDF
- Installer le paquet NuGet IronPDF
- Mettez à jour les importations d'espace de noms de
ZetPDFàIronPdf - Remplacez
HtmlToPdfConverterparChromePdfRenderer - Convertir les appels
ConvertHtmlToPdf()enRenderHtmlAsPdf()+SaveAs() - Convertir les appels
ConvertUrlToPdf()enRenderUrlAsPdf()+SaveAs() - Remplacez
PdfMerger.MergeFiles()parPdfDocument.Merge() - Convertir les appels
DrawString()en éléments de texte HTML - Convertir
XFonten CSSfont-family - Remplacez
XBrushespar des couleurs CSS - 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 ou s'améliore
- Vérifier que les polices s'affichent comme prévu avec le style CSS
- Test des sauts de page avec la pagination automatique
- Vérifier que les images sont positionnées et affichées correctement
- Tester les opérations de fusion de PDF pour obtenir des résultats corrects
- Confirmer que toutes les fonctionnalités existantes fonctionnent avec la nouvelle implémentation
Avantages clés de la migration vers IronPDF
Le passage de ZetPDFàIronPDFprésente plusieurs avantages décisifs :
Moteur de rendu Chromium moderne :IronPDFutilise Chromium pour la conversion HTML vers PDF, assurant une prise en charge complète de CSS3 et de JavaScript ES2024. Les cadres modernes et les conceptions réactives ont un rendu correct.
Création de contenu basé sur HTML : les développeurs web peuvent tirer parti de leurs compétences existantes 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.
Mise en page et pagination automatiques : le retour à la ligne, les sauts de page et la mise en page fluide sont automatiques. Pas de calcul manuel de la position des éléments.
API simplifiée : appels de méthode unique pour les opérations courantes. PdfDocument.Merge() remplace les modèles complexes de gestion des chemins de fichiers.
Développement actif : Avec l'adoption croissante de .NET 10 et C# 14 jusqu'en 2026, les mises à jour régulières d'IronPDF garantissent la compatibilité avec les versions actuelles et futures de .NET .
Ensemble complet de fonctionnalités : filigrane intégré, signatures numériques, conformité PDF/A et fonctionnalités avancées de manipulation de PDF dont ZetPDFest dépourvu.

