Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de ZetPDF à IronPDF en C#

Migrer de ZetPDFàIronPDF: Un guide complet du développeur 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.

Support CSS limité : l'absence de système de style implique une gestion manuelle des polices et des couleurs pour chaque élément.

Pas de rendu JavaScript : Il n'est pas possible de rendre un contenu web dynamique ou d'exécuter JavaScript pendant la génération du PDF.

Offres uniques limitées : Comparé à l'utilisation directe et gratuite de PDFSharp, ZetPDFoffre peu de raisons convaincantes qui nécessitent l'octroi d'une licence commerciale.

Sauts de page manuels : Doit calculer et gérer les sauts de page manuellement plutôt que de s'appuyer sur la pagination automatique.

Mesure du texte requise : Le calcul manuel de l'habillage du texte entraîne 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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

IronPDFvs 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
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 ZetPDFpar l'espace de noms IronPdf :

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

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

ZetPDF utilise HtmlToPdfConverteravec ConvertHtmlToPdf()qui écrit directement dans un chemin de fichier.IronPDFfournit ChromePdfRendereravec RenderHtmlAsPdf()qui renvoie un objet PdfDocument, ce qui vous donne plus de 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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

ZetPDF utilise la même classe HtmlToPdfConverteravec 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 JavaScript et les CSS modernes.

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

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

ZetPDF utilise une classe PdfMergerdédiée qui opère sur les chemins de fichiers avec MergeFiles().IronPDFcharge les documents en tant qu'objets PdfDocument à l'aide de PdfDocument.FromFile(), puis les fusionne à l'aide de 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

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 Notes
new PdfDocument() new ChromePdfRenderer() Créer un moteur de rendu
document.AddPage() Automatique Pages créées à partir de HTML
XGraphics.FromPdfPage(page) N/A Utiliser HTML/CSSà la place
graphics.DrawString() Éléments de texte HTML <p>, <h1>, etc.
graphics.DrawImage() <img> balise Images HTML
graphics.DrawLine() Bordures CSS Ou <hr>
graphics.DrawRectangle() CSS border + div Boîtes HTML
new XFont() CSS font-family Polices Web prises en charge
XBrushes.Black CSS color Support couleur
document.Save() pdf.SaveAs() Enregistrer dans un fichier
PdfReader.Open() PdfDocument.FromFile() Charger le PDF existant
HtmlToPdfConverter ChromePdfRenderer Conversion HTML
ConvertHtmlToPdf() RenderHtmlAsPdf() Chaîne HTML vers PDF
ConvertUrlToPdf() RenderUrlAsPdf() URL vers PDF
PdfMerger PdfDocument.Merge() Combiner des PDF

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éer des objets XFont pour chaque variation de 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; 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>
HTML

Numéro 3 : Traitement des couleurs

ZetPDF: Utiliser les 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>
HTML

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" .
SHELL

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

  1. Supprimer le paquet NuGet ZetPDF
  2. Installer le paquet NuGet IronPdf
  3. Mise à jour des importations de l'espace de noms de ZetPDF vers IronPdf
  4. Remplacer HtmlToPdfConverterpar ChromePdfRenderer
  5. Convertir les appels ConvertHtmlToPdf()en RenderHtmlAsPdf()+ SaveAs()
  6. Convertir les appels ConvertUrlToPdf()en RenderUrlAsPdf()+ SaveAs()
  7. Remplacer PdfMerger.MergeFiles() par PdfDocument.Merge()
  8. Convertir les appels DrawString() en éléments de texte HTML
  9. Convertir XFont en CSS font-family
  10. Remplacer XBrushes par des couleurs CSS
  11. 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 moderne Chromium :IronPDFutilise Chromium pour la conversion de HTML en PDF, ce qui garantit 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é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.

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

A API simplifiée : appels à une seule méthode pour les opérations courantes. PdfDocument.Merge()remplace les modèles complexes de gestion des chemins d'accès aux fichiers.

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.

Fonctionnalités complètes : filigrane intégré, signatures numériques, conformité PDF/A et fonctionnalités avancées de manipulation des PDF qui font défaut à ZetPDF.

Conclusion

ZetPDF offre des capacités de manipulation PDF de base grâce à sa fondation PDFSharp. Cependant, son approche de programmation graphique basée sur les coordonnées, sa prise en charge limitée du HTML et son manque de fonctionnalités modernes créent une complexité inutile pour les tâches de génération de documents.

IronPDF transforme la génération de PDF d'un exercice de programmation graphique en un développement HTML/CSSfamilier. Le chemin de migration est simple : remplacer les packages NuGet, mettre à jour les classes de conversion et exploiter le HTML pour la création de contenu.

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 Chromium.

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