Migración de Haukcode.DinkToPdf a IronPDF
Haukcode.DinkToPdf es una continuación de la otrora popular biblioteca DinkToPdf, que utiliza el binario wkhtmltopdf para convertir HTML a PDF para aplicaciones .NET . Aunque Haukcode.DinkToPdf se mantuvo al día con .NET Core después de que el proyecto original se estancó, conlleva importantes problemas de seguridad debido a su dependencia ascendente. El proyecto wkhtmltopdf se archivó en enero de 2023, por lo que estos problemas nunca se resolverán.
Esta guía ofrece una ruta de migración completa de Haukcode.DinkToPdf a IronPDF, que incluye instrucciones paso a paso, comparaciones de código y ejemplos prácticos para desarrolladores profesionales de .NET que buscan eliminar los riesgos de seguridad de sus flujos de trabajo de generación de PDF.
Alerta de seguridad crítica: CVE-2022-35583
Haukcode.DinkToPdf hereda una importante vulnerabilidad de seguridad de wkhtmltopdf que no se puede solucionar:
CVE-2022-35583 - Vulnerabilidad SSRF crítica (CVSS 9.8)
La biblioteca wkhtmltopdf (y todos sus envoltorios, incluido Haukcode.DinkToPdf) es vulnerable a la falsificación de peticiones del lado del servidor (SSRF):
- Vector de ataque: El contenido HTML malicioso puede hacer que el servidor obtenga recursos internos
- Ataque de metadatos de AWS: puede acceder a
http://169.254.169.254para robar credenciales de AWS - Acceso a la red interna: Puede escanear y acceder a servicios internos
- Inclusión de archivos locales: puede leer archivos locales a través del protocolo
file:// - Impacto: Posible adquisición completa de la infraestructura
NO hay solución para esta vulnerabilidad porque wkhtmltopdf fue abandonado y archivado en 2023. La última versión fue la 0.12.6 en 2020.
IronPDF frente a Haukcode.DinkToPdf: Comparación de características
Comprender las diferencias arquitectónicas ayuda a los responsables técnicos a evaluar la inversión en migración:
| Aspecto | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| Motor subyacente | wkhtmltopdf (Qt WebKit ~2015) | Chromium (actualizado regularmente) |
| Estado de seguridad | CVE-2022-35583 (CRÍTICO, no corregible) | Parcheado activamente |
| Estado del proyecto | Bifurcación de proyecto abandonado | Desarrollado activamente |
| HTML5/CSS3 | Limitado | Se admite |
| JavaScript | Limitado, inseguro | Motor V8 completo |
| Binarios nativos | Requisitos (específicos de la plataforma) | Autocontenido |
| Seguridad de hilos | Requiere el patrón singleton | Thread-safe por diseño |
| Soporte | Sólo para la comunidad | Asistencia profesional |
| Actualizaciones | No se espera ninguno | Publicaciones periódicas |
| Licencia | MIT (gratuito) | Comercial con prueba gratuita |
Inicio rápido: Migración de Haukcode.DinkToPdf a IronPDF
La migración puede comenzar inmediatamente con estos pasos básicos.
Paso 1: Eliminar DinkToPdf y los binarios nativos
Elimine los paquetes 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
Eliminar binarios nativos de su proyecto:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
Paso 2: Instalar IronPDF
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Paso 3: Actualizar los espacios de nombres
Sustituya los espacios de nombres de DinkToPdf por 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
Paso 4: Inicializar licencia
Añadir inicialización de licencia al inicio de la aplicación:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Ejemplos de migración de código
Conversión básica de HTML a PDF
La operación más fundamental revela la diferencia de complejidad entre estas bibliotecas PDF .NET.
Enfoque 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
Enfoque 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 requiere crear un SynchronizedConverter con PdfTools, construir un HtmlToPdfDocument con GlobalSettings y Objects anidados, agregar un ObjectSettings con HtmlContent, llamar a converter.Convert() para obtener bytes sin procesar y escribir manualmente en un archivo con File.WriteAllBytes().
IronPDF simplifica esto a tres líneas: crea un ChromePdfRenderer, llama a RenderHtmlAsPdf() y usa el método incorporado SaveAs().
Para situaciones avanzadas de conversión de HTML a PDF, consulte la Guía de conversión de HTML a PDF.
Convertir URL en PDF
La conversión de URL a PDF muestra diferencias de patrón similares.
Enfoque 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
Enfoque 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 utiliza el mismo patrón de construcción de documentos con ObjectSettings.Page para las URL.IronPDFproporciona un método RenderUrlAsPdf() dedicado que expresa claramente la intención.
Explore la URL a la documentación PDF para conocer las opciones de autenticación y encabezado personalizado.
Configuración de páginas personalizadas
La configuración de la orientación, el tamaño del papel y los márgenes requiere distintos enfoques.
Enfoque 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
Enfoque 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 anida configuraciones dentro de GlobalSettings con un objeto MarginSettings separado.IronPDFproporciona propiedades directas RenderingOptions con nombres claros como PaperSize, PaperOrientation y propiedades de margen individuales.
Referencia de la API de Haukcode.DinkToPdf a IronPDF
Este mapeo acelera la migración al mostrar los equivalentes directos de las API:
Mapeo de clases conversoras
| Haukcode.DinkToPdf | IronPDF |
|---|---|
SynchronizedConverter |
ChromePdfRenderer |
BasicConverter |
ChromePdfRenderer |
PdfTools |
N/A |
IConverter |
N/A |
Mapeo de configuración de documentos
| Haukcode.DinkToPdf | IronPDF |
|---|---|
HtmlToPdfDocument |
Llamada al método |
GlobalSettings |
RenderingOptions |
ObjectSettings |
RenderingOptions |
converter.Convert(doc) |
renderer.RenderHtmlAsPdf(html) |
Mapeo de propiedades de GlobalSettings
| Propiedad GlobalSettings | Propiedad de 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 |
Mapeo de propiedades de ObjectSettings
| Propiedad ObjectSettings | Equivalente de IronPDF |
|---|---|
HtmlContent |
Primer parámetro de RenderHtmlAsPdf() |
Page (URL) |
renderer.RenderUrlAsPdf(url) |
HeaderSettings.Right = "[page]" |
TextHeader.RightText = "{page}" |
Migración de la sintaxis de los marcadores
| Haukcode.DinkToPdf | IronPDF |
|---|---|
[page] |
{page} |
[toPage] |
{total-pages} |
[date] |
{date} |
Problemas comunes de migración y soluciones
Número 1: Requisito Singleton
Haukcode.DinkToPdf: Requiere SynchronizedConverter como singleton debido a problemas de seguridad de subprocesos con el binario nativo wkhtmltopdf.
Solución: ChromePdfRenderer deIronPDFes seguro para subprocesos por diseño, no requiere singleton:
// 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!
Número 2: Dependencias binarias nativas
Haukcode.DinkToPdf: Requiere bibliotecas nativas específicas de la plataforma (libwkhtmltox.dll/so/dylib).
Solución:IronPDFes autónomo y no tiene dependencias binarias nativas. Elimine estos archivos después de la migración:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
Tema 3: Diferencias en los tipos de retorno
Haukcode.DinkToPdf: converter.Convert() devuelve byte[] directamente.
Solución:IronPDFdevuelve un objeto PdfDocument con múltiples opciones de salida:
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
Edición 4: Sintaxis de marcador de posición de encabezado/pie
Haukcode.DinkToPdf: utiliza sintaxis de corchetes como [page] y [toPage].
Solución: Actualización de los marcadores de posición de llaves de 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}"
}
Lista de migración de Haukcode.DinkToPdf
Tareas previas a la migración
Audite su código base para identificar todos los usos 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" .
Documente las configuraciones actuales de GlobalSettings y ObjectSettings. Identifique cualquier código de carga de biblioteca nativa que pueda eliminarse.
Tareas de actualización de código
- Eliminar paquetes NuGet de DinkToPdf
- Instalación del paquete IronPdf NuGet
- Actualizar las importaciones de espacios de nombres de
DinkToPdfaIronPdf - Reemplace
SynchronizedConverterconChromePdfRenderer - Convertir patrones
HtmlToPdfDocumenten llamadas directas a métodos - Convertir
GlobalSettingsaRenderingOptions - Convertir
ObjectSettingsaRenderingOptions - Actualizar la sintaxis del marcador de posición (
[page]→{page},[toPage]→{total-pages}) - Añadir la inicialización de la licenciaIronPDFal inicio
Tareas de limpieza de infraestructuras
- Eliminar binarios nativos (libwkhtmltox.*)
- Eliminar el código de carga de la biblioteca nativa
- Eliminar CustomAssemblyLoadContext si está presente
- Actualización de la inyección de dependencias (ya no se requiere singleton)
- Eliminar el código de detección de plataformas para los binarios nativos
Pruebas posteriores a la migración
Tras la migración, verifique estos aspectos:
- Prueba de conversión de HTML a PDF
- Prueba de conversión de URL a PDF
- Verificar la configuración de la página (tamaño, orientación, márgenes)
- Verificación de encabezados y pies de página con marcadores de posición
- Prueba con plantillas HTML reales
- Prueba de rendimiento bajo carga
Beneficios clave de migrar a IronPDF
Pasar de Haukcode.DinkToPdf aIronPDFofrece varias ventajas fundamentales:
Seguridad: elimina CVE-2022-35583 (SSRF) y otras vulnerabilidades de wkhtmltopdf que nunca serán parcheadas.
Motor de renderizado moderno: utiliza Chromium actualizado activamente en lugar del abandonado Qt WebKit de 2015. Compatibilidad total con HTML5, CSS3 y JavaScript .
Sin binarios nativos: biblioteca autónoma sin DLL específicos de la plataforma para administrar. Simplifica la implementación en Windows, Linux y macOS.
Seguridad de subprocesos: no se requiere singleton: use ChromePdfRenderer libremente en cualquier patrón, incluida la instanciación por solicitud.
API más simple: llamadas a métodos directos (RenderHtmlAsPdf(), RenderUrlAsPdf()) en lugar de la construcción de objetos de documento complejos.
Desarrollo activo: a medida que aumenta la adopción de .NET 10 y C# 14 hasta 2026, las actualizaciones periódicas deIronPDFgarantizan la compatibilidad con las versiones actuales y futuras de .NET .

