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>
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
Installez IronPDF :
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
É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
É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"
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
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
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
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
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
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
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")
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);
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/")
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>
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" .
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
- Supprimer les paquets NuGet de Winnovative
- Installer le paquet NuGet IronPDF
- Mettez à jour toutes les importations d'espace de noms de
WinnovativeàIronPdf - Remplacez
HtmlToPdfConverterparChromePdfRenderer - Convertir les appels
ConvertHtml()enRenderHtmlAsPdf() - Convertir les appels
ConvertUrl()enRenderUrlAsPdf() - Mettez à jour les paramètres de taille/orientation de la page à
RenderingOptions - Convertir les configurations de marge
- Migrer les en-têtes/pieds de page basés sur
TextElementvers des en-têtes/pieds de page basés sur HTMLTextHeaderFooter - Mettre à jour les espaces réservés aux numéros de page de
&P;à{total-pages} - 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.

