IRONSOFTWAREHOME
VIDÉOS

Comment rendre une chaîne HTML en PDF en C#

Curtis Chau
Curtis Chau
Updated: 19 juillet 2026

La migration de PrinceXMLvers IronPDF transforme votre flux de travail de génération de PDF d'un processus de ligne de commande externe à une bibliothèque native .NET. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine la surcharge de gestion des processus, simplifie le déploiement et fournit des capacités de manipulation PDF étendues au-delà de la génération.

Pourquoi migrer de PrinceXMLà IronPDF

Comprendre PrinceXML

PrinceXML est un outil sophistiqué conçu pour exceller dans la conversion de contenu HTML en documents PDF parfaits pour l'impression grâce à son support dédié aux spécifications CSS Paged Media. Cette spécialisation permet à PrinceXMLde restituer les documents avec une grande fidélité aux modèles d'impression prévus - un attribut précieux pour les industries qui exigent un style d'impression détaillé, comme l'édition ou la documentation juridique.

Cependant, PrinceXMLn'est pas une bibliothèque .NET et fonctionne comme un outil de ligne de commande distinct, ce qui peut compliquer l'intégration pour les environnements qui préfèrent les solutions .NET pures. Le fait qu'elle repose sur un processus serveur distinct implique une gestion supplémentaire des ressources du système et une complexité potentiellement accrue pour les déploiements de projets.

Le problème du processus externe

PrinceXML fonctionne comme un exécutable de ligne de commande séparé, ce qui crée des défis architecturaux importants pour les applications .NET :

  1. Surcharge de gestion des processus : Il faut lancer, surveiller et terminer les processus externes.

  2. Aucune intégration .NET native : communication via stdin/stdout ou fichiers temporaires.

  3. Complexité du déploiement : Nécessite l'installation de Prince sur chaque serveur.

  4. Licence par serveur : Chaque déploiement nécessite une licence séparée.

  5. Difficulté de gestion des erreurs : Analyser le texte de sortie pour détecter les erreurs.

  6. Pas d'Async/Await : appels bloquants ou wrappers asynchrones complexes requis.

  7. Dépendances de chemin : l'exécutable Prince doit être localisé dans le PATH ou dans un chemin absolu.

Comparaison PrinceXMLvs IronPDF

AspectPrinceXMLIronPDF
ArchitectureProcessus externeBibliothèque native .NET
IntégrationLigne de commandeAPI directe
DéploiementInstaller sur chaque serveurPaquet NuGet unique
Gestion des erreursAnalyse du texteexceptions .NET
Support asynchroneManuels d'accompagnementAsync/await natif
Manipulation de PDFGénération uniquementManipulation complète (fusion, division, édition)
LicenceBureau 495 $ / Serveur 3 800 $ ; free non-commercial use with logo watermarkPar développeur
Mises à jourRéinstallation manuelleMise à jour de NuGet
DébogageDifficultésPrise en charge complète du débogueur
Signatures numériquesNonOui
FormulairesNonOui
Support DockerComplexeSimple
Fonctions cloudDifficultésFacile d'accès

IronPDF constitue une alternative grâce à ses capacités natives .NET, allant au-delà de la simple conversion HTML-PDF pour inclure des tâches de manipulation PDF avancées, telles que l'édition, la fusion et les signatures numériques. L'API d'IronPDF est conçue pour être simple et facile à utiliser, permettant aux développeurs d'effectuer des conversions et des manipulations avec un minimum de code passe-partout.

Pour les équipes adoptant .NET moderne, le déploiement transparent d'IronPDF ne nécessite pas de dépendances externes ni de processus serveur, et donc allège le fardeau de l'intégration dans le cadre .NET.


Avant de commencer

Prérequis

  1. Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Accès à NuGet : possibilité d'installer des packages NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur IronPDF

Modifications du paquet NuGet

# Install IronPDF
dotnet add package IronPdf

# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
SHELL

Configuration de la licence

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Recherche sur l'utilisation de PrinceXML

# Find Prince process calls
grep -r "prince" --include="*.cs" .
grep -r "Process.Start" --include="*.cs" . | grep -i prince
grep -r "@page" --include="*.css" .
grep -r "prince-" --include="*.css" .
SHELL

Référence API complète

Modifications de l'espace de nommage

// Before: PrinceXML
using PrinceXML.Wrapper;
using System.Diagnostics;
using System.IO;

// After: IronPDF
using IronPdf;

Mappage de la ligne de commande à la méthode

Commande PrinceÉquivalent d'IronPDF
prince input.html -o output.pdfrenderer.RenderHtmlFileAsPdf("input.html").SaveAs("output.pdf")
prince --style=custom.css input.htmlInclure CSS dans HTML ou utiliser RenderingOptions
prince --javascriptrenderer.RenderingOptions.EnableJavaScript = true
prince --no-javascriptrenderer.RenderingOptions.EnableJavaScript = false
prince --page-size=Letterrenderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
prince --page-margin=1inrenderer.RenderingOptions.MarginTop = 72 (72 points = 1 pouce)
prince --encryptpdf.SecuritySettings.OwnerPassword = "..."
prince --user-password=pwpdf.SecuritySettings.UserPassword = "pw"
prince --disallow-printpdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
prince --disallow-copypdf.SecuritySettings.AllowUserCopyPasteContent = false
prince --baseurl=http://...renderer.RenderingOptions.BaseUrl = new Uri("http://...")
prince --media=printrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
prince --media=screenrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen

CSS @page to RenderingOptions Mapping (Correspondance entre @page et options de rendu)

Propriété CSS @pageÉquivalent d'IronPDF
size: A4PaperSize = PdfPaperSize.A4
size: LetterPaperSize = PdfPaperSize.Letter
size: A4landscapePaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape
margin: 2cmMarginTop/Bottom/Left/Right = 56
margin-top: 1inMarginTop = 72
@top-center { content: "..." }HtmlHeader avec div centré
@bottom-right { content: counter(page) }HtmlFooter avec {page} espace réservé

Conversions de taille de page

TaillePointsMillimètres
Lettre612 x 792216 x 279
A4595 x 842210 x 297
Juridique612 x 1008216 x 356
1 pouce7225.4
1 cm28.3510

Exemples de migration de code

Exemple 1 : Conversion d'un fichier HTML en un fichier PDF

Avant (PrinceXML):

// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.Convert("input.html", "output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

Cet exemple illustre la différence architecturale fondamentale. PrinceXMLnécessite d'instancier un objet Prince avec le chemin complet vers l'exécutable ("C:\\Program Files\\Prince\\engine\\bin\\prince.exe"), puis d'appeler Convert() avec les chemins d'entrée et de sortie.

IronPDF élimine complètement les dépendances de chemin : créez un ChromePdfRenderer, appelez RenderHtmlFileAsPdf() avec le chemin du fichier HTML et SaveAs() pour écrire le résultat. Pas de chemins exécutables, pas de gestion de processus, pas de dépendances de chemins. Consultez la documentation HTML vers PDF pour des exemples complets.

Exemple 2 : Conversion d'URL en PDF avec options

Avant (PrinceXML):

// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.JavaScript = true;
        prince.Encrypt = true;
        prince.PdfTitle = "Website Export";
        prince.Convert("https://example.com", "webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.Title = "Website Export";

        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SecuritySettings.OwnerPassword = "owner-password";
        pdf.SecuritySettings.UserPassword = "user-password";
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}

Cet exemple montre comment les options PrinceXMLcorrespondent aux propriétés IronPDF. PrinceXMLexpose la configuration sous forme de propriétés sur l'objet Prince (JavaScript, Encrypt, PdfTitle) avant la conversion.IronPDF utilise les propriétés RenderingOptions pour les paramètres de pré-rendu et applique le cryptage post-rendu via SecuritySettings sur le PdfDocument.

Correspondances clés :

  • prince.JavaScript = truerenderer.RenderingOptions.EnableJavaScript = true
  • prince.PdfTitle = "..."renderer.RenderingOptions.Title = "..."
  • prince.Encrypt = truepdf.SecuritySettings.OwnerPassword = "..." / pdf.SecuritySettings.UserPassword = "..."

Pour en savoir plus, consultez nos tutoriels.

Exemple 3 : Conversion d'une chaîne HTML en PDF

Avant (PrinceXML):

// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;

class Program
{
    static void Main()
    {
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";

        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        // ConvertString accepts a raw HTML/XML string directly
        prince.ConvertString(html, "styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}

Les deux bibliothèques acceptent directement une chaîne HTML : PrinceXMLvia ConvertString() et IronPDF via RenderHtmlAsPdf(). La différence architecturale reste — le ConvertString de PrinceXMLtransmet toujours l'entrée au binaire externe prince en arrière-plan, tandis qu'IronPDF effectue le rendu en interne sans exécutable externe.


Migration des médias paginés CSS

Bien que le support CSS Paged Mediade PrinceXMLsoit puissant, il crée une dépendance vis-à-vis des fournisseurs avec des CSS spécifiques à Prince qui ne fonctionneront pas ailleurs :

PrinceXML CSS :

@page {
    size: A4;
    margin: 2cm;
    @top-center {
        content: "Document Title";
    }
    @bottom-right {
        content: counter(page);
    }
}

/* Prince-specific extensions */
prince-pdf-page-label: "Chapter " counter(chapter);
prince-pdf-destination: attr(id);
Text

IronPDF C# (équivalent):

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 56;    // ~2cm
renderer.RenderingOptions.MarginBottom = 56;
renderer.RenderingOptions.MarginLeft = 56;
renderer.RenderingOptions.MarginRight = 56;

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
    MaxHeight = 40
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};

Problèmes courants de migration CSS

Enjeu 1 : La @page CSS ne fonctionne pas

IronPDF utilise Chromium, dont la prise en charge des @pages est limitée. Convertir les règles CSS en options de rendu.

Problème 2 : Marges de page manquantes

Les marges CSS (@top-center, @bottom-right) sont spécifiques à Prince. Utilisez HtmlFooter à la place.

Sujet 3 : string-set/content ne fonctionne pas

La propriété CSS string-set est spécifique à Prince. Utiliser le placeur {html-title} de l'étiquette <title> :

<title>Chapter 1: Introduction</title>
HTML
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>{html-title}</div>"
};

Edition 4 : compteur(s) incorrect(s)

Utilisez le placeur {total-pages} d'IronPDF au lieu des compteurs CSS.


Comparaison des Performances

OpérationPrinceXMLIronPDF
HTML simple~400ms~300ms
CSS complexe~600ms~400ms
Pages JavaScriptLimité~500ms
Documents volumineux~1500ms~1000ms
Concurrent (10)~4000ms~1500ms
Frais généraux de démarrage~200ms~50ms

Nouvelles capacités après la migration

Après avoir migré vers IronPDF, vous bénéficiez de capacités que PrinceXMLne peut pas vous offrir :

Fusion de fichiers PDF

var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");

Marques de fond

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");

Signatures numériques

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);

Remplissage de formulaires

var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("Name").Value = "John Doe";
pdf.SaveAs("filled_form.pdf");

Résumé de la comparaison des fonctionnalités

FonctionPrinceXMLIronPDF
Natif .NETNonOui
Processus externeLes exigences sont les suivantesNon
Prise en charge de l'asynchronismeEmballage du manuelAsync/await natif
CSS Paged MediaPrise en chargeVia RenderingOptions
Grille CSSOuiOui
FlexboxOuiOui
JavaScriptLimitéES2024 complet
GénérationOuiOui
FusionnerNonOui
RépartitionNonOui
ÉditionNonOui
FiligranesCSS uniquementHTML/CSS + API
Signatures numériquesNonOui
PDF/AOuiOui
ChiffrementOuiOui
FormulairesNonOui
Paquet NuGetNonOui
Installation du serveurLes exigences sont les suivantesNon

Liste de contrôle de la migration

Pré-migration

  • Identifier toutes les invocations de la ligne de commande Prince
  • Règles CSS @page du document utilisées
  • Lister les propriétés CSS spécifiques à Prince (prince-*, string-set)
  • Notez les fonctions JavaScriptde Prince
  • Identifier les fonctionnalités PDF utilisées (cryptage, métadonnées)
  • Obtenez votre clé de licence IronPDF sur IronPDF

Modifications du code

  • Retirer le package NuGet PrinceXMLWrapper
  • Installer le package NuGet IronPdf
  • Mettre à jour les importations d'espace de noms
  • Remplacer l'instanciation Prince par ChromePdfRenderer
  • Remplacer prince.Convert() par RenderHtmlFileAsPdf() ou RenderHtmlAsPdf()
  • Convertir les méthodes setter en propriétés RenderingOptions
  • Migrer CSS @page vers RenderingOptions
  • Remplacer les boîtes de marge par HtmlFooter
  • Convertir les compteurs CSS en espaces réservés {total-pages}
  • Supprimer la gestion des fichiers temporaires pour les chaînes HTML
  • Ajouter l'initialisation de la licence au démarrage de l'application

Après la migration

  • Test de conversion de fichier HTML
  • Test de conversion de chaîne HTML
  • Test de conversion d'URL
  • Vérifiez que les formats de page correspondent
  • Vérifier que les marges correspondent
  • Testez les en-têtes et les pieds de page
  • Vérifier les numéros de page
  • Tester le chiffrement/la sécurité
  • Supprimer l'installation de Prince des serveurs
  • Mettre à jour les scripts de déploiement

Veuillez noter: PrinceXML est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié à, approuvé par, ou parrainé par YesLogic Pty. Ltd.. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.
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 et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise