Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de Winnovative vers IronPDF en C#

Winnovative est un nom reconnu dans l'espace de génération de PDF .NET, offrant des capacités de conversion HTML vers PDF pour les applications C#. Cependant, la dépendance de la bibliothèque à l'égard d'un moteur WebKit datant de 2016 pose d'importants problèmes pour le développement web moderne. Les fonctionnalités CSS contemporaines telles que la mise en page Grid, la syntaxe JavaScript moderne et les frameworks populaires tels que Bootstrap 5 et Tailwind CSS ne s'affichent souvent pas correctement, voire pas du tout.

Ce guide fournit un chemin de migration complet de Winnovativeà IronPDF, avec des instructions étape par étape, des comparaisons de code et des exemples pratiques pour les développeurs .NET professionnels qui évaluent cette transition.

Pourquoi migrer de Winnovative

Winnovative s'appuie sur un moteur WebKit datant de 2016 qui pose de sérieux problèmes pour les applications web modernes :

Aucune prise en charge de CSS Grid : Bootstrap 5, Tailwind CSS et les mises en page modernes sont complètement incompatibles. Toute page utilisant la grille CSS ne s'affichera pas comme prévu.

Implémentation Flexbox défectueuse : rendu incohérent par rapport aux navigateurs modernes. Les développeurs passent souvent des heures à résoudre des problèmes de mise en page qui n'existent que dans Winnovative.

JavaScript ES5 uniquement : les fonctionnalités JavaScript ES6+ modernes (fonctions fléchées, async/await, classes) échouent silencieusement. Cela signifie que React, Vue et d'autres frameworks modernes produisent souvent des résultats erronés.

Développement stagnant : malgré le terme " Winnovative " qui suggère l'innovation, le produit n'a connu que des mises à jour minimales ces dernières années.

Problèmes d'affichage des polices : les polices Web et la typographie personnalisée s'affichent souvent incorrectement, voire pas du tout.

Problèmes de sécurité : Un moteur WebKit datant de 2016 ne bénéficie pas de plusieurs années de correctifs de sécurité et de mises à jour de vulnérabilités.

Impact sur le monde réel

Les feuilles de style CSS et JavaScript modernes ne fonctionnent tout simplement pas dans 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>
HTML

IronPDF vs Winnovative: Comparaison des fonctionnalités

La compréhension des différences architecturales aide les décideurs techniques à évaluer l'investissement dans la migration :

Aspect Winnovative IronPDF
Moteur de rendu WebKit (2016) Chromium (actuel)
CSS Grid Non pris en charge Prise en charge complète
Flexbox Buggy Prise en charge complète
JavaScript ES5 uniquement ES2024
Bootstrap 5 Rupture Prise en charge complète
Tailwind CSS Non pris en charge Prise en charge complète
React/Vue SSR Problématique Fonctionne parfaitement
Fontes Web Peu fiable Prise en charge complète
Mises à jour Peu fréquents Mensuel
Prix $750-$1,600 Compétitif

Démarrage rapide : Migration de Winnovative vers IronPDF

La migration peut commencer immédiatement grâce à ces étapes fondamentales.

Étape 1 : Remplacer les paquets NuGet

Supprimez tous les paquets 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
SHELL

Installez IronPDF :

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

Étape 2 : Mise à jour des espaces de noms

Remplacer les espaces de noms Winnovative par l'espace de noms 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

Étape 3 : initialisation de la licence

Ajouter l'initialisation de la licence au démarrage de l'application :

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Exemples de migration de code

Conversion de HTML en PDF

Le cas d'utilisation le plus courant démontre les différences d'API entre ces bibliothèques PDF .NET.

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

Approche 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 nécessite la création d'un objet HtmlToPdfConverter, la définition d'une clé de licence sur l'instance, l'appel de ConvertHtml() avec un paramètre d'URL de base vide, la réception des octets bruts et l'écriture manuelle dans un fichier.IronPDFsimplifie ce processus : créez un objet ChromePdfRenderer, appelez RenderHtmlAsPdf() et utilisez la méthode intégrée SaveAs().

Pour les scénarios avancés de conversion de HTML en PDF, voir le guide de conversion de HTML en PDF.

Conversion des URL en PDF

La conversion d'URL en PDF présente des caractéristiques similaires.

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

Approche 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 utilise ConvertUrl() renvoyant des octets qui doivent être enregistrés manuellement.IronPDFfournit RenderUrlAsPdf() avec un objet PdfDocument qui inclut SaveAs() pour plus de commodité.

Explorez la URL vers la documentation PDF pour l'authentification et les options d'en-tête personnalisées.

Ajouter des en-têtes et des pieds de page

Les en-têtes et les pieds de page révèlent des différences architecturales significatives. Winnovativeutilise une approche programmatique basée sur des éléments avec des objets TextElement, tandisIronPDFutilise des en-têtes basés sur HTML avec des jetons d'espace réservé.

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

Approche 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 nécessite l'activation des en-têtes/pieds de page via PdfDocumentOptions.ShowHeader, la définition des hauteurs, la création d'objets TextElement avec des positions de coordonnées et d'objets System.Drawing.Font, et l'utilisation d'espaces réservés &p; et &P;.IronPDFutilise des objets TextHeaderFooter avec des propriétés simples comme CenterText et FontSize, et des espaces réservés intuitifs comme {page} et {total-pages}.

Pour les en-têtes basés sur HTML avec un style CSS complet, voir la documentation sur les en-têtes et les pieds de page.

Référence de mappage de l'API Winnovative vers IronPDF

Cette cartographie accélère la migration en indiquant les équivalents directs des API :

Classe Winnovative Équivalent d'IronPDF
HtmlToPdfConverter ChromePdfRenderer
PdfDocument PdfDocument
PdfDocumentOptions RenderingOptions
PdfHeaderOptions HtmlHeaderFooter
PdfFooterOptions HtmlHeaderFooter
TextElement HTML dans HtmlFragment
ImageElement HTML <img>

Mise en correspondance des méthodes

Méthode Winnovative Méthode 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)

Cartographie des options

Option Winnovative Option 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 Définir la propriété HtmlHeader
ShowFooter = true Définir la propriété HtmlFooter
JavaScriptEnabled = true EnableJavaScript = true
Numéro de page &p; Numéro de page {page}
Nombre total de pages &P; Nombre total de pages {total-pages}

Problèmes de migration courants et solutions

Enjeu 1 : Les mises en page CSS ont une apparence différente

Symptôme: Les mises en page qui semblaient "correctes" dans Winnovativeont désormais un aspect différent dans IronPDF.

Cause: Le WebKit 2016 de Winnovativeprésentait des bogues de rendu que les développeurs ont contournés.IronPDFassure un rendu correct conformément aux normes modernes.

Solution:Supprimez les hacks CSS spécifiques à Winnovativeet utilisez le CSS standard :

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

Sujet 2 : JavaScript ne s'exécute pas

Symptôme: Le contenu dynamique n'apparaît pas dans le PDF.

Cause:Nécessité de configurer les options d'attente JavaScript de manière explicite.

Solution:

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

Sujet 3 : L'URL de base ne fonctionne pas

Symptôme: Les URL relatives pour les images et les CSS ne se résolvent pas.

Cause:IronPDFa besoin d'une configuration explicite de l'URL de base.

Solution:

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

Edition 4 : Différents sauts de page

Symptôme: Le contenu s'interrompt à différents endroits par rapport à Winnovative.

Cause: Les moteurs de rendu traitent différemment les sauts de page.

Solution: Utiliser des contrôles de saut de page CSS explicites :

/* Control page breaks explicitly */
.no-break {
    page-break-inside: avoid;
}
.page-break-before {
    page-break-before: always;
}
.page-break-after {
    page-break-after: always;
}

Edition 5 : Les polices de caractères sont différentes

Symptôme: Le texte apparaît dans des polices différentes de celles prévues.

Cause:IronPDFutilise des polices de caractères système ; les polices web nécessitent un chargement explicite.

Solution:

<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

Liste de contrôle de la migration Winnovative

Tâches préalables à la migration

Auditez votre base de code pour identifier tous les usages 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" .
SHELL

Documenter les configurations actuelles, y compris la taille des pages, les marges et les paramètres d'en-tête et de pied de page. Identifier les solutions de contournement CSS (préfixes webkit, grilles flottantes) qui peuvent être supprimées. Veuillez noter les exigences de compatibilité JavaScript.

Tâches de mise à jour du code

  1. Supprimer les paquets NuGet de Winnovative
  2. Installer le paquet NuGet IronPDF
  3. Mettez à jour toutes les importations d'espace de noms de Winnovative à IronPdf
  4. Remplacez HtmlToPdfConverter par ChromePdfRenderer
  5. Convertir les appels ConvertHtml() en RenderHtmlAsPdf()
  6. Convertir les appels ConvertUrl() en RenderUrlAsPdf()
  7. Mettez à jour les paramètres de taille/orientation de la page à RenderingOptions
  8. Convertir les configurations de marge
  9. Migrer les en-têtes/pieds de page basés sur TextElement vers des en-têtes/pieds de page basés sur HTML TextHeaderFooter
  10. Mettre à jour les espaces réservés aux numéros de page de &P; à {total-pages}
  11. Ajouter l'initialisation de la licenceIronPDFau démarrage

Test de post-migration

Après la migration, vérifiez ces aspects :

  • Tester la conversion de base de HTML en PDF
  • Test de conversion d'URL en PDF
  • Vérifier que les grilles CSS s'affichent correctement (elles fonctionneront désormais)
  • Vérifier que les mises en page Flexbox s'affichent correctement (elles fonctionneront désormais)
  • Testez les pages à forte teneur en JavaScript avec la syntaxe moderne ES6
  • Vérifier la compatibilité avec Bootstrap 5
  • Test du rendu de l'en-tête/du pied de page
  • Vérifier les sauts de page
  • Comparer la qualité de sortie des PDF

Tâches de nettoyage

  • Supprimer les solutions de contournement CSS de Winnovative(préfixes webkit)
  • Mise à jour du JavaScript ES5 vers une syntaxe moderne
  • Suppression de la grille à base de flotteurs
  • Mise à jour de la documentation

Avantages clés de la migration vers IronPDF

Le passage de Winnovative à IronPDF présente plusieurs avantages décisifs :

Moteur de rendu moderne :IronPDFutilise le moteur Chromium actuel, garantissant une prise en charge complète de CSS3, CSS Grid, Flexbox et JavaScript ES2024. Les cadres modernes tels que Bootstrap 5, Tailwind CSS et React/Vue sont correctement rendus.

API simplifiée : les en-têtes et pieds de page basés sur HTML remplacent le positionnement programmatique TextElement. Des espaces réservés intuitifs comme {page} remplacent la syntaxe obscure &p;. Les méthodes intégrées SaveAs() éliminent la gestion manuelle des octets.

Développement actif : Avec l'adoption croissante de .NET 10 et C# 14 jusqu'en 2026, les mises à jour mensuelles d'IronPDF garantissent la compatibilité avec les versions actuelles et futures de .NET .

CSS moderne sans solutions de contournement : CSS Grid, Flexbox et la typographie moderne fonctionnent sans préfixes Webkit ni solutions de repli basées sur les flottants.

JavaScript moderne : les fonctionnalités ES6+, notamment les fonctions fléchées, async/await, les classes et les modules, s'exécutent correctement.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi