Haukcode.DinkToPdf vs IronPDF : Guide de comparaison technique
Haukcode.DinkToPdf vsIronPDF: Sécurité, architecture et génération moderne de PDF .NET
Lorsque les développeurs .NET évaluent les solutions de génération de PDF, Haukcode.DinkToPdf apparaît comme une fourche du projet abandonné DinkToPdf, qui intègre le binaire wkhtmltopdf. Bien que Haukcode.DinkToPdf fournisse des fonctionnalités de base de HTML à PDF, il hérite de vulnérabilités de sécurité critiques de wkhtmltopdf qui ne seront jamais corrigées parce que le projet sous-jacent est abandonné.IronPDFpropose une approche différente : une bibliothèque activement entretenue utilisant un moteur Chromium moderne avec des mises à jour de sécurité régulières.
Cette comparaison examine les deux bibliothèques à travers des dimensions techniquement pertinentes afin d'aider les développeurs professionnels et les architectes à prendre des décisions éclairées pour leurs besoins en .NET PDF.
Comprendre Haukcode.DinkToPdf
Haukcode.DinkToPdf est un fork de la bibliothèque DinkToPdf, qui était construite sur le binaire wkhtmltopdf, aujourd'hui disparu. La bibliothèque vise à maintenir la compatibilité avec .NET Core tout en offrant des fonctionnalités de conversion HTML vers PDF. En tant que fork d'un projet abandonné, Haukcode.DinkToPdf comporte des limitations significatives.
Haukcode.DinkToPdf utilise SynchronizedConverteravec PdfToolscomme mécanisme de conversion principal. La configuration est assurée par des objets HtmlToPdfDocumentcontenant des Paramètres globauxpour les options au niveau de la page (ColorMode, Orientation, PaperSize, Margins) et des 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 nécessite l'utilisation du SynchronizedConverterdans un modèle singleton en raison des limitations sous-jacentes de wkhtmltopdf.
Comprendre 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 complète |
| 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);
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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);
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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);
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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 | Notes |
|---|---|---|
SynchronizedConverter |
ChromePdfRenderer |
Sûr pour les threads, aucun singleton n'est nécessaire |
BasicConverter |
ChromePdfRenderer |
La même classe gère les deux |
PdfTools |
N/A | Pas nécessaire |
IConverter |
N/A | Utiliser directement le moteur de rendu |
Mise en correspondance de la configuration des documents
| Haukcode.DinkToPdf | IronPDF | Notes |
|---|---|---|
HtmlToPdfDocument |
Appel de méthode | Utiliser directement RenderHtmlAsPdf() |
Paramètres globaux |
Options de rendu |
Définir avant de rendre |
ObjectSettings |
Options de rendu |
Réunis en un seul |
converter.Convert(doc) |
renderer.RenderHtmlAsPdf(html) |
Retourne PdfDocument |
Mappage des propriétés de GlobalSettings
| Propriété GlobalSettings | Propriété d'IronPDF | Notes |
|---|---|---|
ColorMode |
RenderingOptions.GrayScale |
Booléen, définir true pour les niveaux de gris |
Orientation |
RenderingOptions.PaperOrientation |
Portrait ou Paysage |
Taille du papier |
RenderingOptions.PaperSize |
Utiliser l'énumération PdfPaperSize |
Margines.Top |
RenderingOptions.MarginTop |
En millimètres |
Margines.Bottom |
RenderingOptions.MarginBottom |
En millimètres |
Margines.Left |
RenderingOptions.MarginLeft |
En millimètres |
Margines.Right |
RenderingOptions.MarginRight |
En millimètres |
Mappage des propriétés d'ObjectSettings
| Propriété ObjectSettings | Équivalent d'IronPDF | Notes |
|---|---|---|
HtmlContent |
Premier paramètre de RenderHtmlAsPdf() |
Paramètre direct |
Page (URL) |
renderer.RenderUrlAsPdf(url) |
Méthode séparée |
HeaderSettings.Right = "[page]" |
TextHeader.RightText = "{page}" |
Syntaxe différente pour les espaces réservés |
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()));
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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!
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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 complète |
| 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 2020). Haukcode.DinkToPdf en tant que fork ne peut pas aborder les questions fondamentales 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 native des binaires : 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.
Limites de la sécurité des threads : le modèle de singleton SynchronizedConverterrequis limite la flexibilité architecturale et peut créer des goulets d'étranglement en cas de 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 de HTML5/CSS3 et l'exécution non sécurisée de JavaScript limitent les capacités de rendu des contenus web modernes. Le moteur Chromium d'IronPDF assure la prise en charge des normes web actuelles.
Viabilité à long terme : La dépendance à l'égard d'une technologie abandonnée crée une dette technique qui s'alourdit au fil du temps. À mesure que les projets évoluent vers .NET 10 et C# 14 jusqu'en 2026, le maintien de la dépendance à l'égard des wrappers wkhtmltopdf non maintenus devient de plus en plus problématique.
Forces et considérations
Haukcode.DinkToPdf Points forts
- Gratuit et Open Source : Licence MIT sans frais de licence
- Fonctionnalité de base : Prise en charge de la conversion fondamentale de HTML en PDF
- Base de code existante : Familière aux équipes qui utilisent déjà DinkToPdf
Considérations de Haukcode.DinkToPdf
- Vulnérabilités de sécurité critiques : CVE-2022-35583 n'est pas corrigeable
- Technologie abandonnée : Construite sur des outils abandonnés wkhtmltopdf
- Dépendance binaire native : DLL spécifiques à la plateforme requises
- Questions de sécurité des threads : Le modèle Singleton est nécessaire
- Normes Web limitées : Moteur Qt WebKit dépassé
- Aucune assistance professionnelle : Assistance communautaire uniquement
- Dette technique : La dépendance à l'égard d'un projet abandonné aggrave les risques
Les points forts d'IronPDF
- Active Security Patching : Des mises à jour régulières corrigent les vulnérabilités
- Moteur moderne Chromium : Prise en charge des normes web actuelles
- Self-Contained : pas de dépendances binaires natives
- Conception sécurisée : Modèles de déploiement flexibles
- <HTML5/CSS3/JavaScript : Capacités de rendu modernes
- Support professionnel : Assistance technique dédiée
- Ressources complètes : tutoriels et documentation exhaustifs
Considérations relatives à IronPDF
- Licence commerciale : Nécessaire 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 fork du projet abandonné DinkToPdf enveloppant le binaire abandonné wkhtmltopdf, 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.