Como migrar do Winnovative para o IronPDF em C#
A Winnovative é um nome reconhecido na área de geração de PDFs em .NET , oferecendo recursos de conversão de HTML para PDF para aplicativos C#. No entanto, a dependência da biblioteca em um mecanismo WebKit de 2016 cria desafios significativos para o desenvolvimento web moderno. Recursos contemporâneos do CSS, como o layout em grade, a sintaxe moderna do JavaScript e frameworks populares como Bootstrap 5 e Tailwind CSS, muitas vezes não são renderizados corretamente — ou sequer são renderizados.
Este guia fornece um caminho completo de migração do Winnovative para o IronPDF, com instruções passo a passo, comparações de código e exemplos práticos para desenvolvedores .NET profissionais que estejam avaliando essa transição.
Por que migrar da Winnovative?
A Winnovative utiliza um mecanismo WebKit de 2016 que cria sérios problemas para aplicações web modernas:
Sem suporte para CSS Grid: Bootstrap 5, Tailwind CSS e layouts modernos param de funcionar completamente. Qualquer página que utilize CSS Grid não será renderizada como esperado.
Implementação Flexbox com bugs: renderização inconsistente em comparação com navegadores modernos. Os desenvolvedores frequentemente passam horas depurando problemas de layout que só existem no Winnovative.
Somente JavaScript ES5: Recursos modernos do JavaScript ES6+ (funções de seta, async/await, classes) falham silenciosamente. Isso significa que React, Vue e outros frameworks modernos frequentemente produzem resultados com problemas.
Desenvolvimento estagnado: Apesar de "Winnovative" sugerir inovação, o produto recebeu atualizações mínimas nos últimos anos.
Problemas de renderização de fontes: fontes da web e tipografia personalizada frequentemente são renderizadas incorretamente ou não são renderizadas.
Preocupações com a segurança: Um mecanismo WebKit da era de 2016 carece de anos de patches de segurança e correções de vulnerabilidades.
Impacto no mundo real
CSS e JavaScript modernos simplesmente não funcionam no 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>
IronPDF vs Winnovative: Comparação de Recursos
Compreender as diferenças arquitetônicas ajuda os responsáveis pelas decisões técnicas a avaliar o investimento em migração:
| Aspecto | Winnovative | IronPDF |
|---|---|---|
| Motor de renderização | WebKit (2016) | Cromo (Atual) |
| Grade CSS | Não suportado | Suporte completo |
| Flexbox | Buggy | Suporte completo |
| JavaScript | Somente ES5 | ES2024 |
| Bootstrap 5 | Quebrado | Suporte completo |
| Tailwind CSS | Não suportado | Suporte completo |
| React/Vue SSR | Problemático | Funciona perfeitamente |
| Fontes da Web | Não confiável | Suporte completo |
| Atualizações | Pouco frequente | Mensal |
| Preço | $750-$1.600 | Competitivo |
Guia rápido: Migração do Winnovative para o IronPDF
A migração pode começar imediatamente com esses passos fundamentais.
Passo 1: Substituir pacotes NuGet
Remover todos os pacotes da 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
Instale o IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Etapa 2: Atualizar Namespaces
Substitua os namespaces Winnovative pelo namespace 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
Etapa 3: Inicializar a licença
Adicionar inicialização de licença na inicialização do aplicativo:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Exemplos de migração de código
Converter HTML para PDF
O caso de uso mais comum demonstra as diferenças de API entre essas bibliotecas PDF for .NET .
Abordagem inovadora da Winnovative:
// 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
Abordagem 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
O Winnovative exige a criação de um HtmlToPdfConverter, a configuração de uma chave de licença na instância, a chamada de ConvertHtml() com um parâmetro de URL base vazio, o recebimento de bytes brutos e a gravação manual em um arquivo. O IronPDF simplifica isso: crie um ChromePdfRenderer, chame RenderHtmlAsPdf() e use o método SaveAs() integrado.
Para cenários avançados de conversão de HTML para PDF, consulte o guia de conversão de HTML para PDF .
Converter URLs em PDF
A conversão de URL para PDF apresenta padrões semelhantes.
Abordagem inovadora da Winnovative:
// 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
Abordagem 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
A Winnovative usa ConvertUrl() retornando bytes que devem ser salvos manualmente. IronPDF fornece RenderUrlAsPdf() com um objeto PdfDocument que inclui SaveAs() para conveniência.
Consulte a documentação sobre URLs para PDF para obter informações sobre autenticação e opções de cabeçalho personalizadas.
Adicionando cabeçalhos e rodapés
Os cabeçalhos e rodapés revelam diferenças arquitetônicas significativas. O Winnovative utiliza uma abordagem programática baseada em elementos com objetos TextElement, enquanto o IronPDF utiliza cabeçalhos baseados em HTML com marcadores de posição.
Abordagem inovadora da Winnovative:
// 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
Abordagem 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
O Winnovative requer a ativação de cabeçalhos/rodapés através de PdfDocumentOptions.ShowHeader, definindo alturas, criando objetos TextElement com posições de coordenadas e objetos System.Drawing.Font, e usando marcadores de posição &p; e &P;. O IronPDF usa objetos TextHeaderFooter com propriedades simples como CenterText e FontSize, e marcadores intuitivos como {page} e {total-pages}.
Para cabeçalhos baseados em HTML com estilo CSS completo, consulte a documentação de cabeçalhos e rodapés .
Referência de mapeamento da API Winnovative para o IronPDF
Este mapeamento acelera a migração ao mostrar equivalentes diretos da API:
| Classe inovadora Win | Equivalente ao IronPDF |
|---|---|
HtmlToPdfConverter |
ChromePdfRenderer |
PdfDocument |
PdfDocument |
PdfDocumentOptions |
RenderingOptions |
PdfHeaderOptions |
HtmlHeaderFooter |
PdfFooterOptions |
HtmlHeaderFooter |
TextElement |
HTML em HtmlFragment |
ImageElement |
HTML <img> |
Mapeamento de 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) |
Mapeamento de opções
| Opção inovadora Win | Opção 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 |
Defina a propriedade HtmlHeader |
ShowFooter = true |
Defina a propriedade HtmlFooter |
JavaScriptEnabled = true |
EnableJavaScript = true |
Número da página &p; |
Número da página {page} |
Total de páginas &P; |
Total de páginas {total-pages} |
Problemas e soluções comuns em migrações
Problema 1: Os layouts CSS têm aparência diferente
Sintoma: Layouts que pareciam "normais" no Winnovative agora parecem diferentes no IronPDF.
Causa: O WebKit de 2016 da Winnovative apresentava bugs de renderização que os desenvolvedores contornaram. O IronPDF renderiza corretamente de acordo com os padrões modernos.
Solução: Remova as alterações de CSS específicas da Winnovative e use CSS padrão:
// 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")
Problema 2: JavaScript não está sendo executado
Sintoma: Conteúdo dinâmico não aparece no PDF.
Causa: É necessário configurar explicitamente as opções de espera do JavaScript .
Solução:
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);
Problema 3: URL base não funciona
Sintoma: URLs relativas para imagens e CSS não estão sendo resolvidas.
Causa: O IronPDF requer configuração explícita da URL base.
Solução:
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = New Uri("https://example.com/")
Edição 4: Quebras de página diferentes
Sintoma: Conteúdo apresentando problemas em pontos diferentes dos da Winnovative.
Causa: Diferentes mecanismos de renderização lidam com quebras de página de maneiras diferentes.
Solução: Utilize controles de quebra 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;
}
Problema 5: As fontes parecem diferentes
Sintoma: O texto aparece com fontes diferentes das esperadas.
Causa: O IronPDF utiliza fontes do sistema; As fontes da web precisam ser carregadas explicitamente.
Solução:
<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 verificação de migração inovadora da Winnovative
Tarefas pré-migração
Faça uma auditoria em sua base de código para identificar todos os usos do Winnovative:
# Find all Winnovative references
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
# Find all Winnovative references
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
Documente as configurações atuais, incluindo tamanhos de página, margens e configurações de cabeçalho/rodapé. Identificar soluções alternativas de CSS (prefixos do Webkit, grids baseados em floats) que podem ser removidas. Observe os requisitos de compatibilidade com JavaScript .
Tarefas de atualização de código
- Remova os pacotes NuGet da Winnovative.
- Instale o pacote NuGet IronPDF
- Atualize todas as importações de namespace de
WinnovativeparaIronPdf - Substitua
HtmlToPdfConverterporChromePdfRenderer - Converter chamadas
ConvertHtml()paraRenderHtmlAsPdf() - Converter chamadas
ConvertUrl()paraRenderUrlAsPdf() - Atualize as configurações de tamanho/orientação da página para
RenderingOptions - Converter configurações de margem
- Migrar cabeçalhos/rodapés baseados em
TextElementpara cabeçalhos/rodapés baseados em HTMLTextHeaderFooter - Atualize os marcadores de página de
&P;para{total-pages} - Adicionar inicialização da licença do IronPDF na inicialização do sistema.
Testes pós-migração
Após a migração, verifique os seguintes aspectos:
- Teste básico de conversão de HTML para PDF
- Teste de conversão de URL para PDF
- Verifique se os layouts do CSS Grid estão sendo renderizados corretamente (agora eles funcionarão).
- Verifique se os layouts Flexbox estão sendo renderizados corretamente (agora eles funcionarão).
- Teste páginas com uso intensivo de JavaScript usando a sintaxe moderna ES6+.
- Verificar compatibilidade com Bootstrap 5
- Testar a renderização do cabeçalho/rodapé
- Verificar quebras de página
- Comparar a qualidade de saída do PDF
Tarefas de limpeza
- Remover soluções alternativas de CSS da Winnovative (prefixos webkit)
- Atualizar o JavaScript ES5 para a sintaxe moderna
- Remover alternativas de grade baseadas em ponto flutuante
- Atualizar documentação
Principais benefícios da migração para o IronPDF
A migração do Winnovative para o IronPDF oferece diversas vantagens cruciais:
Mecanismo de renderização moderno: O IronPDF utiliza o mecanismo Chromium atual, garantindo suporte completo a CSS3, CSS Grid, Flexbox e JavaScript ES2024. Frameworks modernos como Bootstrap 5, Tailwind CSS e React/Vue são renderizados corretamente.
API simplificada: cabeçalhos e rodapés baseados em HTML substituem o posicionamento programático TextElement. Marcadores intuitivos como {page} substituem a sintaxe obscura &p;. Os métodos integrados SaveAs() eliminam o manuseio manual de bytes.
Desenvolvimento ativo: À medida que a adoção do .NET 10 e do C# 14 aumenta até 2026, as atualizações mensais do IronPDF garantem a compatibilidade com as versões atuais e futuras do .NET .
CSS moderno sem gambiarras: CSS Grid, Flexbox e tipografia moderna funcionam sem prefixos do WebKit ou alternativas baseadas em float.
JavaScript moderno: os recursos do ES6+, incluindo funções de seta, async/await, classes e módulos, são executados corretamente.

