Cómo migrar de NReco PDF Generator a IronPDF en C#
Migrar de Generador de PDF de NRecoa IronPDF: Guía completa de migración a C
La migración de Generador de PDF de NRecoaIronPDFelimina vulnerabilidades de seguridad críticas heredadas de wkhtmltopdf al tiempo que actualiza su flujo de trabajo PDF .NET de un motor WebKit Qt obsoleto (circa 2012) a un moderno renderizador basado en Chromium con compatibilidad total con CSS3 y JavaScript. Esta guía proporciona una ruta de migración completa y paso a paso que aborda tanto los problemas de seguridad como las limitaciones de representación de NReco PDF Generator.
Por qué migrar de Generador de PDF de NRecoa IronPDF
Cuestiones críticas de seguridad con NReco PDF Generator
NReco PDF Generator envuelve el obsoleto binario wkhtmltopdf, heredando todas sus vulnerabilidades de seguridad. No se trata de una preocupación teórica: hay más de 20 CVE documentadas sin parches disponibles desde que wkhtmltopdf se abandonó en 2020:
- CVE-2020-21365: Falsificación de petición del lado del servidor (SSRF)
- CVE-2022-35583: Lectura de archivos locales mediante inyección de HTML
- CVE-2022-35580: Potencial de ejecución remota de código
Estas vulnerabilidades no pueden parchearse porque el proyecto wkhtmltopdf subyacente ya no se mantiene.
Limitaciones adicionales del generador de PDF de NReco
Versión gratuita con marca de agua: El uso para producción requiere una licencia de pago con precios opacos que requiere ponerse en contacto con ventas.
Motor de renderizado obsoleto: WebKit Qt (circa 2012) proporciona un soporte web moderno limitado:
- Sin CSS Grid ni Flexbox
- Sin JavaScriptmoderno (ES6+)
- Escasa compatibilidad con fuentes web
- Sin variables CSS ni propiedades personalizadas
Dependencia binaria externa: Requiere la gestión de los binarios wkhtmltopdf por plataforma (
wkhtmltopdf.exe,wkhtmltox.dll).Sin desarrollo activo: El wrapper recibe mantenimiento sin actualizaciones del motor subyacente.
- Soporte asíncrono limitado: la API síncrona bloquea los hilos en las aplicaciones web.
Comparación entre Generador de PDF de NRecoe IronPDF
| Aspecto | Generador de PDF de NReco | IronPDF |
|---|---|---|
| Motor de renderizado | WebKit Qt (2012) | Chromium (actual) |
| Seguridad | más de 20 CVE, sin parches | Actualizaciones de seguridad activas |
| Soporte CSS | CSS2.1, CSS3 limitado | CSS3 completo, Grid, Flexbox |
| JavaScript | ES5 básico | ES6+ completo, async/await |
| Dependencias | Binario externo wkhtmltopdf | Autocontenido |
| Soporte de Async | Sólo sincrónico | Async/await completo |
| Fuentes web | Limitado | Fuentes Google completas, @font-face |
| Licencias | Precios opacos, póngase en contacto con ventas | Precios transparentes |
| Prueba gratuita | Marca de agua | Funcionalidad completa |
Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una base preparada para el futuro con desarrollo activo y capacidades de renderización modernas.
Antes de empezar
Prerrequisitos
- <Entorno .NET: .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acceso a NuGet: Capacidad para instalar paquetes NuGet
- Licencia IronPDF: Obtenga su clave de licencia en ironpdf.com
Cambios en el paquete NuGet
# Remove NReco.PdfGenerator
dotnet remove package NReco.PdfGenerator
# Install IronPDF
dotnet add package IronPdf# Remove NReco.PdfGenerator
dotnet remove package NReco.PdfGenerator
# Install IronPDF
dotnet add package IronPdfElimine también los binarios wkhtmltopdf de su despliegue:
- Eliminar
wkhtmltopdf.exe,wkhtmltox.dlldel proyecto - Eliminar cualquier script de instalación de wkhtmltopdf
- Eliminar carpetas binarias específicas de la plataforma
Configuración de licencias
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.comIdentificar el uso del generador de PDF de NReco
# Find all NReco.PdfGenerator references
grep -r "NReco.PdfGenerator\|HtmlToPdfConverter\|GeneratePdf" --include="*.cs" .# Find all NReco.PdfGenerator references
grep -r "NReco.PdfGenerator\|HtmlToPdfConverter\|GeneratePdf" --include="*.cs" .Referencia completa de la API
Core Class Mappings
| Generador de PDF de NReco | IronPDF | Notas |
|---|---|---|
| <código>HtmlToPdfConverter</código | <código>ChromePdfRenderer</código | Renderizador principal |
Margenes de página | Propiedades de los márgenes individuales | MarginTop, MarginBottom, etc. |
Orientación de página | Orientación del documento pdf | Enum |
| <código>TamañoDePágina</código | <código>TamañoDelPapel</código | Enum |
Métodos de renderizado
| Generador de PDF de NReco | IronPDF | Notas |
|---|---|---|
| <código>GenerarPdf(html)</código> | <código>RenderHtmlAsPdf(html)</código | Devuelve PdfDocument |
| <código>GeneratePdfFromFile(url, output)</código | <código>RenderUrlAsPdf(url)</código | Soporte directo de URL |
| <código>GeneratePdfFromFile(htmlPath, output)</código | <código>RenderHtmlFileAsPdf(ruta)</código | Ruta del archivo |
| (async no compatible)_ | <código>RenderHtmlAsPdfAsync(html)</código | Versión asíncrona |
| (async no compatible)_ | <código>RenderUrlAsPdfAsync(url)</código | Versión asíncrona |
Configuración de páginas
| Generador de PDF de NReco | IronPDF | Notas |
|---|---|---|
Ancho de página = 210 | <código>RenderingOptions.PaperSize = PdfPaperSize.A4</código | Utilizar enum o SetCustomPaperSize |
Altura de página = 297 | <código>RenderingOptions.SetCustomPaperSizeinMilimeters(w, h)</código | Tamaño personalizado |
Orientación = PageOrientation.Landscape | <código>RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape</código | Paisaje |
Tamaño = TamañoPágina.A4 | <código>RenderingOptions.PaperSize = PdfPaperSize.A4</código | Enumeración del tamaño del papel |
Mapeo de márgenes
| Generador de PDF de NReco | IronPDF | Notas |
|---|---|---|
Margins.Top = 10 | <código>RenderingOptions.MarginTop = 10</código | En milímetros |
Margins.Bottom = 10 | <código>RenderingOptions.MarginBottom = 10</código | En milímetros |
Margins.Left = 10 | <código>RenderingOptions.MarginLeft = 10</código | En milímetros |
Margins.Right = 10 | <código>RenderingOptions.MarginRight = 10</código | En milímetros |
new PageMargins { ... } | Propiedades individuales | Sin objeto de márgenes |
Mapas de marcador de posición de encabezado/pie
| Generador de PDF de NReco (wkhtmltopdf) | IronPDF | Notas |
|---|---|---|
| <código>[página]</código> | {page} | Número de página actual |
[topage] | {total de páginas} | Número total de páginas |
| <código>[fecha]</código> | {fecha} | Fecha actual |
| <código>[tiempo]</código> | {time} | Horario actual |
| <código>[título]</código> | {html-title} | Título del documento |
Mapeos de manejo de salidas
| Generador de PDF de NReco | IronPDF | Notas |
|---|---|---|
byte[] pdfBytes = GenerarPdf(html) | <código>PdfDocument pdf = RenderHtmlAsPdf(html)</código | Objeto de devolución |
| <código>File.WriteAllBytes(ruta, bytes)</código | <código>pdf.SaveAs(ruta)</código | Ahorro directo |
return pdfBytes | <código>return pdf.BinaryData</código | Obtener matriz de bytes |
nuevo MemoryStream(pdfBytes) | <código>pdf.Stream</código | Obtener flujo |
Ejemplos de migración de código
Ejemplo 1: HTML básico a PDF
Antes (NReco PDF Generator):
// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;
class Program
{
static void Main()
{
var htmlToPdf = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
File.WriteAllBytes("output.pdf", pdfBytes);
}
}// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;
class Program
{
static void Main()
{
var htmlToPdf = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
File.WriteAllBytes("output.pdf", pdfBytes);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comLa diferencia fundamental radica en el tipo de retorno y el patrón de guardado. El HtmlToPdfConverter.GeneratePdf() de Generador de PDF de NRecodevuelve un byte[] que debe escribir manualmente en el disco mediante File.WriteAllBytes(). IronPDF's ChromePdfRenderer.RenderHtmlAsPdf() devuelve un objeto PdfDocument con un método SaveAs() incorporado.
Este enfoque orientado a objetos ofrece ventajas adicionales: se puede manipular el PDF (añadir marcas de agua, fusionar documentos, añadir seguridad) antes de guardarlo. Si necesita los bytes sin procesar por compatibilidad con el código existente, utilice pdf.BinaryData. Consulte la documentación HTML a PDF para obtener más opciones de conversión.
Ejemplo 2: Tamaño de página personalizado con márgenes
Antes (NReco PDF Generator):
// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;
class Program
{
static void Main()
{
var htmlToPdf = new HtmlToPdfConverter();
htmlToPdf.PageWidth = 210;
htmlToPdf.PageHeight = 297;
htmlToPdf.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };
var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
File.WriteAllBytes("custom-size.pdf", pdfBytes);
}
}// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;
class Program
{
static void Main()
{
var htmlToPdf = new HtmlToPdfConverter();
htmlToPdf.PageWidth = 210;
htmlToPdf.PageHeight = 297;
htmlToPdf.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };
var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
File.WriteAllBytes("custom-size.pdf", pdfBytes);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("custom-size.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var htmlContent = "<html><body><h1>Custom Page Size</h1><p>A4 size document with margins.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("custom-size.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comNReco PDF Generator utiliza dimensiones numéricas (PageWidth = 210, PageHeight = 297) y un objeto PageMargins.IronPDFutiliza el enum <código>TamañoDelPapel</código(que incluye tamaños estándar como A4, Letter, Legal) y propiedades de margen individuales en el objeto RenderingOptions.
Los cambios clave de la migración:
PageWidth/PageHeight→RenderingOptions.PaperSize = PdfPaperSize.A4- nuevo PageMargins { Top = 10, ... }
→ Propiedades individuales:RenderingOptions.MarginTop = 10`
Para tamaños de papel personalizados no cubiertos por el enum, utilice RenderingOptions.SetCustomPaperSizeinMilimeters(width, height). Más información sobre opciones de configuración de página.
Ejemplo 3: Conversión de URL a PDF
Antes (NReco PDF Generator):
// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;
class Program
{
static void Main()
{
var htmlToPdf = new HtmlToPdfConverter();
var pdfBytes = htmlToPdf.GeneratePdfFromFile("https://www.example.com", null);
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}// NuGet: Install-Package NReco.PdfGenerator
using NReco.PdfGenerator;
using System.IO;
class Program
{
static void Main()
{
var htmlToPdf = new HtmlToPdfConverter();
var pdfBytes = htmlToPdf.GeneratePdfFromFile("https://www.example.com", null);
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
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;
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.comNReco PDF Generator utiliza el método de nombre confuso GeneratePdfFromFile() tanto para archivos locales como para URL, con un segundo parámetro anulable.IronPDFproporciona métodos específicos: RenderUrlAsPdf() para URLs y RenderHtmlFileAsPdf() para archivos HTML locales.
El enfoque deIronPDFes más limpio e intuitivo. Para aplicaciones web asíncronas, utilice await renderer.RenderUrlAsPdfAsync(url) para evitar el bloqueo de hilos, algo que Generador de PDF de NRecosimplemente no puede hacer.
Notas de migración críticas
Conversión de valores de zoom
NReco PDF Generator utiliza valores flotantes (0,0-2,0), mientras queIronPDFutiliza enteros porcentuales:
// NReco PDF Generator: Zoom = 0.9f (90%)
// IronPDF: Zoom = 90
// Conversion formula:
int ironPdfZoom = (int)(nrecoZoom * 100);// NReco PDF Generator: Zoom = 0.9f (90%)
// IronPDF: Zoom = 90
// Conversion formula:
int ironPdfZoom = (int)(nrecoZoom * 100);IRON VB CONVERTER ERROR developers@ironsoftware.comActualización de la sintaxis de los marcadores
Deben actualizarse todos los marcadores de posición de encabezado/pie de página:
| Generador de PDF de NReco | IronPDF |
|---|---|
| <código>[página]</código> | {page} |
[topage] | {total de páginas} |
| <código>[fecha]</código> | {fecha} |
| <código>[título]</código> | {html-title} |
// NReco PDF Generator:
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";
// IronPDF:
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div>Page {page} of {total-pages}</div>",
MaxHeight = 20
};// NReco PDF Generator:
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";
// IronPDF:
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div>Page {page} of {total-pages}</div>",
MaxHeight = 20
};IRON VB CONVERTER ERROR developers@ironsoftware.comCambio de tipo de retorno
NReco PDF Generator devuelve byte[] directamente;IronPDFdevuelve PdfDocument:
// Generador de PDF de NRecopattern:
byte[] pdfBytes = converter.GeneratePdf(html);
File.WriteAllBytes("output.pdf", pdfBytes);
//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;// Generador de PDF de NRecopattern:
byte[] pdfBytes = converter.GeneratePdf(html);
File.WriteAllBytes("output.pdf", pdfBytes);
//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;IRON VB CONVERTER ERROR developers@ironsoftware.comSeguridad y reutilización de hilos
NReco PDF Generator suele crear un nuevo conversor por llamada. El <código>ChromePdfRenderer</códigodeIronPDFes seguro y puede reutilizarse:
// Generador de PDF de NRecopattern (creates new each time):
public byte[] Generate(string html)
{
var converter = new HtmlToPdfConverter();
return converter.GeneratePdf(html);
}
//IronPDFpattern (reuse renderer, thread-safe):
private readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();
public byte[] Generate(string html)
{
return _renderer.RenderHtmlAsPdf(html).BinaryData;
}// Generador de PDF de NRecopattern (creates new each time):
public byte[] Generate(string html)
{
var converter = new HtmlToPdfConverter();
return converter.GeneratePdf(html);
}
//IronPDFpattern (reuse renderer, thread-safe):
private readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();
public byte[] Generate(string html)
{
return _renderer.RenderHtmlAsPdf(html).BinaryData;
}IRON VB CONVERTER ERROR developers@ironsoftware.comSoporte asíncrono (nueva capacidad)
IronPDF admite patrones async/await que Generador de PDF de NRecono puede proporcionar:
// NReco PDF Generator: No async support available
// IronPDF: Full async support
public async Task<byte[]> GenerateAsync(string html)
{
var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}// NReco PDF Generator: No async support available
// IronPDF: Full async support
public async Task<byte[]> GenerateAsync(string html)
{
var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
return pdf.BinaryData;
}IRON VB CONVERTER ERROR developers@ironsoftware.comSolución de problemas
Asunto 1: HtmlToPdfConverter no encontrado
Problema: la clase <código>HtmlToPdfConverter</códigono existe en IronPDF.
Solución: Utilizar ChromePdfRenderer:
// NReco PDF Generator
var converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();// NReco PDF Generator
var converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();IRON VB CONVERTER ERROR developers@ironsoftware.comAsunto 2: GeneratePdf devuelve un tipo incorrecto
Problema: El código espera byte[] pero obtiene PdfDocument.
Solución: Accede a la propiedad .BinaryData:
// NReco PDF Generator
byte[] pdfBytes = converter.GeneratePdf(html);
// IronPDF
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;// NReco PDF Generator
byte[] pdfBytes = converter.GeneratePdf(html);
// IronPDF
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;IRON VB CONVERTER ERROR developers@ironsoftware.comEdición 3: Objeto PageMargins no encontrado
Problema: la clase Margenes de páginano existe en IronPDF.
Solución: Utilizar propiedades de márgenes individuales:
// NReco PDF Generator
converter.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };
// IronPDF
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;// NReco PDF Generator
converter.Margins = new PageMargins { Top = 10, Bottom = 10, Left = 10, Right = 10 };
// IronPDF
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;IRON VB CONVERTER ERROR developers@ironsoftware.comCuestión 4: Los números de página no aparecen
Problema: los marcadores de posición <código>[página]</código>y [topage]no funcionan.
Solución: Actualización de la sintaxis de los marcadores de posición de IronPDF:
// NReco PDF Generator
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";
// IronPDF
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div>Page {page} of {total-pages}</div>",
MaxHeight = 20
};// NReco PDF Generator
converter.PageFooterHtml = "<div>Page [page] of [topage]</div>";
// IronPDF
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div>Page {page} of {total-pages}</div>",
MaxHeight = 20
};IRON VB CONVERTER ERROR developers@ironsoftware.comLista de comprobación de la migración
Pre-Migración
- [Inventario de todos los usos de
NReco.PdfGeneratoren codebase - [ ] Documente todos los valores de
CustomWkHtmlArgsyCustomWkHtmlPageArgs - [ ] Lista de todas las plantillas HTML de encabezado/pie de página con marcadores de posición
- [ ] Identificar requisitos asíncronos (controladores web, servicios)
- [ ] Revisar la configuración del zoom y los márgenes
- [ ] Copia de seguridad de los resultados PDF existentes para su comparación
- [ ] Obtener la clave de licencia de IronPDF
Cambios en el paquete
- [ ] Eliminar el paquete NuGet
NReco.PdfGenerator - [Instale el paquete NuGet
IronPdf:dotnet add package IronPdf - [Actualizar las importaciones de espacios de nombres de
using NReco.PdfGenerator;ausing IronPDF;
Cambios de código
- [ ] Añadir configuración de clave de licencia al inicio
- [Reemplace <código>HtmlToPdfConverter</códigopor
ChromePdfRenderer - [Reemplace <código>GenerarPdf(html)</código>por
RenderHtmlAsPdf(html) - [ ] Sustituya
GeneratePdfFromFile(url, null)porRenderUrlAsPdf(url) - [ ] Convertir el objeto
Margenes de páginaen propiedades de margen individuales - [ ] Actualizar valores de zoom de flotante a porcentaje
- [ ] Actualizar la sintaxis de los marcadores de posición: <código>[página]</código>→
{page},[topage]→{total-pages} - [Reemplace
File.WriteAllBytes()porpdf.SaveAs() - [ ] Convertir llamadas sync en async cuando sea beneficioso
Posmigración
- [ ] Eliminar los binarios wkhtmltopdf del proyecto/implantación
- [ ] Actualizar archivos Docker para eliminar la instalación de wkhtmltopdf
- [ ] Ejecutar pruebas de regresión comparando la salida PDF
- [ ] Comprobar que los marcadores de posición de encabezado/pie de página se muestran correctamente
- [ ] Prueba en todas las plataformas de destino (Windows, Linux, macOS)
- [Actualizar el proceso CI/CD para eliminar los pasos wkhtmltopdf
- [ ] Actualización del análisis de seguridad para confirmar la eliminación de CVE
Conclusión
La migración de Generador de PDF de NRecoaIronPDFaborda vulnerabilidades de seguridad críticas a la vez que actualiza su motor de renderizado de un Qt WebKit 2012 obsoleto a una solución moderna basada en Chromium. La migración elimina más de 20 CVE que no pueden parchearse, añade compatibilidad total con CSS3 y ES6+ JavaScript, elimina dependencias binarias externas y permite patrones async/await para mejorar el rendimiento de las aplicaciones web.
Los cambios clave en esta migración son:
- Seguridad: 20+ CVEs eliminados → Actualizaciones de seguridad activas
- Renderización: WebKit Qt (2012)→ Chromium (actual)
- Dependencias: wkhtmltopdf externo → Autónomo
- Async: Solo síncrono → Async/await completo
- Clase: <código>HtmlToPdfConverter</código→
ChromePdfRenderer - Margenes:
Objeto PageMargins→ Propiedades individuales - Placeholders:
[page]/[topage]→{page}/{total-pages}
Explore la documentación completa de IronPDF, tutoriales y referencia de API para acelerar su migración al Generador de PDF de NReco.






