Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer d'un générateur de PDF NReco vers IronPDF en C#

Migrer de NReco PDF GeneratoràIronPDF: Guide de migration complet en C

La migration de NReco PDF GeneratorversIronPDFélimine les vulnérabilités de sécurité critiques héritées de wkhtmltopdf tout en mettant à niveau votre flux de travail PDF .NET d'un moteur Qt WebKit obsolète (circa 2012) à un moteur de rendu moderne basé sur Chromium avec une prise en charge complète de CSS3 et JavaScript. Ce guide fournit un chemin de migration complet, étape par étape, qui répond à la fois aux problèmes de sécurité et aux limites de rendu de NReco PDF Generator.

Pourquoi passer de NReco PDF Generatorà IronPDF

Questions de sécurité critiques avec NReco PDF Generator

NReco PDF Generator intègre le binaire déprécié wkhtmltopdf, héritant ainsi de toutes ses vulnérabilités en matière de sécurité. Il ne s'agit pas d'un problème théorique : il existe plus de 20 CVE documentés sans aucun correctif disponible depuis l'abandon de wkhtmltopdf en 2020 :

  • CVE-2020-21365 : Falsification de requête côté serveur (SSRF)
  • CVE-2022-35583: Lecture d'un fichier local via une injection HTML
  • CVE-2022-35580: Possibilité d'exécution de code à distance

Ces vulnérabilités ne peuvent pas être corrigées car le projet wkhtmltopdf sous-jacent n'est plus maintenu.

Limitations supplémentaires de NReco PDF Generator

  1. Version libre en filigrane : L'utilisation en production nécessite une licence payante avec une tarification opaque qui nécessite de contacter le service commercial.

  2. Moteur de rendu obsolète : WebKit Qt (circa 2012) offre un support web moderne limité :

    • Pas de grille CSS ni de Flexbox
    • Pas de JavaScriptmoderne (ES6+)
    • Mauvaise prise en charge des polices de caractères sur le web
    • Pas de variables CSS ni de propriétés personnalisées
  3. Dépendance binaire externe : Nécessite la gestion des binaires wkhtmltopdf par plateforme (wkhtmltopdf.exe, wkhtmltox.dll).

  4. Pas de développement actif : l'enveloppe est maintenue sans mise à jour du moteur sous-jacent.

  5. Support asynchrone limité : l'API synchrone bloque les threads dans les applications web.

NReco PDF GeneratorvsIronPDFComparaison

Aspect NReco PDF Generator IronPDF
Moteur de rendu WebKit Qt (2012) Chromium (actuel)
Sécurité plus de 20 CVE, pas de correctifs Mises à jour de sécurité actives
Support CSS CSS2.1, CSS3 limité CSS3 complet, grille, Flexbox
JavaScript ES5 de base ES6+ complet, async/await
Dépendances Binaire externe wkhtmltopdf Autonome
Prise en charge de l'asynchronisme Synchrone uniquement Async/await complet
Polices de caractères Web Limité Polices Google complètes, @font-face
Licence d'utilisation Prix opaques, contacter les ventes Tarification transparente
Essai gratuit En filigrane Fonctionnalité complète

Pour les équipes qui prévoient l'adoption de .NET 10 et C# 14 jusqu'en 2025 et 2026,IronPDFconstitue une base à l'épreuve du temps avec un développement actif et des capacités de rendu modernes.


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 : Capacité à installer des paquets NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur ironpdf.com

Modifications du paquet NuGet

# Remove NReco.PdfGenerator
dotnet remove package NReco.PdfGenerator

# Install IronPDF
dotnet add package IronPdf
# Remove NReco.PdfGenerator
dotnet remove package NReco.PdfGenerator

# Install IronPDF
dotnet add package IronPdf
SHELL

<Supprimez également les binaires wkhtmltopdf de votre déploiement :

  • Supprimer wkhtmltopdf.exe, wkhtmltox.dll du projet
  • Supprimer tous les scripts d'installation de wkhtmltopdf
  • Supprimer les dossiers binaires spécifiques à une plateforme

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

Identifier l'utilisation du générateur de PDF NReco

# Find all NReco.PdfGenerator references
grep -r "NReco.PdfGenerator\|HtmlToPdfConverter\|GeneratePdf" --include="*.cs" .
# Find all NReco.PdfGenerator references
grep -r "NReco.PdfGenerator\|HtmlToPdfConverter\|GeneratePdf" --include="*.cs" .
SHELL

Référence API complète

Mappages de classes de base

NReco PDF Generator IronPDF Notes
HtmlToPdfConverter ChromePdfRenderer Rendu principal
PageMargins Propriétés des marges individuelles MarginTop, MarginBottom, etc.
PageOrientation PdfPaperOrientation Enum
Taille de la page PdfPaperSize Enum

Mappages de méthodes de rendu

NReco PDF Generator IronPDF Notes
GénérerPdf(html) RenderHtmlAsPdf(html) Retourne le document Pdf
GeneratePdfFromFile(url, output) RenderUrlAsPdf(url) Prise en charge des URL directes
GeneratePdfFromFile(htmlPath, output) RenderHtmlFileAsPdf(path) Chemin d'accès au fichier
(async non pris en charge) RenderHtmlAsPdfAsync(html) Version asynchrone
(async non pris en charge) RenderUrlAsPdfAsync(url) Version asynchrone

Mappages de configuration de page

NReco PDF Generator IronPDF Notes
PageWidth = 210 RenderingOptions.PaperSize = PdfPaperSize.A4 Utiliser enum ou SetCustomPaperSize
Hauteur de page = 297 RenderingOptions.SetCustomPaperSizeinMilimeters(w, h) Taille personnalisée
Orientation = PageOrientation.Landscape RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape Paysage
Taille = PageSize.A4 RenderingOptions.PaperSize = PdfPaperSize.A4 Énumération de la taille du papier

Mise en correspondance des marges

NReco PDF Generator IronPDF Notes
Margins.Top = 10 RenderingOptions.MarginTop = 10 En millimètres
Margins.Bottom = 10 RenderingOptions.MarginBottom = 10 En millimètres
Margins.Left = 10 RenderingOptions.MarginLeft = 10 En millimètres
Margins.Right = 10 RenderingOptions.MarginRight = 10 En millimètres
new PageMargins { ... } Propriétés individuelles Pas d'objet de marge

Mappages des espaces réservés de l'en-tête et du pied de page

NReco PDF Generator(wkhtmltopdf) IronPDF Notes
[page] {page} Numéro de page actuel
[topage] {total-pages} Nombre total de pages
[date] {date} Date actuelle
[time] {heure} Heure actuelle
[titre] {html-title} Titre du document

Mappages de gestion des sorties

NReco PDF Generator IronPDF Notes
byte[] pdfBytes = GeneratePdf(html) PdfDocument pdf = RenderHtmlAsPdf(html) Objet retourné
File.WriteAllBytes(path, bytes) pdf.SaveAs(path) Sauvegarde directe
return pdfBytes return pdf.BinaryData Obtenir un tableau d'octets
new MemoryStream(pdfBytes) pdf.Stream Obtenir un flux

Exemples de migration de code

Exemple 1 : HTML de base vers PDF

Avant (NReco PDF Generator):

// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

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

La différence fondamentale réside dans le type de retour et le modèle de sauvegarde. Le HtmlToPdfConverter.GeneratePdf() de NReco PDF Generatorrenvoie un byte[] que vous devez écrire manuellement sur le disque à l'aide de File.WriteAllBytes(). Le ChromePdfRenderer.RenderHtmlAsPdf() d'IronPDF renvoie un objet PdfDocument avec une méthode SaveAs() intégrée.

Cette approche orientée objet offre des avantages supplémentaires : vous pouvez manipuler le PDF (ajouter des filigranes, fusionner des documents, ajouter de la sécurité) avant de l'enregistrer. Si vous avez besoin des octets bruts pour des raisons de compatibilité avec le code existant, utilisez pdf.BinaryData. Voir la documentation HTML vers PDF pour des options de rendu supplémentaires.

Exemple 2 : Taille de page personnalisée avec marges

Avant (NReco PDF Generator):

// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        htmlToPdf.PageWidth = 210;
        htmlToPdf.PageHeight = 297;
        htmlToPdf.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("custom-size.pdf", pdfBytes);
    }
}
// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        htmlToPdf.PageWidth = 210;
        htmlToPdf.PageHeight = 297;
        htmlToPdf.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
        File.WriteAllBytes("custom-size.pdf", pdfBytes);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("custom-size.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("custom-size.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

NReco PDF Generator utilise des dimensions numériques (PageWidth = 210, PageHeight = 297) et un objet PageMargins.IronPDFutilise l'enum PdfPaperSize(qui comprend des tailles standard comme A4, Letter, Legal) et des propriétés de marge individuelles sur l'objet RenderingOptions.

Les principaux changements liés à la migration :

  • PageWidth/PageHeightRenderingOptions.PaperSize = PdfPaperSize.A4
  • new PageMargins { Top = 10, ... }→ Propriétés individuelles : RenderingOptions.MarginTop = 10

Pour les tailles de papier personnalisées non couvertes par l'énumération, utilisez RenderingOptions.SetCustomPaperSizeinMilimeters(width, height). En savoir plus sur les options de configuration des pages.

Exemple 3 : Conversion d'une URL en PDF

Avant (NReco PDF Generator):

// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var pdfBytes = htmlToPdf.GeneratePdfFromFile("https://www.example.com", null);
        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;

class Program
{
    static void Main()
    {
        var htmlToPdf = new HtmlToPdfConverter();
        var pdfBytes = htmlToPdf.GeneratePdfFromFile("https://www.example.com", null);
        File.WriteAllBytes("webpage.pdf", pdfBytes);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

NReco PDF Generator utilise la méthode GeneratePdfFromFile() au nom déroutant, à la fois pour les fichiers locaux et les URL, avec un second paramètre nullable.IronPDFpropose des méthodes dédiées : RenderUrlAsPdf() pour les URL et RenderHtmlFileAsPdf() pour les fichiers HTML locaux.

L'approche d'IronPDF est plus propre et plus intuitive. Pour les applications web asynchrones, utilisez await renderer.RenderUrlAsPdfAsync(url) pour éviter de bloquer les threads - ce que NReco PDF Generatorne peut tout simplement pas faire.


Notesde migration essentielles

Conversion de la valeur du zoom

NReco PDF Generator utilise des valeurs flottantes (0,0-2,0), tandis qu'IronPDF utilise des nombres entiers en pourcentage :

// NReco PDF Generator: Zoom = 0.9f (90%)
// IronPDF: Zoom = 90

// Conversion formula:
int ironPdfZoom = (int)(nrecoZoom * 100);
// NReco PDF Generator: Zoom = 0.9f (90%)
// IronPDF: Zoom = 90

// Conversion formula:
int ironPdfZoom = (int)(nrecoZoom * 100);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mise à jour de la syntaxe des espaces réservés

Tous les marqueurs d'en-tête et de pied de page doivent être mis à jour :

NReco PDF Generator IronPDF
[page] {page}
[topage] {total-pages}
[date] {date}
[titre] {html-title}
// NReco PDF Generator:
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF:
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
// NReco PDF Generator:
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF:
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Changement de type de retour

NReco PDF Generator renvoie directement les byte[] ;IronPDFrenvoie PdfDocument :

// NReco PDF Generatorpattern:
byte[] pdfBytes = converter.GeneratePdf(html);
File.WriteAllBytes("output.pdf", pdfBytes);

//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
// NReco PDF Generatorpattern:
byte[] pdfBytes = converter.GeneratePdf(html);
File.WriteAllBytes("output.pdf", pdfBytes);

//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Sécurité des threads et réutilisabilité

NReco PDF Generator crée généralement un nouveau convertisseur par appel. Le ChromePdfRendererd'IronPDF est à l'abri des threads et peut être réutilisé :

// NReco PDF Generatorpattern (creates new each time):
public byte[] Generate(string html)
{
    var converter = new HtmlToPdfConverter();
    return converter.GeneratePdf(html);
}

//IronPDFpattern (reuse renderer, thread-safe):
private readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

public byte[] Generate(string html)
{
    return _renderer.RenderHtmlAsPdf(html).BinaryData;
}
// NReco PDF Generatorpattern (creates new each time):
public byte[] Generate(string html)
{
    var converter = new HtmlToPdfConverter();
    return converter.GeneratePdf(html);
}

//IronPDFpattern (reuse renderer, thread-safe):
private readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

public byte[] Generate(string html)
{
    return _renderer.RenderHtmlAsPdf(html).BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Support asynchrone (nouvelle capacité)

IronPDF prend en charge les modèles async/await que NReco PDF Generatorne peut pas fournir :

// NReco PDF Generator: No async support available

// IronPDF: Full async support
public async Task<byte[]> GenerateAsync(string html)
{
    var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
// NReco PDF Generator: No async support available

// IronPDF: Full async support
public async Task<byte[]> GenerateAsync(string html)
{
    var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dépannage

Édition 1 : HtmlToPdfConverter introuvable

Problème : La classe HTMLToPdfConverter n'existe pas dans IronPDF.

Solution : Utilisez ChromePdfRenderer:

// NReco PDF Generator
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
// NReco PDF Generator
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Sujet 2 : GeneratePdf renvoie un type erroné

Problème : Le code attend byte[] mais obtient PdfDocument.

Solution : Accédez à la propriété .BinaryData :

// NReco PDF Generator
byte[] pdfBytes = converter.GeneratePdf(html);

// IronPDF
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
// NReco PDF Generator
byte[] pdfBytes = converter.GeneratePdf(html);

// IronPDF
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Sujet 3 : Objet PageMargins introuvable

Problème : la classe PageMarginsn'existe pas dans IronPDF.

Solution : Utilisez des propriétés de marge individuelles :

// NReco PDF Generator
converter.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };

// IronPDF
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
// NReco PDF Generator
converter.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };

// IronPDF
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Sujet 4 : Les numéros de page n'apparaissent pas

Problème : les caractères génériques [page]et [topage]ne fonctionnent pas.

Solution : Mise à jour de la syntaxe des espaces réservés d'IronPDF :

// NReco PDF Generator
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
// NReco PDF Generator
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";

// IronPDF
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>",
    MaxHeight = 20
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Liste de contrôle de la migration

Pré-migration

  • [Inventaire de toutes les utilisations de NReco.PdfGenerator dans la base de code
  • [Documenter toutes les valeurs de CustomWkHtmlArgs et CustomWkHtmlPageArgs
  • [Liste de tous les modèles HTML d'en-tête et de pied de page avec des espaces réservés
  • [Identifier les besoins asynchrones (contrôleurs web, services)
  • [ ] Réviser les paramètres de zoom et de marge
  • [Sauvegarde des sorties PDF existantes à des fins de comparaison
  • [Obtenir la clé de licence IronPDF

Modifications du paquet

  • [Supprimer le package NuGet NReco.PdfGenerator
  • [Installer le package NuGet IronPdf : dotnet add package IronPdf
  • [Mise à jour des importations de l'espace de noms de using NReco.PdfGenerator; à using IronPdf;

Modifications du code

  • [Ajouter la configuration de la clé de licence au démarrage
  • [Remplacer HtmlToPdfConverterpar ChromePdfRenderer
  • [Remplacer GénérerPdf(html)par RenderHtmlAsPdf(html)
  • [Remplacer GeneratePdfFromFile(url, null) par RenderUrlAsPdf(url)
  • [Convertir l'objet PageMarginsen propriétés de marges individuelles
  • [ ] Mise à jour des valeurs de zoom de flottant à pourcentage
  • [Mise à jour de la syntaxe des espaces réservés : [page]{page}, [topage]{total-pages}
  • [Remplacer File.WriteAllBytes() par pdf.SaveAs()
  • [Convertir les appels synchrone en asynchrone lorsque cela s'avère utile

Post-Migration

  • [Supprimer les binaires wkhtmltopdf du projet/déploiement
  • [Mise à jour des fichiers Docker pour supprimer l'installation de wkhtmltopdf
  • [Exécuter des tests de régression en comparant la sortie PDF
  • [Vérifier que les espaces réservés de l'en-tête et du pied de page s'affichent correctement
  • [Test sur toutes les plateformes cibles (Windows, Linux, macOS)
  • [Mise à jour du pipeline CI/CD pour supprimer les étapes wkhtmltopdf
  • [Mise à jour de l'analyse de sécurité pour confirmer la suppression des CVE

Conclusion

La migration de NReco PDF Generatorvers IronPdf permet de remédier aux vulnérabilités critiques en matière de sécurité tout en mettant à niveau votre moteur de rendu d'un Qt WebKit 2012 obsolète vers une solution moderne basée sur Chromium. La migration élimine plus de 20 CVE qui ne peuvent pas être corrigés, ajoute la prise en charge complète de CSS3 et de JavaScriptES6+, supprime les dépendances binaires externes et active les modèles async/await pour améliorer les performances des applications web.

Les principaux changements apportés à cette migration sont les suivants :

  1. Sécurité : plus de 20 CVE éliminées → Mises à jour de sécurité actives
  2. Rendu : WebKit Qt (2012)→ Chromium (actuel)
  3. Dépendances : External wkhtmltopdf → Autonome
  4. Async : synchrone uniquement → asynchrone complet/await
  5. Classe : HtmlToPdfConverterChromePdfRenderer
  6. Margins : objet PageMargins→ Propriétés individuelles
  7. Placeholders : [page]/[topage]{page}/{total-pages}

Explorez la documentation complète IronPDF, tutoriel, et référence API pour accélérer votre migration versIronPDFGenerator.

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