Migration de Haukcode.DinkToPdf vers IronPDF
Haukcode.DinkToPdf est une continuation de la bibliothèque DinkToPdf, autrefois populaire, qui utilise le binaire wkhtmltopdf pour convertir le HTML en PDF pour les applications .NET . Bien que Haukcode.DinkToPdf ait continué à évoluer avec .NET Core après l'arrêt du projet initial, il présente d'importants problèmes de sécurité liés à sa dépendance en amont. Le projet wkhtmltopdf a été archivé en janvier 2023, ces problèmes ne seront donc jamais résolus.
Ce guide propose une procédure de migration complète de Haukcode.DinkToPdf vers IronPDF, comprenant des instructions étape par étape, des comparaisons de code et des exemples pratiques pour les développeurs .NET Professional souhaitant éliminer les risques de sécurité de leurs flux de travail de génération de PDF.
Avertissement de sécurité critique : CVE-2022-35583
Haukcode.DinkToPdf hérite d'une faille de sécurité majeure de wkhtmltopdf qui ne peut être corrigée :
CVE-2022-35583 - Vulnérabilité SSRF critique (CVSS 9.8)
La bibliothèque wkhtmltopdf (et tous les wrappers incluant Haukcode.DinkToPdf) est vulnérable au Server-Side Request Forgery (SSRF) :
- Vecteur d'attaque : Un contenu HTML malveillant peut amener le serveur à récupérer des ressources internes.
- Attaque des métadonnées AWS : Accès possible à
http://169.254.169.254pour voler des identifiants AWS - Accès au réseau interne : Peut analyser et accéder aux services internes
- Inclusion de fichiers locaux : Lecture possible des fichiers locaux via le protocole
file:// - Impact : Possibilité de prise de contrôle totale des infrastructures
Il n'existe AUCUN correctif pour cette vulnérabilité car wkhtmltopdf a été abandonné et archivé en 2023. La dernière version était la version 0.12.6 en 2020.
IronPDF vs Haukcode.DinkToPdf : Comparaison des fonctionnalités
La compréhension des différences architecturales aide les décideurs techniques à évaluer l'investissement dans la migration :
| Aspect | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| Moteur sous-jacent | wkhtmltopdf (Qt WebKit ~2015) | Chromium (régulièrement mis à jour) |
| État de la sécurité | CVE-2022-35583 (CRITIQUE, non corrigeable) | Activement patché |
| Statut du projet | Fork d'un projet abandonné | Développé activement |
| HTML5/CSS3 | Limité | Prise en charge |
| JavaScript | Limité, peu sûr | Moteur V8 complet |
| Binaires natifs | Exigences (spécifiques à la plate-forme) | Autonome |
| Sécurité des threads | Requiert le modèle singleton | Sécurité des threads dès la conception |
| Support | Communauté uniquement | Support professionnel |
| Mises à jour | Aucune attente | Publications régulières |
| Licence | MIT (gratuit) | Commercial avec essai gratuit |
Démarrage rapide : Migration de Haukcode.DinkToPdf vers IronPDF
La migration peut commencer immédiatement grâce à ces étapes fondamentales.
Étape 1 : Supprimer DinkToPdf et les binaires natifs
Supprimer les paquets NuGet de Haukcode.DinkToPdf :
# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
Supprimer les binaires natifs de votre projet:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
Étape 2 : Installer IronPDF
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Étape 3 : Mise à jour des espaces de noms
Remplacer les espaces de noms DinkToPdf par IronPDF:
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering; // For RenderingOptions
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering; // For RenderingOptions
Imports IronPdf
Imports IronPdf.Rendering
Étape 4 : 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 basique de HTML en PDF
L'opération la plus fondamentale révèle la différence de complexité entre ces bibliothèques PDF .NET.
Approche de Haukcode.DinkToPdf :
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Hello World</h1></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Hello World</h1></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = New List(Of ObjectSettings) From {
New ObjectSettings() With {
.HtmlContent = "<html><body><h1>Hello World</h1></body></html>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Module
Approche IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System.IO
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Haukcode.DinkToPdf nécessite la création d'un SynchronizedConverter avec PdfTools, la construction d'un HtmlToPdfDocument avec des GlobalSettings et Objects imbriqués, l'ajout d'un ObjectSettings avec HtmlContent, l'appel de converter.Convert() pour obtenir des octets bruts, et l'écriture manuelle dans un fichier avec File.WriteAllBytes().
IronPDF simplifie cela en trois lignes : créer un ChromePdfRenderer, appeler RenderHtmlAsPdf() et utiliser la méthode intégrée SaveAs().
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 présente des différences de modèles similaires.
Approche de Haukcode.DinkToPdf :
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = New List(Of ObjectSettings) From {
New ObjectSettings() With {
.Page = "https://www.example.com"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End Module
Approche IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
Haukcode.DinkToPdf utilise le même modèle de construction de document avec ObjectSettings.Page pour les URL. IronPDF fournit une méthode dédiée RenderUrlAsPdf() qui exprime clairement l'intention.
Explorez la URL vers la documentation PDF pour l'authentification et les options d'en-tête personnalisées.
Paramètres de page personnalisés
La configuration de l'orientation, de la taille du papier et des marges nécessite différentes approches.
Approche de Haukcode.DinkToPdf :
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.Letter,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("landscape.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.Letter,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("landscape.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Landscape,
.PaperSize = PaperKind.Letter,
.Margins = New MarginSettings() With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("landscape.pdf", pdf)
End Sub
End Module
Approche IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");
pdf.SaveAs("landscape.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");
pdf.SaveAs("landscape.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 10
renderer.RenderingOptions.MarginRight = 10
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>")
pdf.SaveAs("landscape.pdf")
End Sub
End Class
Haukcode.DinkToPdf imbrique les paramètres à l'intérieur de GlobalSettings avec un objet MarginSettings séparé. IronPDF fournit des propriétés directes RenderingOptions avec des noms clairs comme PaperSize, PaperOrientation et des propriétés de marge individuelles.
Haukcode.DinkToPdf API to IronPDF Mapping Reference (Référence de mappage de l'API DinkToPdf vers IronPDF)
Cette cartographie accélère la migration en indiquant les équivalents directs des API :
Mise en correspondance des classes de convertisseurs
| Haukcode.DinkToPdf | IronPDF |
|---|---|
SynchronizedConverter |
ChromePdfRenderer |
BasicConverter |
ChromePdfRenderer |
PdfTools |
N/A |
IConverter |
N/A |
Mise en correspondance de la configuration des documents
| Haukcode.DinkToPdf | IronPDF |
|---|---|
HtmlToPdfDocument |
Appel de méthode |
GlobalSettings |
RenderingOptions |
ObjectSettings |
RenderingOptions |
converter.Convert(doc) |
renderer.RenderHtmlAsPdf(html) |
Mappage des propriétés de GlobalSettings
| Propriété GlobalSettings | Propriété d'IronPDF |
|---|---|
ColorMode |
RenderingOptions.GrayScale |
Orientation |
RenderingOptions.PaperOrientation |
PaperSize |
RenderingOptions.PaperSize |
Margins.Top |
RenderingOptions.MarginTop |
Margins.Bottom |
RenderingOptions.MarginBottom |
Margins.Left |
RenderingOptions.MarginLeft |
Margins.Right |
RenderingOptions.MarginRight |
Mappage des propriétés d'ObjectSettings
| Propriété ObjectSettings | Équivalent d'IronPDF |
|---|---|
HtmlContent |
Premier paramètre à RenderHtmlAsPdf() |
Page (URL) |
renderer.RenderUrlAsPdf(url) |
HeaderSettings.Right = "[page]" |
TextHeader.RightText = "{page}" |
Migration de la syntaxe des espaces réservés
| Haukcode.DinkToPdf | IronPDF |
|---|---|
[page] |
{page} |
[toPage] |
{total-pages} |
[date] |
{date} |
Problèmes de migration courants et solutions
Enjeu 1 : Exigence Singleton
Haukcode.DinkToPdf : Nécessite SynchronizedConverter comme singleton en raison de problèmes de sécurité des threads avec le binaire natif wkhtmltopdf.
Solution :IronPDF(ChromePdfRenderer) est thread-safe par conception ; aucun singleton n'est requis.
// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
' Before (DinkToPdf) - MUST be singleton
services.AddSingleton(GetType(IConverter), New SynchronizedConverter(New PdfTools()))
' After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton(Of IPdfService, IronPdfService)()
' Or services.AddTransient(Of IPdfService, IronPdfService)() - both are safe!
Édition 2 : Dépendances binaires natives
Haukcode.DinkToPdf: Requiert des bibliothèques natives spécifiques à la plateforme (libwkhtmltox.dll/so/dylib).
Solution:IronPDF est autonome et ne présente aucune dépendance binaire native. Supprimez ces fichiers après la migration :
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
Édition 3 : Différences de type de retour
Haukcode.DinkToPdf : converter.Convert() renvoie byte[] directement.
Solution :IronPDF renvoie un objet PdfDocument avec plusieurs options de sortie :
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData; // Get bytes
pdf.SaveAs("output.pdf"); // Or save directly
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData; // Get bytes
pdf.SaveAs("output.pdf"); // Or save directly
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim bytes As Byte() = pdf.BinaryData ' Get bytes
pdf.SaveAs("output.pdf") ' Or save directly
Edition 4 : Syntaxe des espaces réservés dans l'en-tête et le pied de page
Haukcode.DinkToPdf : Utilise la syntaxe des crochets comme [page] et [toPage].
Solution: Mise à jour des caractères de remplacement des accolades d'IronPDF :
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
RightText = "Page {page} of {total-pages}"
};
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
RightText = "Page {page} of {total-pages}"
};
' Before (DinkToPdf)
HeaderSettings = New With {.Right = "Page [page] of [toPage]"}
' After (IronPDF)
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
.RightText = "Page {page} of {total-pages}"
}
Liste de contrôle pour la migration vers DinkToPdf
Tâches préalables à la migration
Auditez votre base de code pour identifier toute utilisation de DinkToPdf :
# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .
# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .
# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .
# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .
# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .
# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .
# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
Documentez les configurations actuelles GlobalSettings et ObjectSettings. Identifiez tout code de chargement de bibliothèque natif pouvant être supprimé.
Tâches de mise à jour du code
- Supprimer les paquets NuGet de DinkToPdf
- Installer le paquet NuGet IronPDF
- Mettez à jour les importations d'espace de noms de
DinkToPdfàIronPdf - Remplacez
SynchronizedConverterparChromePdfRenderer - Convertir les modèles
HtmlToPdfDocumenten appels de méthode directs - Convertir
GlobalSettingsenRenderingOptions - Convertir
ObjectSettingsenRenderingOptions - Mettre à jour la syntaxe des espaces réservés (
[page]→{page},[toPage]→{total-pages}) - Ajouter l'initialisation de la licence IronPDF au démarrage
Tâches de nettoyage de l'infrastructure
- Supprimer les binaires natifs (libwkhtmltox.*)
- Supprimer le code de chargement de la bibliothèque native
- Supprimer CustomAssemblyLoadContext s'il est présent
- Mise à jour de l'injection de dépendance (le singleton n'est plus nécessaire)
- Suppression du code de détection de plate-forme pour les binaires natifs
Test de post-migration
Après la migration, vérifiez ces aspects :
- Tester la conversion de HTML en PDF
- Test de conversion d'URL en PDF
- Vérifier les paramètres de la page (taille, orientation, marges)
- Vérifier les en-têtes et les pieds de page avec des espaces réservés
- Test avec des modèles HTML réels
- Test de performance sous charge
Avantages clés de la migration vers IronPDF
Le passage de Haukcode.DinkToPdf à IronPDF présente plusieurs avantages décisifs :
Sécurité : Élimine la vulnérabilité CVE-2022-35583 (SSRF) et d'autres vulnérabilités de wkhtmltopdf qui ne seront jamais corrigées.
Moteur de rendu moderne : utilise Chromium, régulièrement mis à jour, au lieu de Qt WebKit, abandonné depuis 2015. Prise en charge complète de HTML5, CSS3 et JavaScript .
Aucun binaire natif : bibliothèque autonome sans DLL spécifiques à la plateforme à gérer. Simplifie le déploiement sur Windows, Linux et macOS.
Sécurité des threads : Aucune exigence de singleton — utilisez ChromePdfRenderer librement dans n'importe quel modèle, y compris l'instanciation par requête.
API plus simple : appels de méthode directs (RenderHtmlAsPdf(), RenderUrlAsPdf()) au lieu d'une construction complexe d'objets de document.
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 .

