Cómo migrar de Winnovative a IronPDF en C#
Winnovative ha sido un nombre reconocido en el espacio de generación de PDF .NET, ofreciendo capacidades de conversión de HTML a PDF para aplicaciones C#. Sin embargo, el hecho de que la biblioteca dependa de un motor WebKit de 2016 crea retos significativos para el desarrollo web moderno. Las funciones contemporáneas de CSS, como el diseño de cuadrícula, la sintaxis moderna de JavaScript y marcos populares como Bootstrap 5 y Tailwind CSS, a menudo no se muestran correctamente, o no se muestran en absoluto.
Esta guía proporciona una ruta de migración completa de Winnovativea IronPDF, con instrucciones paso a paso, comparaciones de código y ejemplos prácticos para desarrolladores .NET profesionales que estén evaluando esta transición.
Por qué migrar de Winnovative
Winnovative se basa en un motor WebKit de 2016 que crea graves problemas para las aplicaciones web modernas:
Sin compatibilidad con CSS Grid: Bootstrap 5, Tailwind CSS y los diseños modernos fallan por completo. Cualquier página que utilice CSS Grid no se renderizará como se espera.
Implementación de Flexbox con errores: representación inconsistente en comparación con los navegadores modernos. Los desarrolladores suelen pasar horas depurando problemas de diseño que solo existen en Winnovative.
Solo JavaScript ES5: las características modernas de JavaScript ES6+ (funciones de flecha, async/await, clases) fallan silenciosamente. Esto significa que React, Vue y otros frameworks modernos a menudo producen un resultado roto.
Desarrollo estancado: a pesar de que "Winnovative" sugiere innovación, el producto ha tenido actualizaciones mínimas en los últimos años.
Problemas de representación de fuentes: las fuentes web y la tipografía personalizada a menudo se representan incorrectamente o no se representan en absoluto.
Preocupaciones de seguridad: Un motor WebKit de la era 2016 carece de años de parches de seguridad y correcciones de vulnerabilidades.
Impacto en el mundo real
Los CSS y JavaScript modernos simplemente no funcionan en Winnovative:
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;">
<div>Column 1</div>
<div>Column 2</div>
<div>Column 3</div>
</div>
<script>
const items = data.map(item => item.name); // Arrow functions: FAIL
const result = await fetchData(); // Async/await: FAIL
class Report { } // Classes: FAIL
</script>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;">
<div>Column 1</div>
<div>Column 2</div>
<div>Column 3</div>
</div>
<script>
const items = data.map(item => item.name); // Arrow functions: FAIL
const result = await fetchData(); // Async/await: FAIL
class Report { } // Classes: FAIL
</script>
IronPDFfrente a Winnovative: 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 | Winnovative | IronPDF |
|---|---|---|
| Motor de renderizado | WebKit (2016) | Chromium (actual) |
| CSS Grid | No compatible | Soporte completo |
| Flexbox | Buggy | Soporte completo |
| JavaScript | Sólo ES5 | ES2024 |
| Bootstrap 5 | Broken | Soporte completo |
| Tailwind CSS | No compatible | Soporte completo |
| React/Vue SSR | Problemática | Funciona a la perfección |
| Fuentes web | Poco fiable | Soporte completo |
| Actualizaciones | Poco frecuente | Mensualmente |
| Precio | $750-$1,600 | Competencia |
Inicio rápido: Migración de Winnovativea IronPDF
La migración puede comenzar inmediatamente con estos pasos básicos.
Paso 1: Sustituir paquetes NuGet
Elimine todos los paquetes Winnovative:
# Remove Winnovative
dotnet remove package Winnovative.WebKitHtmlToPdf
dotnet remove package Winnovative.HtmlToPdf
dotnet remove package Winnovative.WebToPdfConverter
# Remove Winnovative
dotnet remove package Winnovative.WebKitHtmlToPdf
dotnet remove package Winnovative.HtmlToPdf
dotnet remove package Winnovative.WebToPdfConverter
Instalar IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Paso 2: Actualizar los espacios de nombres
Sustituya los espacios de nombres Winnovativepor el espacio de nombres IronPdf:
// Before (Winnovative)
using Winnovative;
using Winnovative.WebKit;
// After (IronPDF)
using IronPdf;
// Before (Winnovative)
using Winnovative;
using Winnovative.WebKit;
// After (IronPDF)
using IronPdf;
Imports IronPdf
Paso 3: 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
Convertir HTML a PDF
El caso de uso más común demuestra las diferencias de API entre estas bibliotecas PDF .NET.
Enfoque innovador:
// NuGet: Install-Package Winnovative.WebToPdfConverter
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package Winnovative.WebToPdfConverter
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("output.pdf", pdfBytes);
Console.WriteLine("PDF created successfully");
}
}
Imports Winnovative
Imports System
Module Program
Sub Main()
' Create the HTML to PDF converter
Dim htmlToPdfConverter As New HtmlToPdfConverter()
' Set license key
htmlToPdfConverter.LicenseKey = "your-license-key"
' Convert HTML string to PDF
Dim htmlString As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdfBytes As Byte() = htmlToPdfConverter.ConvertHtml(htmlString, "")
' Save to file
System.IO.File.WriteAllBytes("output.pdf", pdfBytes)
Console.WriteLine("PDF created successfully")
End Sub
End Module
Enfoque IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert HTML string to PDF
string htmlString = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
' Create a PDF renderer
Dim renderer As New ChromePdfRenderer()
' Convert HTML string to PDF
Dim htmlString As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
' Save to file
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
Winnovative requiere crear un HtmlToPdfConverter, establecer una clave de licencia en la instancia, llamar a ConvertHtml() con un parámetro de URL base vacío, recibir bytes sin procesar y escribir manualmente en un archivo.IronPDFsimplifica esto: crea un ChromePdfRenderer, llama a RenderHtmlAsPdf() y usa el método integrado 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 similares.
Enfoque innovador:
// NuGet: Install-Package Winnovative.WebToPdfConverter
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert URL to PDF
string url = "https://www.example.com";
byte[] pdfBytes = htmlToPdfConverter.ConvertUrl(url);
// Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL created successfully");
}
}
// NuGet: Install-Package Winnovative.WebToPdfConverter
using Winnovative;
using System;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Convert URL to PDF
string url = "https://www.example.com";
byte[] pdfBytes = htmlToPdfConverter.ConvertUrl(url);
// Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL created successfully");
}
}
Imports Winnovative
Imports System
Module Program
Sub Main()
' Create the HTML to PDF converter
Dim htmlToPdfConverter As New HtmlToPdfConverter()
' Set license key
htmlToPdfConverter.LicenseKey = "your-license-key"
' Convert URL to PDF
Dim url As String = "https://www.example.com"
Dim pdfBytes As Byte() = htmlToPdfConverter.ConvertUrl(url)
' Save to file
System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes)
Console.WriteLine("PDF from URL created successfully")
End Sub
End Module
Enfoque IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert URL to PDF
string url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
// Save to file
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Convert URL to PDF
string url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
// Save to file
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
' Create a PDF renderer
Dim renderer As New ChromePdfRenderer()
' Convert URL to PDF
Dim url As String = "https://www.example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
' Save to file
pdf.SaveAs("webpage.pdf")
Console.WriteLine("PDF from URL created successfully")
End Sub
End Class
Winnovative utiliza ConvertUrl() que devuelve bytes que deben guardarse manualmente.IronPDFproporciona a RenderUrlAsPdf() un objeto PdfDocument que incluye SaveAs() para mayor comodidad.
Explore la URL a la documentación PDF para conocer las opciones de autenticación y encabezado personalizado.
Añadir encabezados y pies de página
Los encabezados y pies de página revelan diferencias arquitectónicas significativas. Winnovativeutiliza un enfoque programático basado en elementos con objetos TextElement, mientras queIronPDFutiliza encabezados basados en HTML con tokens de marcador de posición.
Enfoque innovador:
// NuGet: Install-Package Winnovative.WebToPdfConverter
using Winnovative;
using System;
using System.Drawing;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Enable header
htmlToPdfConverter.PdfDocumentOptions.ShowHeader = true;
htmlToPdfConverter.PdfHeaderOptions.HeaderHeight = 60;
// Add header text
TextElement headerText = new TextElement(0, 0, "Document Header", new Font("Arial", 12));
htmlToPdfConverter.PdfHeaderOptions.AddElement(headerText);
// Enable footer
htmlToPdfConverter.PdfDocumentOptions.ShowFooter = true;
htmlToPdfConverter.PdfFooterOptions.FooterHeight = 60;
// Add footer with page number
TextElement footerText = new TextElement(0, 0, "Page &p; of &P;", new Font("Arial", 10));
htmlToPdfConverter.PdfFooterOptions.AddElement(footerText);
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("document.pdf", pdfBytes);
Console.WriteLine("PDF with header and footer created successfully");
}
}
// NuGet: Install-Package Winnovative.WebToPdfConverter
using Winnovative;
using System;
using System.Drawing;
class Program
{
static void Main()
{
// Create the HTML to PDF converter
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter();
// Set license key
htmlToPdfConverter.LicenseKey = "your-license-key";
// Enable header
htmlToPdfConverter.PdfDocumentOptions.ShowHeader = true;
htmlToPdfConverter.PdfHeaderOptions.HeaderHeight = 60;
// Add header text
TextElement headerText = new TextElement(0, 0, "Document Header", new Font("Arial", 12));
htmlToPdfConverter.PdfHeaderOptions.AddElement(headerText);
// Enable footer
htmlToPdfConverter.PdfDocumentOptions.ShowFooter = true;
htmlToPdfConverter.PdfFooterOptions.FooterHeight = 60;
// Add footer with page number
TextElement footerText = new TextElement(0, 0, "Page &p; of &P;", new Font("Arial", 10));
htmlToPdfConverter.PdfFooterOptions.AddElement(footerText);
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(htmlString, "");
// Save to file
System.IO.File.WriteAllBytes("document.pdf", pdfBytes);
Console.WriteLine("PDF with header and footer created successfully");
}
}
Imports Winnovative
Imports System
Imports System.Drawing
Module Program
Sub Main()
' Create the HTML to PDF converter
Dim htmlToPdfConverter As New HtmlToPdfConverter()
' Set license key
htmlToPdfConverter.LicenseKey = "your-license-key"
' Enable header
htmlToPdfConverter.PdfDocumentOptions.ShowHeader = True
htmlToPdfConverter.PdfHeaderOptions.HeaderHeight = 60
' Add header text
Dim headerText As New TextElement(0, 0, "Document Header", New Font("Arial", 12))
htmlToPdfConverter.PdfHeaderOptions.AddElement(headerText)
' Enable footer
htmlToPdfConverter.PdfDocumentOptions.ShowFooter = True
htmlToPdfConverter.PdfFooterOptions.FooterHeight = 60
' Add footer with page number
Dim footerText As New TextElement(0, 0, "Page &p; of &P;", New Font("Arial", 10))
htmlToPdfConverter.PdfFooterOptions.AddElement(footerText)
' Convert HTML to PDF
Dim htmlString As String = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>"
Dim pdfBytes As Byte() = htmlToPdfConverter.ConvertHtml(htmlString, "")
' Save to file
System.IO.File.WriteAllBytes("document.pdf", pdfBytes)
Console.WriteLine("PDF with header and footer created successfully")
End Sub
End Module
Enfoque IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Configure header and footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 12
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("document.pdf");
Console.WriteLine("PDF with header and footer created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Configure header and footer
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 12
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
// Convert HTML to PDF
string htmlString = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Save to file
pdf.SaveAs("document.pdf");
Console.WriteLine("PDF with header and footer created successfully");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
' Create a PDF renderer
Dim renderer As New ChromePdfRenderer()
' Configure header and footer
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.CenterText = "Document Header",
.FontSize = 12
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.CenterText = "Page {page} of {total-pages}",
.FontSize = 10
}
' Convert HTML to PDF
Dim htmlString As String = "<html><body><h1>Document with Header and Footer</h1><p>Content goes here</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
' Save to file
pdf.SaveAs("document.pdf")
Console.WriteLine("PDF with header and footer created successfully")
End Sub
End Module
Winnovative requiere habilitar encabezados y pies de página a través de PdfDocumentOptions.ShowHeader, establecer alturas, crear objetos TextElement con posiciones de coordenadas y objetos System.Drawing.Font, y usar marcadores de posición &p; y &P;.IronPDFutiliza objetos TextHeaderFooter con propiedades simples como CenterText y FontSize, y marcadores de posición intuitivos como {page} y {total-pages}.
Para obtener cabeceras basadas en HTML con estilo CSS completo, consulte la documentación cabeceras y pies de página.
Referencia de mapeo de API innovadora a IronPDF
Este mapeo acelera la migración al mostrar los equivalentes directos de las API:
| Clase Winnovative | Equivalente de IronPDF |
|---|---|
HtmlToPdfConverter |
ChromePdfRenderer |
PdfDocument |
PdfDocument |
PdfDocumentOptions |
RenderingOptions |
PdfHeaderOptions |
HtmlHeaderFooter |
PdfFooterOptions |
HtmlHeaderFooter |
TextElement |
HTML en HtmlFragment |
ImageElement |
HTML <img> |
Métodos
| Método Winnovative | Método IronPDF |
|---|---|
ConvertUrl(url) |
RenderUrlAsPdf(url) |
ConvertUrlToFile(url, path) |
RenderUrlAsPdf(url).SaveAs(path) |
ConvertHtml(html, baseUrl) |
RenderHtmlAsPdf(html) |
ConvertHtmlToFile(html, path) |
RenderHtmlAsPdf(html).SaveAs(path) |
ConvertHtmlFile(path) |
RenderHtmlFileAsPdf(path) |
MergePdf(streams) |
PdfDocument.Merge(pdfs) |
AppendPdf(pdf) |
pdf1.AppendPdf(pdf2) |
Mapeo de opciones
| Opción Winnovative | Opción IronPDF |
|---|---|
PdfPageSize.A4 |
PaperSize = PdfPaperSize.A4 |
PdfPageSize.Letter |
PaperSize = PdfPaperSize.Letter |
PdfPageOrientation.Portrait |
PaperOrientation = PdfPaperOrientation.Portrait |
PdfPageOrientation.Landscape |
PaperOrientation = PdfPaperOrientation.Landscape |
TopMargin = 20 |
MarginTop = 20 |
BottomMargin = 20 |
MarginBottom = 20 |
LeftMargin = 15 |
MarginLeft = 15 |
RightMargin = 15 |
MarginRight = 15 |
ShowHeader = true |
Establecer la propiedad HtmlHeader |
ShowFooter = true |
Establecer la propiedad HtmlFooter |
JavaScriptEnabled = true |
EnableJavaScript = true |
Número de página &p; |
Número de página {page} |
Total de páginas &P; |
Páginas totales {total-pages} |
Problemas comunes de migración y soluciones
Cuestión 1: Los diseños CSS se ven diferentes
Síntoma: Los diseños que se veían "bien" en Winnovativeahora se ven diferentes en IronPDF.
Causa: El WebKit de Winnovativede 2016 tenía errores de renderización que los desarrolladores solucionaron.IronPDFrenderiza correctamente según los estándares modernos.
Solución: Eliminar los trucos CSS específicos de Winnovativey utilizar CSS estándar:
// Clean up legacy CSS
string cleanedHtml = html
.Replace("-webkit-flex", "flex")
.Replace("display: -webkit-box", "display: flex");
// Clean up legacy CSS
string cleanedHtml = html
.Replace("-webkit-flex", "flex")
.Replace("display: -webkit-box", "display: flex");
Dim cleanedHtml As String = html _
.Replace("-webkit-flex", "flex") _
.Replace("display: -webkit-box", "display: flex")
Asunto 2: JavaScript no se ejecuta
Síntoma: El contenido dinámico no aparece en el PDF.
Causa: Necesidad de configurar explícitamente las opciones de espera de JavaScript.
Solución:
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.JavaScript(5000);
// Or wait for specific element
renderer.RenderingOptions.WaitFor.HtmlElementById("content-ready", 10000);
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.JavaScript(5000);
// Or wait for specific element
renderer.RenderingOptions.WaitFor.HtmlElementById("content-ready", 10000);
Asunto 3: La URL base no funciona
Síntoma: Las URL relativas para imágenes y CSS no se resuelven.
Causa:IronPDFnecesita una configuración explícita de la URL base.
Solución:
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = New Uri("https://example.com/")
Edición 4: Diferentes saltos de página
Síntoma: Rotura del contenido en puntos diferentes a Winnovative.
Causa: Los distintos motores de renderizado gestionan los saltos de página de forma diferente.
Solución: Utilizar controles de salto de página CSS explícitos:
/* Control page breaks explicitly */
.no-break {
page-break-inside: avoid;
}
.page-break-before {
page-break-before: always;
}
.page-break-after {
page-break-after: always;
}
Edición 5: Las fuentes tienen otro aspecto
Síntoma: El texto aparece en fuentes diferentes a las esperadas.
Causa:IronPDFutiliza fuentes del sistema; las fuentes web necesitan carga explícita.
Solución:
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body {
font-family: 'Roboto', Arial, sans-serif;
}
</style>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body {
font-family: 'Roboto', Arial, sans-serif;
}
</style>
Lista de comprobación de la migración innovadora
Tareas previas a la migración
Audite su código base para identificar todos los usos de Winnovative:
# Find all Winnovativereferences
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
# Find all Winnovativereferences
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
Documente las configuraciones actuales, incluidos los tamaños de página, los márgenes y los ajustes de encabezado/pie de página. Identificar las soluciones de CSS (prefijos webkit, cuadrículas basadas en flotadores) que pueden eliminarse. Tenga en cuenta los requisitos de compatibilidad con JavaScript.
Tareas de actualización de código
- Eliminar paquetes NuGet de Winnovative
- Instalación del paquete IronPdf NuGet
- Actualice todas las importaciones de espacios de nombres de
WinnovativeaIronPdf - Reemplace
HtmlToPdfConverterconChromePdfRenderer - Convierte las llamadas
ConvertHtml()aRenderHtmlAsPdf() - Convierte las llamadas
ConvertUrl()aRenderUrlAsPdf() - Actualice la configuración de tamaño y orientación de la página a
RenderingOptions - Convertir configuraciones de márgenes
- Migrar encabezados/pies de página basados en
TextElementaTextHeaderFooterbasados en HTML - Actualizar los marcadores de posición de número de página de
&P;a{total-pages} - Añadir la inicialización de la licenciaIronPDFal inicio
Pruebas posteriores a la migración
Tras la migración, verifique estos aspectos:
- Prueba de conversión básica de HTML a PDF
- Prueba de conversión de URL a PDF
- Verificar que los diseños CSS Grid se muestran correctamente (ahora funcionarán)
- Comprobar que los diseños Flexbox se muestran correctamente (ahora funcionarán)
- Pruebe páginas con mucho JavaScript con la moderna sintaxis ES6
- Verificar la compatibilidad con Bootstrap 5
- Prueba de renderizado de encabezado/pie de página
- Verificación de los saltos de página
- Comparar la calidad de salida de PDF
Tareas de limpieza
- Eliminación de los prefijos webkit (Winnovative CSS workarounds)
- Actualizar ES5 JavaScript a la sintaxis moderna
- Eliminar los errores de cuadrícula basados en flotantes
- Actualización de la documentación
Beneficios clave de migrar a IronPDF
El cambio de WinnovativeaIronPDFofrece varias ventajas fundamentales:
Motor de renderizado moderno:IronPDFutiliza el motor Chromium actual, lo que garantiza compatibilidad total con CSS3, CSS Grid, Flexbox y JavaScript ES2024. Los frameworks modernos como Bootstrap 5, Tailwind CSS y React/Vue se traducen correctamente.
API simplificada: los encabezados y pies de página basados en HTML reemplazan el posicionamiento programático TextElement. Los marcadores de posición intuitivos como {page} reemplazan la sintaxis oscura &p;. Los métodos SaveAs() integrados eliminan el manejo manual de bytes.
Desarrollo activo: a medida que aumenta la adopción de .NET 10 y C# 14 hasta 2026, las actualizaciones mensuales deIronPDFgarantizan la compatibilidad con las versiones actuales y futuras de .NET .
CSS moderno sin soluciones alternativas: CSS Grid, Flexbox y la tipografía moderna funcionan sin prefijos webkit ni alternativas basadas en flotantes.
JavaScript moderno: las características de ES6+, incluidas las funciones de flecha, async/await, clases y módulos, se ejecutan correctamente.

