Haukcode.DinkToPdf vs IronPDF : Guide de comparaison technique
Lorsque les développeurs .NET examinent les options de génération de PDF, Haukcode.DinkToPdf se distingue comme une continuation du projet DinkToPdf abandonné, qui utilise le binaire wkhtmltopdf. Bien que Haukcode.DinkToPdf offre une conversion HTML vers PDF basique, il comporte des risques de sécurité importants liés à wkhtmltopdf qui ne seront jamais corrigés en raison de l'abandon du projet.IronPDFpropose une option différente : une bibliothèque activement maintenue utilisant un moteur Chromium moderne avec des mises à jour de sécurité régulières.
Cette comparaison examine les deux bibliothèques sous différents angles techniques pertinents afin d'aider les développeurs et les architectes à faire des choix éclairés pour leurs besoins en matière de PDF .NET.
Exploration de Haukcode.DinkToPdf
Haukcode.DinkToPdf est une continuation de la bibliothèque DinkToPdf, autrefois populaire, construite sur le binaire wkhtmltopdf désormais obsolète. La bibliothèque vise à rester compatible avec .NET Core tout en assurant la conversion HTML vers PDF. Haukcode.DinkToPdf, qui fait suite à un projet abandonné, présente des limitations notables.
Haukcode.DinkToPdf utilise SynchronizedConverteravec PdfToolspour la conversion. La configuration est gérée par le biais d'objets HtmlToPdfDocumentcontenant Paramètres globauxpour les options de page (ColorMode, Orientation, PaperSize, Margins) et ObjectSettingspour le contenu (HtmlContent pour les chaînes HTML, Page pour les URL). La méthode converter.Convert(doc)renvoie des données brutes byte[].
La bibliothèque nécessite des binaires natifs spécifiques à la plateforme : libwkhtmltox.dll (Windows), libwkhtmltox.so (Linux), et libwkhtmltox.dylib (macOS). La sécurité des threads exige l'utilisation du SynchronizedConverterdans un modèle singleton en raison des limitations de wkhtmltopdf.
Exploration d'IronPDF
IronPDF est une bibliothèque .NET développée indépendamment qui utilise un moteur de rendu moderne Chromium. La bibliothèque est activement maintenue avec des mises à jour régulières, un support professionnel et des correctifs de sécurité continus.
IronPDF utilise ChromePdfRenderercomme classe de rendu principale avec une configuration via les propriétés RenderingOptions. Les méthodes telles que RenderHtmlAsPdf() et RenderUrlAsPdf() renvoient des objets PdfDocument qui peuvent être enregistrés avec SaveAs() ou accédés en tant que BinaryData. La bibliothèque est autonome et ne nécessite pas de binaires natifs externes. Elle est conçue pour être à l'abri des threads et ne nécessite pas de modèles de singleton.
La considération critique en matière de sécurité
La différence la plus importante entre ces bibliothèques concerne la sécurité. Haukcode.DinkToPdf hérite de CVE-2022-35583, une vulnérabilité critique de type SSRF (Server-Side Request Forgery) avec un score CVSS de 9,8.
CVE-2022-35583 Vecteurs d'attaque:
- Un contenu HTML malveillant peut amener le serveur à rechercher des ressources internes
- Les attaques sur les métadonnées AWS peuvent accéder à
http://169.254.169.254pour voler des informations d'identification - Analyse du réseau interne et accès aux services internes
- Inclusion de fichiers locaux via le protocole
file:// - Potentiel de prise en charge complète de l'infrastructure
Il n'y a pas de correctif pour cette vulnérabilité car wkhtmltopdf est abandonné (archivé depuis janvier 2023, la dernière version étant la 0.12.6 en 2020).
| Aspectsécurité | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| CVEs critiques | CVE-2022-35583 (CVSS 9.8, non corrigeable) | Activement patché |
| Moteur sous-jacent | wkhtmltopdf (Qt WebKit ~2015) | Chromium (régulièrement mis à jour) |
| Statut du projet | Fork d'un projet abandonné | Développé activement |
| Mises à jour de sécurité | Aucune attente | Publications régulières |
| Support | Communauté uniquement | Support professionnel |
Architecture et comparaison des moteurs
Les différences architecturales fondamentales affectent la qualité du rendu, la prise en charge des normes web modernes et la complexité du déploiement.
| Aspect | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| Moteur de rendu | Qt WebKit (~2015) | Chromium (actuel) |
| 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 |
| Mises à jour | Aucune attente | Publications régulières |
La dépendance de Haukcode.DinkToPdf à l'égard du moteur Qt WebKit obsolète signifie qu'il manque des années de correctifs de sécurité et que la prise en charge des normes web modernes est limitée. Le moteur Chromium d'IronPDF offre une prise en charge des normes web actuelles avec des mises à jour régulières.
Code Comparaison : Opérations PDF courantes
Conversion HTML en PDF
L'opération la plus fondamentale démontre les différences de conception des API.
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);
}
}
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");
}
}
Haukcode.DinkToPdf nécessite la création d'un SynchronizedConverteravec PdfTools, la construction d'un HtmlToPdfDocumentavec des objets Paramètres globauxet ObjectSettingsimbriqués, l'appel de Convert() pour obtenir des octets bruts, puis l'écriture manuelle sur le disque avec File.WriteAllBytes().
IronPDF crée un ChromePdfRenderer, appelle RenderHtmlAsPdf() avec la chaîne HTML directement, et enregistre avec SaveAs(). L'opération est nettement plus concise grâce à une conception moderne de l'API.
Pour des options de rendu HTML avancées, explorez le guide de conversion du HTML en PDF.
Conversion d'URL en PDF
La conversion de pages web montre les différentes approches du traitement du contenu externe.
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);
}
}
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");
}
}
Haukcode.DinkToPdf utilise la même structure HtmlToPdfDocumentavec la propriété ObjectSettings.Page pour la spécification de l'URL.IronPDFfournit une méthode RenderUrlAsPdf() dédiée qui accepte l'URL directement - une API plus propre pour ce cas d'utilisation spécifique.
Notez que le rendu d'URL avec Haukcode.DinkToPdf comporte le risque de vulnérabilité CVE-2022-35583 SSRF, car des URL ou des redirections malveillantes pourraient exploiter le serveur.
Paramètres de page personnalisés
La configuration de la page présente les différents modèles de configuration.
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);
}
}
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");
}
}
Haukcode.DinkToPdf configure les paramètres de la page par le biais de Paramètres globauxavec des objets MarginSettings imbriqués. Les propriétés utilisent des enums comme Orientation.Landscape et PaperKind.Letter.
IronPDF utilise les propriétés Options de rendudirectement sur le moteur de rendu. Les propriétés sont définies individuellement (PaperSize, PaperOrientation, MarginTop, etc.) avec des enums typés (PdfPaperSize.Letter, PdfPaperOrientation.Landscape). Les deux langues utilisent le millimètre comme unité de mesure.
Pour en savoir plus sur la configuration du rendu, consultez les tutoriels IronPDF.
Référence de mappage d'API
Pour les développeurs qui évaluent la migration Haukcode.DinkToPdf ou qui comparent les capacités, ce mappage montre les opérations équivalentes :
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 |
Paramètres globaux |
Options de rendu |
ObjectSettings |
Options de rendu |
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 |
Taille du papier |
RenderingOptions.PaperSize |
Margines.Top |
RenderingOptions.MarginTop |
Margines.Bottom |
RenderingOptions.MarginBottom |
Margines.Left |
RenderingOptions.MarginLeft |
Margines.Right |
RenderingOptions.MarginRight |
Mappage des propriétés d'ObjectSettings
| Propriété ObjectSettings | Équivalent d'IronPDF |
|---|---|
HtmlContent |
Premier paramètre de RenderHtmlAsPdf() |
Page (URL) |
renderer.RenderUrlAsPdf(url) |
HeaderSettings.Right = "[page]" |
TextHeader.RightText = "{page}" |
Différences de syntaxe des espaces réservés
Les espaces réservés de l'en-tête et du pied de page utilisent une syntaxe différente selon les bibliothèques :
| Haukcode.DinkToPdf | IronPDF |
|---|---|
[page] |
{page} |
[toPage] |
{total-pages} |
[date] |
{date} |
Sécurité des threads et injection de dépendance
Haukcode.DinkToPdf nécessite une manipulation prudente en raison des limitations de sécurité des threads héritées de wkhtmltopdf.
Haukcode.DinkToPdf (Singleton requis):
// Startup.cs - MUST be singleton due to thread safety issues
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
}
// Startup.cs - MUST be singleton due to thread safety issues
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
}
IronPDF (Flexible) :
// Startup.cs - Can be singleton or transient (both work)
public void ConfigureServices(IServiceCollection services)
{
IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
}
// Startup.cs - Can be singleton or transient (both work)
public void ConfigureServices(IServiceCollection services)
{
IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
}
IronPDF est thread-safe par conception, permettant des modèles d'injection de dépendance flexibles sans l'exigence de singleton.
Résumé de la comparaison des fonctionnalités
| Fonction | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| Origine de la source | Fork d'un projet abandonné | Développement indépendant |
| Sécurité | CVEs hérités de l'amont (non corrigeables) | Des correctifs proactifs et sécurisés |
| Communauté et assistance | Petit et sporadique | Une équipe nombreuse, active et dévouée |
| Caractéristiques et mises à jour | Limité et sporadique | Régulier avec un développement actif |
| Support multithreading | Requiert le modèle singleton | Entièrement pris en charge et optimisé |
| Binaires natifs | Exigences (spécifiques à la plate-forme) | Autonome |
| HTML5/CSS3 | Limité | Prise en charge |
| JavaScript | Limité | Moteur V8 complet |
| Licence | MIT (gratuit) | Commercial avec essai gratuit |
Quand les équipes envisagent de passer de Haukcode.DinkToPdf à IronPDF
Les équipes de développement évaluent la transition de Haukcode.DinkToPdf versIronPDFpour plusieurs raisons :
Vulnérabilités de sécurité critiques : CVE-2022-35583 (SSRF) est une vulnérabilité critique avec CVSS 9.8 qui ne sera jamais corrigée. Pour les applications traitant du HTML fourni par l'utilisateur ou rendant des URL externes, cette vulnérabilité permet le vol d'identifiants AWS, l'accès au réseau interne et des attaques par inclusion de fichiers locaux.
Technologie sous-jacente abandonnée : wkhtmltopdf est abandonné (archivé en janvier 2023, dernière version en 2020). Haukcode.DinkToPdf, en tant que continuation, ne peut pas résoudre les problèmes fondamentaux de la technologie sous-jacente. Le moteur Qt WebKit (~2015), obsolète, ne bénéficie pas de correctifs de sécurité depuis des années.
Gestion des binaires natifs : Haukcode.DinkToPdf nécessite la distribution de binaires spécifiques à la plateforme ( libwkhtmltox.dll , libwkhtmltox.so , libwkhtmltox.dylib ). Cela complique le déploiement, les pipelines CI/CD et la conteneurisation. IronPdf est autonome et ne contient pas de binaires externes.
Limitations de sécurité des threads : le modèle singleton SynchronizedConverterrequis limite la flexibilité architecturale et peut créer des goulots d'étranglement sous charge.IronPDFest de par sa conception à l'épreuve des threads, ce qui permet des instances par demande.
Normes Web modernes : La prise en charge limitée d'HTML5/CSS3 et l'exécution non sécurisée de JavaScript restreignent les capacités de rendu du contenu Web moderne. Le moteur Chromium d'IronPDF assure la prise en charge des normes web actuelles.
Viabilité à long terme : La dépendance à des technologies abandonnées engendre une dette technique qui s'accumule avec le temps. À mesure que les projets évoluent vers .NET 10 et C# 14 d'ici 2026, le maintien de la dépendance à des wrappers wkhtmltopdf non maintenus devient de plus en plus problématique.
Forces et considérations
Haukcode.DinkToPdf Points forts
- Logiciel libre et gratuit : Licence MIT sans frais de licence
- Fonctionnalités de base : Prend en charge la conversion HTML vers PDF.
- Code source existant : familier aux équipes utilisant déjà DinkToPdf
Considérations de Haukcode.DinkToPdf
- Vulnérabilités de sécurité critiques : la vulnérabilité CVE-2022-35583 est irrémédiable
- Technologie abandonnée : basée sur le module wkhtmltopdf désormais obsolète
- Dépendance binaire native : DLL spécifiques à la plateforme requises
- Problèmes de sécurité du fil : un motif singleton est requis
- Normes Web limitées : moteur Qt WebKit obsolète
- Aucun soutien professionnel : assistance uniquement communautaire
- Dette technique : La dépendance à l'égard d'un projet abandonné aggrave le risque
Les points forts d'IronPDF
- Correctifs de sécurité actifs : des mises à jour régulières corrigent les vulnérabilités
- Moteur Chromium moderne : prise en charge des normes web actuelles
- Autonome : Aucune dépendance binaire native
- Conception multithread : Modèles de déploiement flexibles
- HTML5/CSS3/JavaScript complets : capacités de rendu modernes
- Assistance professionnelle : Assistance technique dédiée
- Ressources complètes : tutoriels et documentation détaillés
Considérations relatives à IronPDF
- Licence commerciale : requise pour une utilisation en production
Conclusion
Haukcode.DinkToPdf etIronPDFreprésentent des approches fondamentalement différentes de la génération de PDF dans les applications .NET. Haukcode.DinkToPdf, en tant que continuation du projet abandonné DinkToPdf encapsulant le binaire wkhtmltopdf abandonné, comporte des vulnérabilités de sécurité critiques (CVE-2022-35583) qui ne seront jamais corrigées. La bibliothèque nécessite une distribution binaire native, des modèles singleton pour la sécurité des threads, et offre une prise en charge limitée des normes web modernes.
IronPDF constitue une alternative activement maintenue avec un moteur Chromium moderne, des mises à jour de sécurité régulières et une architecture thread-safe. La bibliothèque autonome élimine la gestion des binaires natifs tout en offrant un support HTML5/CSS3/JavaScript complet.
Alors que les organisations planifient pour .NET 10, C# 14 et le développement d'applications jusqu'en 2026, le choix entre le maintien de la dépendance à une technologie abandonnée avec des vulnérabilités critiques non corrigibles et l'adoption d'une solution activement maintenue avec des capacités modernes a un impact significatif à la fois sur la posture de sécurité et la vitesse de développement. Les équipes qui ont besoin d'une génération sécurisée de PDF, d'un rendu moderne ou d'un déploiement simplifié trouveront qu'IronPDF répond efficacement à ces exigences.
Commencez à évaluerIronPDFavec un essai gratuit et explorez la documentation complète pour évaluer l'adéquation à vos besoins spécifiques.