Jak przeprowadzić migrację z PrinceXML do IronPDF w języku C#
Migracja zPrinceXMLdoIronPDFprzekształca proces generowania plików PDF z zewnętrznego procesu z wiersza poleceń w natywną bibliotekę .NET. Niniejszy przewodnik przedstawia kompletną, krok po kroku ścieżkę migracji, która eliminuje obciążenia związane z zarządzaniem procesami, upraszcza wdrażanie i zapewnia rozbudowane możliwości manipulacji plikami PDF wykraczające poza ich generowanie.
Dlaczego warto przejść zPrinceXMLna IronPDF
Zrozumienie PrinceXML
PrinceXML to zaawansowane narzędzie zaprojektowane z myślą o doskonałej konwersji treści HTML na dokumenty PDF idealne do druku dzięki dedykowanej obsłudze specyfikacji CSS Paged Media. Ta specjalizacja pozwalaPrinceXMLrenderować dokumenty z wysoką wiernością w stosunku do zamierzonych projektów druku — jest to cenna cecha dla branż wymagających szczegółowego stylizowania wydruków, takich jak wydawnictwa lub dokumentacja prawna.
JednakPrinceXMLnie jest biblioteką .NET i działa jako oddzielne narzędzie wiersza poleceń, co może komplikówać integrację w środowiskach preferujących czyste rozwiązania .NET. Korzystanie z oddzielnego procesu serwerowego wymaga dodatkowego zarządzania zasobami systemowymi i może zwiększyć złożoność wdrażania projektów.
Problem z procesem zewnętrznym
PrinceXML działa jako oddzielny plik wykonywalny z wiersza poleceń, co stwarza poważne wyzwania architektoniczne dla aplikacji .NET:
-
Obciążenie związane z zarządzaniem procesami: Musi uruchamiać, monitorować i kończyć procesy zewnętrzne.
-
Brak natywnej integracji z .NET: Komunikacja poprzez stdin/stdout lub pliki tymczasowe.
-
Złożoność wdrożenia: Wymaga instalacji Prince na każdym serwerze.
-
Licencjonowanie na serwer: Każde wdrożenie wymaga oddzielnej licencji (495 USD+).
-
Obsługa błędów Trudność: Przeanalizuj tekst wyjściowy w celu wykrycia błędów.
-
Brak Async/Await: Wymagane są wywołania blokujące lub złożone opakowania asynchroniczne.
- Zależności ścieżki: Należy zlokalizować plik wykonywalny Prince w zmiennej PATH lub podać ścieżkę bezwzględną.
PorównaniePrinceXMLi IronPDF
| Aspekt | PrinceXML | IronPDF |
|---|---|---|
| Architektura | Proces zewnętrzny | Natywna biblioteka .NET |
| Integracja | Wiersz poleceń | Bezpośredni interfejs API |
| Wdrożenie | Zainstaluj na każdym serwerze | Pojedynczy pakiet NuGet |
| Obsługa błędów | Analiza tekstu wyjściowego | Wyjątki .NET |
| Obsługa asynchroniczna | Ręczne opakowania | Natywne async/await |
| Manipulacja plikami PDF | Tylko generowanie | Pełna manipulacja (łączenie, dzielenie, edycja) |
| Licencjonowanie | Za serwer (495 USD+) | Na programistę |
| Aktualizacje | Ręczna reinstalacja | Aktualizacja NuGet |
| Debugowanie | Trudne | Pełna obsługa debuggera |
| Podpisy cyfrowe | Nie | Tak |
| Formularze | Nie | Tak |
| Obsługa Docker | Złożone | Proste |
| Cloud Functions | Trudne | Łatwe |
IronPDF stanowi alternatywę dzięki swoim natywnym funkcjom .NET, wykraczającym poza zwykłą konwersję HTML do PDF i obejmującym zaawansowane zadania związane z obsługą plików PDF, takie jak edycja, scalanie i podpisy cyfrowe. APIIronPDFzostało zaprojektowane z myślą o prostocie i łatwości użytkowania, umożliwiając programistom wykonywanie konwersji i manipulacji przy minimalnym nakładzie kodu szablonowego.
Dla zespołów planujących wdrożenie .NET 10 i C# 14 w latach 2025 i 2026, płynne wdrożenieIronPDFnie wymaga żadnych zewnętrznych zależności ani procesów serwerowych, co znacznie ułatwia integrację z .NET Framework.
Zanim zaczniesz
Wymagania wstępne
- Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
- Dostęp do NuGet: Możliwość instalowania pakietów NuGet
- Licencja IronPDF: Uzyskaj klucz licencyjny na stronie ironpdf.com
Zmiany w pakiecie NuGet
# Install IronPDF
dotnet add package IronPdf
# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
# Install IronPDF
dotnet add package IronPdf
# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
Konfiguracja licencji
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Wyszukaj użycie PrinceXML
# Find Prince process calls
grep -r "prince" --include="*.cs" .
grep -r "Process.Start" --include="*.cs" . | grep -i prince
grep -r "@page" --include="*.css" .
grep -r "prince-" --include="*.css" .
# Find Prince process calls
grep -r "prince" --include="*.cs" .
grep -r "Process.Start" --include="*.cs" . | grep -i prince
grep -r "@page" --include="*.css" .
grep -r "prince-" --include="*.css" .
Kompletna dokumentacija API
Zmiany w przestrzeni nazw
// Before: PrinceXML
using PrinceXMLWrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
// Before: PrinceXML
using PrinceXMLWrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
' Before: PrinceXML
Imports PrinceXMLWrapper
Imports System.Diagnostics
Imports System.IO
' After: IronPDF
Imports IronPdf
Mapowanie wiersza poleceń do metod
| Prince Command | OdpowiednikIronPDF |
|---|---|
prince input.html -o output.pdf |
renderer.RenderHtmlFileAsPdf("input.html").SaveAs("output.pdf") |
prince --style=custom.css input.html |
Włącz CSS do HTML lub użyj RenderingOptions |
prince --javascript |
renderer.RenderingOptions.EnableJavaScript = true |
prince --no-javascript |
renderer.RenderingOptions.EnableJavaScript = false |
prince --page-size=Letter |
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter |
prince --page-margin=1in |
renderer.RenderingOptions.MarginTop = 72 (72 punkty = 1 cal) |
prince --encrypt |
pdf.SecuritySettings.OwnerPassword = "..." |
prince --user-password=pw |
pdf.SecuritySettings.UserPassword = "pw" |
prince --disallow-print |
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint |
prince --disallow-copy |
pdf.SecuritySettings.AllowUserCopyPasteContent = false |
prince --baseurl=http://... |
renderer.RenderingOptions.BaseUrl = new Uri("http://...") |
prince --media=print |
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print |
prince --media=screen |
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen |
Mapowanie CSS @page do opcji renderowania
| Właściwość CSS @page | OdpowiednikIronPDF |
|---|---|
size: A4 |
PaperSize = PdfPaperSize.A4 |
size: Letter |
PaperSize = PdfPaperSize.Letter |
size: A4 landscape |
PaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape |
margin: 2cm |
MarginTop/Bottom/Left/Right = 56 |
margin-top: 1in |
MarginTop = 72 |
@top-center { content: "..." } |
HtmlHeader z wyśrodkowanym elementem div |
@bottom-right { content: counter(page) } |
HtmlFooter z symbolem zastępczym {page} |
Przeliczanie rozmiarów stron
| Rozmiar | Punkty | Milimetry |
|---|---|---|
| List | 612 x 792 | 216 x 279 |
| A4 | 595 x 842 | 210 x 297 |
| Kwestie prawne | 612 x 1008 | 216 x 356 |
| 1 cal | 72 | 25.4 |
| 1 cm | 28.35 | 10 |
Przykłady migracji kodu
Przykład 1: Konwersja pliku HTML do formatu PDF
Przed (PrinceXML):
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.Convert("input.html", "output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.Convert("input.html", "output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports PrinceXMLWrapper
Imports System
Module Program
Sub Main()
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.Convert("input.html", "output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Module
Po (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
Ten przykład ilustruje podstawową różnicę architektoniczną.PrinceXMLwymaga utworzenia instancji obiektu Prince z pełną ścieżką do pliku wykonywalnego ("C:\\Program Files\\Prince\\engine\\bin\\prince.exe"), a następnie wywołania Convert() z podaniem ścieżek wejściowej i wyjściowej.
IronPDF całkowicie eliminuje zależności od ścieżki: utwórz ChromePdfRenderer, wywołaj RenderHtmlFileAsPdf() ze ścieżką do pliku HTML, a następnie SaveAs(), aby zapisać wynik. Brak ścieżek wykonywalnych, brak zarządzania procesami, brak zależności ścieżek. Kompleksowe przykłady można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.
Przykład 2: Konwersja adresu URL do formatu PDF z opcjami
Przed (PrinceXML):
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.SetJavaScript(true);
prince.SetEncrypt(true);
prince.SetPDFTitle("Website Export");
prince.Convert("https://example.com", "webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.SetJavaScript(true);
prince.SetEncrypt(true);
prince.SetPDFTitle("Website Export");
prince.Convert("https://example.com", "webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
Imports PrinceXMLWrapper
Imports System
Class Program
Shared Sub Main()
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.SetJavaScript(True)
prince.SetEncrypt(True)
prince.SetPDFTitle("Website Export")
prince.Convert("https://example.com", "webpage.pdf")
Console.WriteLine("URL converted to PDF")
End Sub
End Class
Po (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.PdfTitle = "Website Export";
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.Encrypt("password");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.PdfTitle = "Website Export";
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.Encrypt("password");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.PdfTitle = "Website Export"
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.Encrypt("password")
pdf.SaveAs("webpage.pdf")
Console.WriteLine("URL converted to PDF")
End Sub
End Class
Ten przykład pokazuje, w jaki sposób opcjePrinceXMLodpowiadają właściwościom IronPdf.PrinceXMLużywa metod setter (SetJavaScript(), SetEncrypt(), SetPDFTitle()) przed konwersją.IronPDFwykorzystuje właściwości RenderingOptions do ustawień przed renderowaniem oraz metody po renderowaniu, takie jak Encrypt() w obiekcie PdfDocument.
Kluczowe powiązania:
prince.SetJavaScript(true)→renderer.RenderingOptions.EnableJavaScript = trueprince.SetPDFTitle("...")→renderer.RenderingOptions.PdfTitle = "..."prince.SetEncrypt(true)→pdf.Encrypt("password")(IronPDF wymaga hasła)
Dowiedz się więcej z naszych samouczków.
Przykład 3: Konwersja ciągu znaków HTML do formatu PDF
Przed (PrinceXML):
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";
File.WriteAllText("temp.html", html);
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.Convert("temp.html", "styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";
File.WriteAllText("temp.html", html);
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.Convert("temp.html", "styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
Imports PrinceXMLWrapper
Imports System
Imports System.IO
Module Program
Sub Main()
Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"
File.WriteAllText("temp.html", html)
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.Convert("temp.html", "styled-output.pdf")
Console.WriteLine("Styled PDF created")
End Sub
End Module
Po (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("styled-output.pdf")
Console.WriteLine("Styled PDF created")
End Sub
End Class
Ten przykład podkreśla istotną różnicę:PrinceXMLwymaga pliku wejściowego, więc przed konwersją należy utworzyć plik tymczasowy (File.WriteAllText("temp.html", html)). Funkcja RenderHtmlAsPdf() wIronPDFakceptuje bezpośrednio ciągi HTML — bez plików tymczasowych, bez kodu czyszczącego, bez obciążenia dysku operacjami wejścia/wyjścia.
Migracja CSS Paged Media
Chociaż obsługaCSS Paged MediawPrinceXMLjest potężna, powoduje ona uzależnienie od dostawcy poprzez specyficzny dla Prince kod CSS, który nie będzie działał gdzie indziej:
PrinceXML CSS:
@page {
size: A4;
margin: 2cm;
@top-center {
content: "Document Title";
}
@bottom-right {
content: counter(page);
}
}
/* Prince-specific extensions */
prince-pdf-page-label: "Chapter " counter(chapter);
prince-pdf-destination: attr(id);
IronPDF C# (odpowiednik):
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 56; // ~2cm
renderer.RenderingOptions.MarginBottom = 56;
renderer.RenderingOptions.MarginLeft = 56;
renderer.RenderingOptions.MarginRight = 56;
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
MaxHeight = 40
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>",
MaxHeight = 25
};
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 56; // ~2cm
renderer.RenderingOptions.MarginBottom = 56;
renderer.RenderingOptions.MarginLeft = 56;
renderer.RenderingOptions.MarginRight = 56;
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
MaxHeight = 40
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>",
MaxHeight = 25
};
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 56 ' ~2cm
renderer.RenderingOptions.MarginBottom = 56
renderer.RenderingOptions.MarginLeft = 56
renderer.RenderingOptions.MarginRight = 56
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
.MaxHeight = 40
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>",
.MaxHeight = 25
}
Typowe problemy związane z migracją CSS
Problem 1: CSS @page nie działa
IronPDF korzysta z Chromium, które ma ograniczoną obsługę @page. Zmień reguły CSS na RenderingOptions.
Problem 2: Brakujące ramki marginesów stron
Pola marginesów CSS (@top-center, @bottom-right) są specyficzne dla języka Prince. Zamiast tego użyj HtmlFooter.
Problem 3: string-set/content nie działa
Właściwość CSS string-set jest specyficzna dla Prince'a. Użyj symbolu zastępczego {html-title} z tagu <title>:
<title>Chapter 1: Introduction</title>
<title>Chapter 1: Introduction</title>
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div>{html-title}</div>"
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div>{html-title}</div>"
};
Problem 4: counter(pages) Nieprawidłowe
Zamiast liczników CSS należy używać symbolu zastępczego {total-pages} firmy IronPDF.
Porownanie wydajnosci
| Działanie | PrinceXML | IronPDF |
|---|---|---|
| Prosty HTML | ~400 ms | ~300 ms |
| Złożony CSS | ~600 ms | ~400 ms |
| StronyJavaScript | Ograniczone | ~500 ms |
| Duże dokumenty | ~1500 ms | ~1000 ms |
| Równoległe (10) | ~4000 ms | ~1500 ms |
| Koszty początkowe | ~200 ms | ~50 ms |
Nowe możliwości po migracji
Po migracji doIronPDFzyskujesz możliwości, którychPrinceXMLnie jest w stanie zapewnić:
Łączenie plików PDF
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("complete_book.pdf")
Znaki wodne
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
Podpisy cyfrowe
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
Dim signature = New PdfSignature("certificate.pfx", "password")
pdf.Sign(signature)
Wypełnianie formularzy
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("Name").Value = "John Doe";
pdf.SaveAs("filled_form.pdf");
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("Name").Value = "John Doe";
pdf.SaveAs("filled_form.pdf");
Dim pdf = PdfDocument.FromFile("form.pdf")
pdf.Form.GetFieldByName("Name").Value = "John Doe"
pdf.SaveAs("filled_form.pdf")
Podsumowanie porównania funkcji
| Funkcja | PrinceXML | IronPDF |
|---|---|---|
| Natywny .NET | Nie | Tak |
| Proces zewnętrzny | Wymagane | Nie |
| Obsługa asynchroniczna | Ręczne zawijanie | Natywne async/await |
| CSS Paged Media | Obsługiwane | Za pośrednictwem RenderingOptions |
| CSS Grid | Tak | Tak |
| Flexbox | Tak | Tak |
| JavaScript | Ograniczone | Pełna wersja ES2024 |
| Generacja | Tak | Tak |
| Scal | Nie | Tak |
| Podziel | Nie | Tak |
| Edytuj | Nie | Tak |
| Znaki wodne | Tylko CSS | HTML/CSS + API |
| Podpisy cyfrowe | Nie | Tak |
| PDF/A | Tak | Tak |
| Szyfrowanie | Tak | Tak |
| Formularze | Nie | Tak |
| Pakiet NuGet | Nie | Tak |
| Instalacja na serwerze | Wymagane | Nie |
Lista kontrolna migracji
Przed migracją
- Zidentyfikuj wszystkie wywołania wiersza poleceń Prince
- Zasady CSS @page użyte w dokumencie
- Lista właściwości CSS specyficznych dla Prince'a (
prince-*,string-set) - Zwróć uwagę na funkcje Prince JavaScript
- Określ wykorzystane funkcje plików PDF (szyfrowanie, metadane)
- Uzyskaj klucz licencyjnyIronPDFze strony ironpdf.com
Zmiany w kodzie
- Usuń pakiet NuGet
PrinceXMLWrapper - Zainstaluj pakiet NuGet
IronPdf - Zaktualizuj importy przestrzeni nazw
- Zastąp instancję
PrinceinstancjąChromePdfRenderer - Zastąp
prince.Convert()przezRenderHtmlFileAsPdf()lubRenderHtmlAsPdf() - Zamień metody setter na właściwości
RenderingOptions - Przenieś @page CSS do
RenderingOptions - Zastąp ramki marginesu znakami
HtmlFooter - Zamień liczniki CSS na symbole zastępcze
{total-pages} - Usunąć obsługę plików tymczasowych dla ciągów znaków HTML
- Dodaj inicjalizację licencji podczas uruchamiania aplikacji
Po migracji
- Test konwersji pliku HTML
- Test konwersji ciągu znaków HTML
- Przetestuj konwersję adresów URL
- Sprawdź, czy rozmiary stron są zgodne
- Sprawdź, czy marginesy są zgodne
- Sprawdź nagłówki i stopki
- Sprawdź numery stron
- Testowanie szyfrowania/bezpieczeństwa
- Usuń instalację Prince z serwerów
- Aktualizacja skryptów wdrażania

