Comment diviser un PDF de plusieurs pages à l'aide d'IronPDF en C# | IronPDF
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 bibliothèque Classic à long terme repose sur un moteur de rendu propriétaire plus ancien, et sa prise en charge des CSS modernes (Grid, dernier Flexbox) et du JavaScript moderne (ES2017+) est incohérente par rapport à un navigateur Chromium actuel. La réponse du fournisseur a été d'expédier un produit séparé de classe Chromium, Winnovative.Pdf.Next, plutôt que de mettre à niveau Classic sur place, ce qui signifie que les clients existants de Winnovative font face à une migration de code de toute façon.
Ce guide propose un chemin de migration de Winnovative vers IronPDF, avec des instructions pas-à-pas, des comparaisons de code et des exemples pratiques pour les développeurs .NET évaluant cette transition.
Pourquoi migrer de Winnovative
La bibliothèqueWinnovative Classicutilise un moteur propriétaire plus ancien qui n'a pas été mis à jour selon les normes modernes du web :
Incohérence du CSS Grid / dernier Flexbox : Les mises en page qui dépendent de CSS Grid ou de fonctionnalités récentes de Flexbox peuvent mal se rendre par rapport à un navigateur Chromium actuel.
Lacunes de compatibilité JavaScript moderne : Les fonctionnalités ES2017+ (fonctions fléchées, async/await, classes) ne sont pas exécutées de manière fiable, ce qui affecte React, Vue et d'autres frameworks modernes.
Cadence lente : Le moteur Classic reçoit des mises à jour peu fréquentes de rendu ; la réponse du fournisseur a été d'expédier le produit séparé Winnovative.Pdf.Next de classe Chromium, laissant Classic figé en termes de fonctionnalités.
Fardeau de migration à deux produits : Passer à Winnovative.Pdf.Next est en soi une réécriture - l'API Next vit sous un espace de noms différent (Winnovative.Pdf.Next) et est incompatible binaire avec Classic.
Cas limites de rendu des polices : Les polices web et la typographie personnalisée se rendent parfois différemment d'un navigateur moderne.
Impact sur le monde réel
CSS et JavaScript modernes qui peuvent se rendre de manière incohérente dansWinnovative 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>
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 Classic | IronPDF |
|---|---|---|
| Moteur de rendu | Moteur propriétaire plus ancien | Chromium (actuel) |
| CSS Grid | Incohérent | Prise en charge complète |
| Flexbox | Incohérent sur les cas limites | Prise en charge complète |
| JavaScript | JS moderne limité | ES2024 |
| Bootstrap 5 | Problèmes de disposition | Prise en charge complète |
| Tailwind CSS | Limité | Prise en charge complète |
| React/Vue SSR | Problématique | Fonctionne |
| Fontes Web | Peu fiable dans certaines configurations | Prise en charge complète |
| Mises à jour | Peu fréquents | Mensuel |
| Tarification (par développeur) | 450 $ Déploiement / 1 200 $ Redistributable | See ironpdf.com/pricing |
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 packs Winnovative (vérifiez lesquels votre projet utilise réellement) :
# 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
Installez IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Étape 2 : Mise à jour des espaces de noms
Remplacez les espaces de noms Winnovative par l'espace de nom 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 innovante:
// 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
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 de créer un HtmlToPdfConverter, de définir une clé de licence sur l'instance, d'appeler ConvertHtml() avec un paramètre URL de base vide, de recevoir des octets bruts et d'écrire manuellement dans un fichier.IronPDF simplifie cela : créez un 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 innovante:
// 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
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 sauvegardés manuellement.IronPDF fournit 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. Winnovative utilise une approche programmée basée sur des éléments avec des objets TextElement, tandis qu'IronPDF utilise des en-têtes basés sur HTML avec des jetons de remplacement.
Approche innovante:
// 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
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, le paramétrage des hauteurs, la création d'objets TextElement avec des positions de coordonnées et des objets System.Drawing.Font, et l'utilisation des jetons de remplacement &p; et &P;.IronPDF utilise des objets TextHeaderFooter avec des propriétés simples comme CenterText et FontSize, et des jetons de remplacement 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 innovante à 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} |
Total des pages &P; |
Total des 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 Winnovative ont désormais un aspect différent dans IronPDF.
Cause : le moteur propriétaire plus ancien deWinnovative Classica des particularités de rendu avec lesquelles les développeurs ont contourné. Le moteur Chromium actuel d'IronPDF les rend correctement.
Solution :Supprimez les hacks CSS spécifiques à Winnovative et 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:IronPDF a 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:IronPDF utilise 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 innovante
Tâches préalables à la migration
Auditez votre base de code pour identifier tous les usages de 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" .
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
- Installez le package NuGet IronPDF
- Mettez à jour toutes les importations d'espaces de noms de
WinnovativeàIronPdf - Remplacez
HtmlToPdfConverterparChromePdfRenderer - Convertissez les appels
ConvertHtml()enRenderHtmlAsPdf() - Convertissez les appels
ConvertUrl()enRenderUrlAsPdf() - Mettez à jour les paramètres de taille/orientation de page vers
RenderingOptions - Convertir les configurations de marge
- Migrez les en-têtes/pieds de page basés sur
TextElementvers lesTextHeaderFooterbasés sur HTML - Mettez à jour les espaces réservés de numéro de page de
&P;à{total-pages} - Ajouter l'initialisation de la licence IronPDF au 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érifiez que les mises en page CSS Grid se rendent correctement
- Vérifiez que les mises en page Flexbox se rendent correctement
- 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 :IronPDF utilise 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. Les 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 : les mises à jour mensuelles d'IronPDF assurent la compatibilité avec les versions .NET actuelles et à venir.
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.

