Saltar al pie de página
GUíAS DE MIGRACIóN

Cómo migrar de wkhtmltopdf a IronPDF en C#

Migrando de wkhtmltopdf a IronPDF: Una guía completa para desarrolladores de C

wkhtmltopdf es una herramienta muy utilizada para convertir documentos HTML a PDF utilizando Qt WebKit. A pesar de su popularidad entre los desarrolladores por sus capacidades de línea de comandos y su licencia gratuita, el proyecto presenta ahora riesgos de seguridad críticos que ya no pueden ignorarse. La biblioteca fue oficialmente abandonada en 2016-2017, y una vulnerabilidad de gravedad CRÍTICA (CVE-2022-35583) permanece permanentemente sin parchear.

Esta guía proporciona una ruta de migración completa de wkhtmltopdf a IronPDF, con instrucciones paso a paso, comparaciones de código y ejemplos prácticos para desarrolladores profesionales de .NET que necesitan eliminar este riesgo de seguridad de sus aplicaciones.

Alerta de seguridad crítica: CVE-2022-35583

wkhtmltopdf contiene una vulnerabilidad de seguridad crítica que nunca se solucionará:

ProblemaGravedadEstado
CVE-2022-35583CRÍTICO (9,8/10)UNPATCHED
Vulnerabilidad SSRFRiesgo de adquisición de infraestructuraUNPATCHED
Última actualización2016-2017ABANDONADO
Versión de WebKit2015 (Qt WebKit)OBSOLEADO
Soporte de cuadrícula CSSNingunoBroken
Soporte FlexboxParcialBroken
ES6+ JavaScriptNingunoBroken

Cómo funciona el ataque SSRF

La vulnerabilidad Server-Side Request Forgery permite a los atacantes acceder a servicios internos, robar credenciales, escanear su red interna y extraer datos confidenciales a través de HTML manipulado:

<!-- Malicious HTML submitted to your PDF generator -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
<!-- Malicious HTML submitted to your PDF generator -->
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>
HTML

Cuando wkhtmltopdf renderiza este HTML, obtiene estas URL del contexto de red de su servidor, saltándose cortafuegos y controles de seguridad.

Bibliotecas envolventes afectadas

Todas las envolturas .NET para wkhtmltopdf heredan estas vulnerabilidades:

Biblioteca WrapperEstadoRiesgos de seguridad
DinkToPdfAbandonado⚠️ CRÍTICA
RotativaAbandonado⚠️ CRÍTICA
TuesPechkinAbandonado⚠️ CRÍTICA
WkHtmlToPdf-DotNetAbandonado⚠️ CRÍTICA
NReco.PdfGeneratorUtiliza wkhtmltopdf⚠️ CRÍTICA

Si utiliza alguna de estas bibliotecas, es vulnerable a CVE-2022-35583.

IronPDFfrente a wkhtmltopdf: Comparación de características

Comprender las diferencias arquitectónicas ayuda a los responsables técnicos a evaluar la inversión en migración:

CaracterísticawkhtmltopdfIronPDF
LicenciasLGPLv3 (Gratuito)Comercial
Motor de renderizadoQt WebKit (2015)Motor Chromium actual
Vulnerabilidades de seguridadCVE-2022-35583, problemas importantes sin parchearNo se conocen CVE
Mantenimiento ActivoAbandonado, sin actualizaciones significativas desde 2017Mantenimiento activo con publicaciones periódicas
Soporte para estándares web modernosLimitado (flexbox roto, sin CSS Grid)Soporte completo
Integración y soporteLimitado a foros comunitariosAmplia documentación y soporte dedicado
CSS Grid❌ No compatible✅ Soporte completo
Flexbox⚠️ Roto✅ Soporte completo
ES6+ JavaScript❌ No compatible✅ Soporte completo
Async/Await❌ No compatible✅ Soporte completo
Manipulación de PDF❌ No compatible✅ Soporte completo
Firmas digitales❌ No compatible✅ Soporte completo
Cumplimiento de PDF/A❌ No compatible✅ Soporte completo

Inicio rápido: Migración de wkhtmltopdf a IronPDF

La migración puede comenzar inmediatamente con estos pasos básicos.

Paso 1: Eliminar los paquetes y binarios de wkhtmltopdf

Eliminar todos los paquetes wkhtmltopdf wrapper:

# Remove wkhtmltopdf wrapper (whichever you're using)
dotnet remove package WkHtmlToPdf-DotNet
dotnet remove package DinkToPdf
dotnet remove package TuesPechkin
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore
dotnet remove package NReco.PdfGenerator

# Remove wkhtmltopdf binary from your deployment
# Delete wkhtmltopdf.exe, wkhtmltox.dll, etc.
# Remove wkhtmltopdf wrapper (whichever you're using)
dotnet remove package WkHtmlToPdf-DotNet
dotnet remove package DinkToPdf
dotnet remove package TuesPechkin
dotnet remove package Rotativa
dotnet remove package Rotativa.AspNetCore
dotnet remove package NReco.PdfGenerator

# Remove wkhtmltopdf binary from your deployment
# Delete wkhtmltopdf.exe, wkhtmltox.dll, etc.
SHELL

Paso 2: Instalar IronPDF

# AddIronPDF(secure, modern alternative)
dotnet add package IronPdf
# AddIronPDF(secure, modern alternative)
dotnet add package IronPdf
SHELL

Paso 3: Actualizar los espacios de nombres

Sustituya los espacios de nombres wkhtmltopdf por el espacio de nombres IronPdf:

// Before (wkhtmltopdf)
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;

// After (IronPDF)
using IronPdf;
// Before (wkhtmltopdf)
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

Ejemplos de migración de código

Convertir HTML a PDF

La operación más fundamental revela la diferencia de complejidad entre estos enfoques de .NET PDF.

enfoque wkhtmltopdf:

// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientación= Orientation.Portrait,
                PaperSize = PaperKind.A4
            },
            Objects = {
                new ObjectSettings()
                {
                    HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientación= Orientation.Portrait,
                PaperSize = PaperKind.A4
            },
            Objects = {
                new ObjectSettings()
                {
                    HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Enfoque IronPDF:

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

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

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

wkhtmltopdf requiere crear un ConvertidorSincronizadocon PdfTools, construir un <código>HtmlToPdfDocument</códigocon GlobalSettings y Objects, establecer propiedades como ColorMode, Orientation y PaperSize, llamar a converter.Convert() para obtener bytes sin procesar, y escribiendo manualmente en un archivo con File.WriteAllBytes().

IronPDF elimina esta ceremonia por completo: cree un ChromePdfRenderer, llame a <código>RenderHtmlAsPdf()</códigoy utilice 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 patrones de complejidad similares.

enfoque wkhtmltopdf:

// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientación= 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 WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientación= 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
$vbLabelText   $csharpLabel

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdf utiliza la propiedad Page en ObjectSettings para especificar una URL, lo que requiere el mismo patrón de construcción de documentos.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 personalizada: Archivos HTML con configuración de página

La configuración de la orientación, los márgenes y el tamaño del papel requiere distintos enfoques.

enfoque wkhtmltopdf:

// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientación= Orientation.Landscape,
                PaperSize = PaperKind.A4,
                Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
            },
            Objects = {
                new ObjectSettings()
                {
                    Page = "input.html",
                    WebSettings = { DefaultEncoding = "utf-8" }
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("custom-output.pdf", pdf);
    }
}
// NuGet: Install-Package WkHtmlToPdf-DotNet
using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new SynchronizedConverter(new PdfTools());
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = {
                ColorMode = ColorMode.Color,
                Orientación= Orientation.Landscape,
                PaperSize = PaperKind.A4,
                Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
            },
            Objects = {
                new ObjectSettings()
                {
                    Page = "input.html",
                    WebSettings = { DefaultEncoding = "utf-8" }
                }
            }
        };
        byte[] pdf = converter.Convert(doc);
        File.WriteAllBytes("custom-output.pdf", pdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Enfoque IronPDF:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("custom-output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("custom-output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdf anida ajustes dentro de GlobalSettings y Objects, con MarginSettings como un objeto separado.IronPDFproporciona propiedades <código>RenderingOptions</códigodirectas con nombres claros como PaperOrientation, MarginTop y PaperSize.

referencia de mapeo de API de wkhtmltopdf a IronPDF

Este mapeo acelera la migración al mostrar los equivalentes directos de las API:

Mapeo deCLI a IronPDF

wkhtmltopdf Opción CLIEquivalente de IronPDFNotas
wkhtmltopdf input.html output.pdfrenderer.RenderHtmlFileAsPdf()Archivo a PDF
wkhtmltopdf URL output.pdfrenderer.RenderUrlAsPdf()URL a PDF
--tamaño de página A4<código>RenderingOptions.PaperSize = PdfPaperSize.A4</códigoTamaño del papel
--tamaño de página Carta<código>RenderingOptions.PaperSize = PdfPaperSize.Letter</códigoCarta para EE.UU
--Paisaje de orientación<código>RenderingOptions.PaperOrientation = Landscape</códigoOrientación
--margin-top 10mm<código>RenderingOptions.MarginTop = 10</códigoMárgenes en mm
--margen-inferior 10mm<código>RenderingOptions.MarginBottom = 10</código
--margen-izquierdo 10mm<código>RenderingOptions.MarginLeft = 10</código
--margen-derecha 10mm<código>RenderingOptions.MarginRight = 10</código
--header-html header.html<código>RenderingOptions.HtmlHeader</códigoEncabezado HTML
--footer-center "[página]"{page}marcador de posiciónNúmero de página
--footer-center "[toPage]"{total-páginas} marcador de posiciónTotal de páginas
<código>--enable-javascript</códigoActivado por defectoJavaScript
--javascript-delay 500RenderingOptions.WaitFor.RenderDelay = 500Retraso de JS
--dpi 300<código>RenderingOptions.Dpi = 300</códigoConfiguración de PPP
--grayscale<código>RenderingOptions.GrayScale = true</códigoEscala de grises

C# Wrapper API Mapping

envoltorio wkhtmltopdfIronPDFNotas
ConvertidorSincronizado<código>ChromePdfRenderer</códigoRenderizador principal
<código>HtmlToPdfDocument</código<código>RenderingOptions</códigoConfiguración
<código>ConfiguraciónGlobal.Out</código<código>pdf.SaveAs()</códigoArchivo de salida
<código>GlobalSettings.PaperSize</código<código>RenderingOptions.PaperSize</códigoTamaño del papel
ConfiguraciónGlobal.Orientación<código>RenderingOptions.PaperOrientation</códigoOrientación
<código>GlobalSettings.Margins</código<código>RenderingOptions.Margin*</códigoMárgenes individuales
<código>ObjetoConfiguración.Página</código<código>RenderHtmlFileAsPdf()</códigoEntrada de archivos
<código>ObjectSettings.HtmlContent</código<código>RenderHtmlAsPdf()</códigoCadena HTML
converter.Convert(doc)renderer.RenderHtmlAsPdf()Generar PDF

Migración de la sintaxis de los marcadores

wkhtmltopdf Marcador de posiciónMarcador de posición IronPDF
<código>[página]</código>{page}
[toPage]{total de páginas}
<código>[fecha]</código>{fecha}
<código>[tiempo]</código>{time}
<código>[título]</código>{html-title}
<código>[url]</código>{url}

Problemas comunes de migración y soluciones

Cuestión 1: Sintaxis del marcador de posición de encabezado/pie

wkhtmltopdf: Utiliza sintaxis de corchetes como <código>[página]</código>y [toPage].

Solución: Actualización de los marcadores de posición de llaves de IronPDF:

// Before (wkhtmltopdf)
FooterSettings = { Left = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:left;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
// Before (wkhtmltopdf)
FooterSettings = { Left = "Page [page] of [toPage]" }

// After (IronPDF)
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:left;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Número 2: Configuración del retardo de JavaScript

wkhtmltopdf: Utiliza la propiedad JavascriptDelay con una fiabilidad limitada.

Solución:IronPDFofrece múltiples opciones:

renderer.RenderingOptions.EnableJavaScript = true;

// Option 1: Fixed delay
renderer.RenderingOptions.WaitFor.RenderDelay(500);

// Option 2: Wait for specific element (more reliable)
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

// Option 3: Wait for JavaScriptcondition
renderer.RenderingOptions.WaitFor.JavaScript("window.renderComplete === true");
renderer.RenderingOptions.EnableJavaScript = true;

// Option 1: Fixed delay
renderer.RenderingOptions.WaitFor.RenderDelay(500);

// Option 2: Wait for specific element (more reliable)
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

// Option 3: Wait for JavaScriptcondition
renderer.RenderingOptions.WaitFor.JavaScript("window.renderComplete === true");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Número 3: CSS moderno no renderizado

Síntoma: Los diseños CSS Grid y Flexbox se muestran incorrectamente en wkhtmltopdf.

Solución: El motor Chromium deIronPDFmaneja correctamente el CSS moderno:

// This CSS now works with IronPDF
var html = @"
<style>
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
    .flex { display: flex; justify-content: space-between; align-items: center; }
</style>
<div class='grid'>
    <div>Column 1</div>
    <div>Column 2</div>
    <div>Column 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
// This CSS now works with IronPDF
var html = @"
<style>
    .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
    .flex { display: flex; justify-content: space-between; align-items: center; }
</style>
<div class='grid'>
    <div>Column 1</div>
    <div>Column 2</div>
    <div>Column 3</div>
</div>";

var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Número 4: Renderizado síncrono frente a asíncrono

wkhtmltopdf: Los Wrappers son hilos síncronos y de bloque.

Solución:IronPDFes compatible con el renderizado asíncrono:

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

wkhtmltopdf Lista de migración

Tareas previas a la migración

Audite su código base para identificar todos los usos de wkhtmltopdf:

# Find all wkhtmltopdf references
grep -r "WkHtmlToPdfDotNet\|DinkToPdf\|TuesPechkin\|Rotativa" --include="*.cs" .
grep -r "wkhtmltopdf" --include="*.yml" --include="*.yaml" --include="Dockerfile" .
# Find all wkhtmltopdf references
grep -r "WkHtmlToPdfDotNet\|DinkToPdf\|TuesPechkin\|Rotativa" --include="*.cs" .
grep -r "wkhtmltopdf" --include="*.yml" --include="*.yaml" --include="Dockerfile" .
SHELL

Localizar y documentar archivos binarios wkhtmltopdf para su eliminación. Configuración actual del documento (tamaño del papel, márgenes, encabezados/pies de página).

Tareas de actualización de código

  1. Eliminar todos los paquetes NuGet wkhtmltopdf wrapper
  2. Eliminar los binarios de wkhtmltopdf (wkhtmltopdf.exe, wkhtmltox.dll)
  3. Instalación del paquete IronPdf NuGet
  4. Actualizar las importaciones de espacios de nombres de WkHtmlToPdfDotNet a IronPdf
  5. Sustituya ConvertidorSincronizadopor ChromePdfRenderer
  6. Convertir patrones <código>HtmlToPdfDocument</códigoen métodos de renderizado directo
  7. Actualice las configuraciones de GlobalSettings a RenderingOptions
  8. Convertir configuraciones de márgenes de MarginSettings a propiedades individuales
  9. Actualizar la sintaxis de los marcadores de posición ([page]{page}, [toPage]{total-pages})
  10. Añadir la inicialización de la licenciaIronPDFal inicio

Pruebas posteriores a la migración

Tras la migración, verifique estos aspectos:

  • Comparación visual de la salida PDF (debería mejorar con un soporte CSS moderno)
  • Verificar el renderizado CSS moderno (ahora funcionan CSS Grid y Flexbox)
  • Prueba de páginas con mucho JavaScript
  • Escaneo de seguridad para confirmar que no quedan binarios wkhtmltopdf
  • Prueba de carga para comparar el rendimiento

Verificación de seguridad

# Scan for any remaining wkhtmltopdf artifacts
find /var/www/ -name "*wkhtmlto*" 2>/dev/null
find /usr/local/bin/ -name "*wkhtmlto*" 2>/dev/null
docker images | grep wkhtmltopdf

# Check if any process is still using it
ps aux | grep wkhtmltopdf
# Scan for any remaining wkhtmltopdf artifacts
find /var/www/ -name "*wkhtmlto*" 2>/dev/null
find /usr/local/bin/ -name "*wkhtmlto*" 2>/dev/null
docker images | grep wkhtmltopdf

# Check if any process is still using it
ps aux | grep wkhtmltopdf
SHELL

Beneficios clave de migrar a IronPDF

Pasar de wkhtmltopdf aIronPDFofrece varias ventajas fundamentales:

Seguridad: Se eliminan CVE-2022-35583 y todas las vulnerabilidades wkhtmltopdf.IronPDFno tiene CVE conocidos y recibe actualizaciones de seguridad periódicas.

Motor de renderizado moderno:IronPDFutiliza el actual motor Chromium, que garantiza compatibilidad total con CSS3, CSS Grid, Flexbox y ES6+ JavaScript. Los frameworks modernos se traducen correctamente.

API simplificada: Los métodos de renderización directa sustituyen a los patrones de construcción de documentos. Los métodos SaveAs() incorporados eliminan la manipulación manual de bytes.

Capacidades ampliadas: La manipulación de PDF, las firmas digitales, el cumplimiento de PDF/A, las marcas de agua y las operaciones de fusión/división son funciones integradas que wkhtmltopdf no podía proporcionar.

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.

Soporte Async: Evite el bloqueo de hilos en aplicaciones web de alta carga con soporte nativo async/await.

Conclusión

wkhtmltopdf sirvió a la comunidad .NET como conversor gratuito de HTML a PDF. Sin embargo, con el proyecto oficialmente abandonado desde 2016-2017 y una vulnerabilidad SSRF de gravedad CRÍTICA (CVE-2022-35583) que nunca será parcheada, el uso continuado crea un riesgo de seguridad inaceptable para las aplicaciones de producción.

IronPDF proporciona una alternativa moderna y segura con un motor de renderizado Chromium que maneja los estándares web contemporáneos. La ruta de migración es sencilla: eliminar los paquetes y binarios de wkhtmltopdf, instalar IronPDF, sustituir los patrones de construcción de documentos por métodos de representación directa y actualizar la sintaxis de los marcadores de posición.

Comience su migración hoy mismo con una prueba gratuita de IronPDF y elimine las vulnerabilidades de seguridad inherentes a las soluciones basadas en wkhtmltopdf.

Para obtener una guía de implementación completa, explore la documentación de IronPDF, tutoriales y referencia de API.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más