Jak przeprowadzić migrację z Winnovative do IronPDF w języku C#
Winnovative jest uznaną marką w branży generowania plików PDF w środowisku .NET, oferującą funkcje konwersji HTML do PDF dla aplikacji napisanych w języku C#. Jednak fakt, że biblioteka opiera się na silniku WebKit z 2016 roku, stwarza poważne wyzwania dla współczesnego tworzenia stron internetowych. Współczesne funkcje CSS, takie jak układ siatki, nowoczesna składnia JavaScript oraz popularne frameworki, takie jak Bootstrap 5 i Tailwind CSS, często nie wyświetlają się poprawnie lub w ogóle.
Niniejszy przewodnik zawiera kompletną ścieżkę migracji zWinnovativedoIronPDFwraz z instrukcjami krok po kroku, porównaniami kodu i praktycznymi przykładami dla profesjonalnych programistów .NET rozważających tę zmianę.
Dlaczego warto przejść z Winnovative
Winnovative opiera się na silniku WebKit z 2016 roku, który stwarza poważne problemy dla nowoczesnych aplikacji internetowych:
Brak obsługi CSS Grid: Bootstrap 5, Tailwind CSS i nowoczesne układy ulegają całkowitemu zniszczeniu. Wszelkie strony korzystające z CSS Grid nie będą wyświetlać się zgodnie z oczekiwaniami.
Błędna implementacja Flexbox: Niespójne renderowanie w porównaniu z nowoczesnymi przeglądarkami. Programiści często spędzają godziny na debugowaniu problemów z układem, które występują wyłącznie w Winnovative.
Tylko JavaScript ES5: Nowoczesne funkcje JavaScript ES6+ (funkcje strzałkowe, async/await, klasy) nie działają, ale nie wyświetlają komunikatów o błędach. Oznacza to, że React, Vue i inne nowoczesne frameworki często generują nieprawidłowe wyniki.
Stagnacja rozwoju: Pomimo że nazwa "Winnovative" sugeruje innowacyjność, w ostatnich latach produkt doczekał się jedynie minimalnych aktualizacji.
Problemy z renderowaniem czcionek: Czcionki internetowe i niestandardowa typografia często są renderowane nieprawidłowo lub w ogóle nie są renderowane.
Kwestie bezpieczeństwa: silnik WebKit z 2016 roku nie posiada wieloletnich poprawek bezpieczeństwa i napraw luk w zabezpieczeniach.
Wpływ na rzeczywistość
Nowoczesny CSS i JavaScript po prostu nie działają w 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>
IronPDFvs Winnovative: Porównanie funkcji
Zrozumienie różnic architektonicznych pomaga decydentom technicznym w ocenie inwestycji w migrację:
| Aspekt | Winnovative | IronPDF |
|---|---|---|
| Silnik renderujący | WebKit (2016) | Chromium (aktualne) |
| CSS Grid | Nieobsługiwane | Pełne wsparcie |
| Flexbox | Błędne | Pełne wsparcie |
| JavaScript | Tylko ES5 | ES2024 |
| Bootstrap 5 | Uszkodzone | Pełne wsparcie |
| Tailwind CSS | Nieobsługiwane | Pełne wsparcie |
| React/Vue SSR | Problematyczne | Działa idealnie |
| Czcionki internetowe | Niewiarygodne | Pełne wsparcie |
| Aktualizacje | Rzadko | Miesięcznie |
| Cena | 750–1600 USD | Konkurencyjny |
Szybki start: Migracja zWinnovativedo IronPDF
Migrację można rozpocząć natychmiast, wykonując te podstawowe kroki.
Krok 1: Zastąp pakiety NuGet
Usuń wszystkie pakiety 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
Zainstaluj IronPDF:
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Krok 2: Aktualizacja przestrzeni nazw
Zastąp przestrzenie nazwWinnovativeprzestrzenią nazw 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
Krok 3: Inicjalizacja licencji
Dodaj inicjalizację licencji podczas uruchamiania aplikacji:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Przykłady migracji kodu
Konwersja HTML do PDF
Najczęstszy przypadek użycia ilustruje różnice w API między tymi bibliotekami .NET do obsługi plików PDF.
Podejście 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
Podejście 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 wymaga utworzenia HtmlToPdfConverter, ustawienia klucza licencyjnego na instancji, wywołania ConvertHtml() z pustym parametrem bazowego adresu URL, odebrania surowych bajtów i ręcznego zapisania ich do pliku.IronPDFupraszcza ten proces: wystarczy utworzyć ChromePdfRenderer, wywołać RenderHtmlAsPdf() i użyć wbudowanej metody SaveAs().
W przypadku zaawansowanych scenariuszy konwersji HTML do PDF zapoznaj się z przewodnikiem po konwersji HTML do PDF.
Konwersja adresów URL do formatu PDF
Konwersja adresów URL do formatu PDF wykazuje podobne wzorce.
Podejście 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
Podejście 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 używa ConvertUrl() zwracając bajty, które należy zapisać ręcznie.IronPDFudostępnia RenderUrlAsPdf() obiekt PdfDocument, który dla wygody zawiera SaveAs().
Zapoznaj się z dokumentacją dotyczącą konwersji adresów URL do formatu PDF, aby uzyskać informacje na temat uwierzytelniania i opcji niestandardowych nagłówków.
Dodawanie nagłówków i stopek
Nagłówki i stopki ujawniają istotne różnice architektoniczne.Winnovativewykorzystuje programowe podejście oparte na elementach z obiektami TextElement, podczas gdyIronPDFwykorzystuje nagłówki oparte na HTML z tokenami zastępczymi.
Podejście 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
Podejście 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 wymaga włączenia nagłówków/stopek za pomocą PdfDocumentOptions.ShowHeader, ustawienia wysokości, utworzenia obiektów TextElement z pozycjami współrzędnych oraz obiektów System.Drawing.Font, a także użycie symboli zastępczych &p; i &P;.IronPDFwykorzystuje obiekty TextHeaderFooter z prostymi właściwościami, takimi jak CenterText i FontSize, oraz intuicyjne symbole zastępcze, takie jak {page} i {total-pages}.
W przypadku nagłówków opartych na HTML z pełnym stylizowaniem CSS zapoznaj się z dokumentacją dotyczącą nagłówków i stopek.
WinnovativeAPI doIronPDF– dokumentacja API dla mapowania
To mapowanie przyspiesza migrację, pokazując bezpośrednie odpowiedniki API:
| KlasaWinnovative | OdpowiednikIronPDF |
|---|---|
HtmlToPdfConverter |
ChromePdfRenderer |
PdfDocument |
PdfDocument |
PdfDocumentOptions |
RenderingOptions |
PdfHeaderOptions |
HtmlHeaderFooter |
PdfFooterOptions |
HtmlHeaderFooter |
TextElement |
HTML w HtmlFragment |
ImageElement |
HTML <img> |
Mapowanie metod
| MetodaWinnovative | MetodaIronPDF |
|---|---|
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) |
Mapowanie opcji
| OpcjaWinnovative | OpcjaIronPDF |
|---|---|
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 |
Ustaw właściwość HtmlHeader |
ShowFooter = true |
Ustaw właściwość HtmlFooter |
JavaScriptEnabled = true |
EnableJavaScript = true |
Numer strony &p; |
Numer strony {page} |
Łączna liczba stron &P; |
Łączna liczba stron {total-pages} |
Typowe problemy związane z migracją i ich rozwiązania
Problem 1: Układ CSS wygląda inaczej
Objaw: Układ stron, który wyglądał "dobrze" w Winnovative, teraz wygląda inaczej w IronPDF.
Przyczyna: W 2016 r. WebKit firmyWinnovativemiał błędy renderowania, które programiści obejśli.IronPDFwyświetla się poprawnie zgodnie z nowoczesnymi standardami.
Rozwiązanie: Usuń hacki CSS specyficzne dlaWinnovativei użyj standardowego CSS:
// 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")
Problem 2: JavaScript nie działa
Objaw: Dynamiczna zawartość nie pojawia się w pliku PDF.
Przyczyna: Konieczność jawnego skonfigurowania opcji oczekiwania w JavaScript.
Rozwiązanie:
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);
Problem 3: Podstawowy adres URL nie działa
Objaw: Względne adresy URL obrazów i arkuszy CSS nie są rozpoznawane.
Przyczyna:IronPDFwymaga jawnej konfiguracji adresu URL bazowego.
Rozwiązanie:
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = new Uri("https://example.com/");
renderer.RenderingOptions.BaseUrl = New Uri("https://example.com/")
Problem 4: Różne podziały stron
Objaw: Treść jest dzielona w innych miejscach niż w Winnovative.
Przyczyna: Różne silniki renderujące obsługują podziały stron w różny sposób.
Rozwiązanie: Użyj wyraźnych elementów CSS do sterowania podziałami stron:
/* Control page breaks explicitly */
.no-break {
page-break-inside: avoid;
}
.page-break-before {
page-break-before: always;
}
.page-break-after {
page-break-after: always;
}
Problem 5: Czcionki wyglądają inaczej
Objaw: Tekst wyświetla się czcionką inną niż oczekiwano.
Przyczyna:IronPDFkorzysta z czcionek systemowych; Czcionki internetowe wymagają wyraźnego załadowania.
Rozwiązanie:
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body {
font-family: 'Roboto', Arial, sans-serif;
}
</style>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
body {
font-family: 'Roboto', Arial, sans-serif;
}
</style>
Lista kontrolna migracji Winnovative
Zadania przed migracją
Przeprowadź audyt kodu źródłowego, aby zidentyfikować wszystkie przypadki użycia Winnovative:
# Find allWinnovativereferences
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
# Find allWinnovativereferences
grep -r "Winnovative" --include="*.cs" .
grep -r "HtmlToPdfConverter" --include="*.cs" .
grep -r "PdfDocumentOptions" --include="*.cs" .
grep -r "ConvertUrl\|ConvertHtml" --include="*.cs" .
Należy udokumentówać aktualne konfiguracje, w tym rozmiary stron, marginesy oraz ustawienia nagłówków i stopek. Zidentyfikuj rozwiązania zastępcze CSS (prefiksy WebKit, siatki oparte na float), które można usunąć. Uwaga: wymagania dotyczące zgodności z JavaScript.
Zadania związane z aktualizacją kodu
- Usuń pakiety NuGet firmy Winnovative
- Zainstaluj pakiet IronPdf NuGet
- Zaktualizuj wszystkie importy przestrzeni nazw z
WinnovativenaIronPdf - Zastąp
HtmlToPdfConverterprzezChromePdfRenderer - Zamień wywołania
ConvertHtml()naRenderHtmlAsPdf() - Zamień wywołania
ConvertUrl()naRenderUrlAsPdf() - Zaktualizuj ustawienia rozmiaru/orientacji strony do
RenderingOptions - Konwersja konfiguracji marginesów
- Przenieś nagłówki/stopki oparte na
TextElementdo formatu HTML opartego naTextHeaderFooter - Zaktualizuj symbole zastępcze numerów stron z
&P;na{total-pages} - Dodaj inicjalizację licencjiIronPDFpodczas uruchamiania
Testy po migracji
Po migracji należy zweryfikować następujące aspekty:
- Przetestuj podstawową konwersję HTML do PDF
- Przetestuj konwersję adresu URL do formatu PDF
- Sprawdź, czy układy CSS Grid wyświetlają się poprawnie (teraz będą działać)
- Sprawdź, czy układy Flexbox renderują się poprawnie (teraz będą działać)
- Testuj strony z dużą ilością kodu JavaScript przy użyciu nowoczesnej składni ES6+
- Sprawdź zgodność z Bootstrap 5
- Test renderowania nagłówka/stopki
- Sprawdź podziały stron
- Porównaj jakość wydruków PDF
Zadania porządkowe
- Usuń obejścia CSSWinnovative(prefiksy webkit)
- Zaktualizuj JavaScript ES5 do nowoczesnej składni
- Usuń rezerwowe siatki oparte na wartości typu float
- Aktualizacja dokumentacji
Kluczowe korzyści z migracji do IronPDF
Przejście zWinnovativenaIronPDFzapewnia kilka kluczowych korzyści:
Nowoczesny silnik renderujący:IronPDFwykorzystuje aktualny silnik Chromium, zapewniając pełną obsługę CSS3, CSS Grid, Flexbox oraz JavaScript ES2024. Nowoczesne frameworki, takie jak Bootstrap 5, Tailwind CSS oraz React/Vue, wyświetlają się poprawnie.
Uproszczone API: nagłówki i stopki oparte na HTML zastępują programowe pozycjonowanie TextElement. Intuicyjne symbole zastępcze, takie jak {page}, zastępują niejasną składnię &p;. Wbudowane metody SaveAs() eliminują ręczną obsługę bajtów.
Aktywny rozwój: W miarę jak do 2026 r. rośnie popularność .NET 10 i C# 14, comiesięczne aktualizacjeIronPDFzapewniają zgodność z obecnymi i przyszłymi wersjami .NET.
Nowoczesny CSS bez obejść: CSS Grid, Flexbox i nowoczesna typografia działają bez prefiksów WebKit lub rozwiązań awaryjnych opartych na float.
Nowoczesny JavaScript: funkcje ES6+, w tym funkcje strzałkowe, async/await, klasy i moduły, działają poprawnie.

