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

Cómo migrar de wkhtmltopdf a IronPDF en 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á:

Problema Gravedad Estado
CVE-2022-35583 CRÍTICO (9,8/10) UNPATCHED
Vulnerabilidad SSRF Riesgo de adquisición de infraestructura UNPATCHED
Última actualización 2016-2017 ABANDONADO
Versión de WebKit 2015 (Qt WebKit) OBSOLEADO
Soporte de cuadrícula CSS Ninguno Broken
Soporte Flexbox Parcial Broken
ES6+ JavaScript Ninguno Broken

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:


<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"></iframe>
<img src="http://internal-database:5432/admin"/>

<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 Wrapper Estado Riesgos de seguridad
DinkToPdf Abandonado ⚠️ CRÍTICA
Rotativa Abandonado ⚠️ CRÍTICA
TuesPechkin Abandonado ⚠️ CRÍTICA
WkHtmlToPdf-DotNet Abandonado ⚠️ CRÍTICA
NReco.PdfGenerator Utiliza 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ística wkhtmltopdf IronPDF
Licencias LGPLv3 (Gratuito) Comercial
Motor de renderizado Qt WebKit (2015) Motor Chromium actual
Vulnerabilidades de seguridad CVE-2022-35583, problemas importantes sin parchear No se conocen CVE
Mantenimiento Activo Abandonado, sin actualizaciones significativas desde 2017 Mantenimiento activo con publicaciones periódicas
Soporte para estándares web modernos Limitado (flexbox roto, sin CSS Grid) Soporte completo
Integración y soporte Limitado a foros comunitarios Amplia 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;
$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";
$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);
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

wkhtmltopdf requiere crear un ConvertidorSincronizadocon PdfTools, construir un <código>HtmlToPdfDocumentconGlobalSettingsyObjects, establecer propiedades comoColorMode,OrientationyPaperSize, llamar aconverter.Convert()para obtener bytes sin procesar, y escribiendo manualmente en un archivo conFile.WriteAllBytes()`.

IronPDF elimina esta ceremonia por completo: cree un ChromePdfRenderer, llame a <código>RenderHtmlAsPdf()y utilice el método incorporadoSaveAs()`.

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

wkhtmltopdf anida ajustes dentro de GlobalSettings y Objects, con MarginSettings como un objeto separado.IronPDFproporciona propiedades <código>RenderingOptionsdirectas con nombres claros comoPaperOrientation,MarginTopyPaperSize`.

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 CLI Equivalente de IronPDF Notas
wkhtmltopdf input.html output.pdf renderer.RenderHtmlFileAsPdf() Archivo a PDF
wkhtmltopdf URL output.pdf renderer.RenderUrlAsPdf() URL a PDF
--tamaño de página A4 <código>RenderingOptions.PaperSize = PdfPaperSize.A4` Tamaño del papel
--tamaño de página Carta <código>RenderingOptions.PaperSize = PdfPaperSize.Letter` Carta para EE.UU
--Paisaje de orientación <código>RenderingOptions.PaperOrientation = Landscape` Orientación
--margin-top 10mm <código>RenderingOptions.MarginTop = 10` Márgenes en mm
--margen-inferior 10mm <código>RenderingOptions.MarginBottom = 10`
--margen-izquierdo 10mm <código>RenderingOptions.MarginLeft = 10`
--margen-derecha 10mm <código>RenderingOptions.MarginRight = 10`
--header-html header.html <código>RenderingOptions.HtmlHeader` Encabezado HTML
--footer-center "[página]" {page}marcador de posición Número de página
--footer-center "[toPage]" {total-páginas} marcador de posición Total de páginas
<código>--enable-javascript` Activado por defecto JavaScript
--javascript-delay 500 RenderingOptions.WaitFor.RenderDelay = 500 Retraso de JS
--dpi 300 <código>RenderingOptions.Dpi = 300` Configuración de PPP
--grayscale <código>RenderingOptions.GrayScale = true` Escala de grises

Mapeo de API de Wrapper de C

envoltorio wkhtmltopdf IronPDF Notas
ConvertidorSincronizado <código>ChromePdfRenderer` Renderizador principal
<código>HtmlToPdfDocument <código>RenderingOptions Configuración
<código>ConfiguraciónGlobal.Out <código>pdf.SaveAs() Archivo de salida
<código>GlobalSettings.PaperSize <código>RenderingOptions.PaperSize Tamaño del papel
ConfiguraciónGlobal.Orientación <código>RenderingOptions.PaperOrientation` Orientación
<código>GlobalSettings.Margins <código>RenderingOptions.Margin* Márgenes individuales
<código>ObjetoConfiguración.Página <código>RenderHtmlFileAsPdf() Entrada de archivos
<código>ObjectSettings.HtmlContent <código>RenderHtmlAsPdf() Cadena HTML
converter.Convert(doc) renderer.RenderHtmlAsPdf() Generar PDF

Migración de la sintaxis de los marcadores

wkhtmltopdf Marcador de posición Marcador de posición IronPDF
<código>[página]|{page}`
[toPage] {total de páginas}
<código>[fecha]|{fecha}`
<código>[tiempo]|{time}`
<código>[título]|{html-title}`
<código>[url]|{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]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
};
$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");
$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);
$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;
}
$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`en 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 motor Chromium actual, lo que garantiza compatibilidad total con CSS3, CSS Grid, Flexbox y JavaScriptES6+. Los frameworks modernos se traducen correctamente.

API simplificada: los métodos de representación directa reemplazan 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, la conformidad con PDF/A, las marcas de agua y las operaciones de combinació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.

Compatibilidad asincrónica: evite el bloqueo de subprocesos en aplicaciones web de alta carga con compatibilidad nativa con async/await.

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