Ir para o conteúdo do rodapé
GUIAS DE MIGRAçãO

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 biblioteca clássica de longa data depende de um mecanismo de renderização proprietário mais antigo, e seu suporte para CSS moderno (Grid, Flexbox recente) e JavaScript moderno (ES2017+) é inconsistente comparado a um navegador Chromium atual. A resposta do fornecedor tem sido enviar um produto de classe Chromium separado, Winnovative.Pdf.Next, em vez de atualizar o Classic no local — o que significa que os clientes existentes da Winnovative enfrentam uma migração de código de qualquer maneira.

Este guia fornece um caminho 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 avaliando essa transição.

Por que migrar da Winnovative?

A biblioteca Classic da Winnovative usa um motor proprietário mais antigo que não foi atualizado para os padrões web modernos:

Grid CSS / Flexbox moderno Inconsistente: Layouts que dependem do Grid CSS ou recursos recentes do Flexbox podem renderizar incorretamente comparado a um navegador Chromium atual.

Lacunas de Compatibilidade com JavaScript Moderno: Recursos ES2017+ (funções de flecha, async/await, classes) não são executados de forma confiável, o que afeta React, Vue e outras estruturas modernas.

Ritmo Lento: O motor clássico recebe atualizações de motor de renderização infrequentes; a resposta do fornecedor tem sido enviar o produto separado de classe Chromium Winnovative.Pdf.Next, deixando o Classic com recursos congelados.

Fardo de Migração de Dois Produtos: Mudar para Winnovative.Pdf.Next é em si uma reescrita — a API Next vive em um namespace diferente (Winnovative.Pdf.Next) e é binariamente incompatível com o Classic.

Casos Limite de Renderização de Fontes: Fontes web e tipografia personalizada às vezes são renderizados de forma diferente de um navegador moderno.

Impacto no mundo real

CSS e JavaScript modernos que podem renderizar de forma inconsistente no Winnovative Classic:


<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);
const result = await fetchData();
class Report { }
</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);
const result = await fetchData();
class Report { }
</script>
HTML

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 Classic IronPDF
Motor de renderização Motor proprietário mais antigo Cromo (Atual)
Grade CSS Inconsistente Suporte completo
Flexbox Inconsistente em casos extremos Suporte completo
JavaScript JS moderno limitado ES2024
Bootstrap 5 Problemas de layout Suporte completo
Tailwind CSS Limitado Suporte completo
React/Vue SSR Problemático Funciona
Fontes da Web Não confiável em algumas configurações Suporte completo
Atualizações Pouco frequente Mensal
Preços (por desenvolvedor) $450 Implantação / $1,200 Redistribuível See ironpdf.com/pricing

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 Winnovative (verifique quais seu projeto realmente usa):

# Remove Winnovative (Classic + related utilities)
dotnet remove package Winnovative.HtmlToPdf
# Also remove any of these your project references:
# dotnet remove package Winnovative.PdfMerge
# dotnet remove package Winnovative.PdfSecurity
# dotnet remove package Winnovative.Pdf.Next.Core
# dotnet remove package Winnovative.Client
# Remove Winnovative (Classic + related utilities)
dotnet remove package Winnovative.HtmlToPdf
# Also remove any of these your project references:
# dotnet remove package Winnovative.PdfMerge
# dotnet remove package Winnovative.PdfSecurity
# dotnet remove package Winnovative.Pdf.Next.Core
# dotnet remove package Winnovative.Client
SHELL

Instale o IronPDF:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

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

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

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.HtmlToPdf
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.HtmlToPdf
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
$vbLabelText   $csharpLabel

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

Winnovative requer criar um HtmlToPdfConverter, definir uma chave de licença na instância, chamar ConvertHtml() com um parâmetro de URL base vazio, receber bytes brutos e gravá-los manualmente em um arquivo.IronPDF simplifica isso: crie um ChromePdfRenderer, chame RenderHtmlAsPdf() e use o método embutido SaveAs().

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.HtmlToPdf
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.HtmlToPdf
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
$vbLabelText   $csharpLabel

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

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. Winnovative usa uma abordagem de elementos programáticos baseada em objetos TextElement, enquanto IronPDF usa cabeçalhos baseados em HTML com tokens de espaço reservado.

Abordagem inovadora da Winnovative:

// NuGet: Install-Package Winnovative.HtmlToPdf
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.HtmlToPdf
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
$vbLabelText   $csharpLabel

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

Winnovative requer a habilitação de cabeçalhos/rodapés através de PdfDocumentOptions.ShowHeader, definição de alturas, criação de objetos TextElement com posições de coordenadas e objetos System.Drawing.Font, e uso de espaços reservados &p; e &P;.IronPDF usa objetos TextHeaderFooter com propriedades simples como CenterText e FontSize e espaços reservados 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 Definir propriedade HtmlHeader
ShowFooter = true Definir propriedade HtmlFooter
JavaScriptEnabled = true EnableJavaScript = true
Número de página &p; Número de 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 motor proprietário mais antigo doWinnovative Classictem peculiaridades de renderização que os desenvolvedores contornaram. O motor Chromium atual do IronPDF renderiza essas corretamente.

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

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

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

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>
HTML

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" .
SHELL

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

  1. Remova os pacotes NuGet da Winnovative.
  2. Instale o pacote NuGet do IronPDF
  3. Atualize todas as importações de namespace de Winnovative para IronPdf
  4. Substitua HtmlToPdfConverter por ChromePdfRenderer
  5. Converta chamadas ConvertHtml() para RenderHtmlAsPdf()
  6. Converta chamadas ConvertUrl() para RenderUrlAsPdf()
  7. Atualize as configurações de tamanho/orientação da página para RenderingOptions
  8. Converter configurações de margem
  9. Migre cabeçalhos/rodapés baseados em TextElement para TextHeaderFooter baseados em HTML
  10. Atualize espaços reservados de número de página de &P; para {total-pages}
  11. 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
  • Verificar que layouts CSS Grid renderizam corretamente
  • Verificar que layouts Flexbox renderizam corretamente
  • 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. Espaços reservados intuitivos como {page} substituem a sintaxe obscura &p;. Métodos embutidos SaveAs() eliminam o manuseio manual de bytes.

Desenvolvimento Ativo: As atualizações mensais do IronPDF garantem 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.

ObserveWinnovative é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pela Winnovative Software. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de Suporte Iron

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim