Jak przeprowadzić migrację z PrinceXML do IronPDF w języku C#
Migracja zPrinceXMLdo IronPDF przekształ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 osobnej licencji.
-
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 | Desktop $495 / Serwer $3,800; free non-commercial use with logo watermark | 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 |
| Funkcje chmurowe | 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, scałanie i podpisy cyfrowe. API IronPDF został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 adoptujących nowoczesne .NET, bezproblemowe wdrożenie IronPDF nie wymaga zewnętrznych zależności ani procesów serwerowych, co tym samym łagodzi obciążenie integracją z frameworkiem .NET.
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 PrinceXML.Wrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
// Before: PrinceXML
using PrinceXML.Wrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
Imports IronPdf
Imports System.Diagnostics
Imports System.IO
Mapowanie wiersza poleceń do metod
| Prince Command | Odpowiednik IronPDF |
|---|---|
prince input.html -o output.pdf |
renderer.RenderHtmlFileAsPdf("input.html").SaveAs("output.pdf") |
prince --style=custom.css input.html |
Uwzględnij CSS w 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 | Odpowiednik IronPDF |
|---|---|
size: A4 |
PaperSize = PdfPaperSize.A4 |
size: Letter |
PaperSize = PdfPaperSize.Letter |
size:A4landscape |
PaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape |
margin: 2cm |
MarginTop/Bottom/Left/Right = 56 |
margin-top: 1in |
MarginTop = 72 |
@top-center { content: "..." } |
HtmlHeader z wycentrowanym div |
@bottom-right { content: counter(page) } |
HtmlFooter z {page} jako placeholder |
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 PrinceXML.Wrapper;
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 PrinceXML.Wrapper;
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 PrinceXML.Wrapper
Imports System
Class Program
Shared 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 Class
Po (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
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 zainicjowania obiektu Prince z pełną ścieżką do pliku wykonywalnego ("C:\\Program Files\\Prince\\engine\\bin\\prince.exe"), a następnie wywołania Convert() ze ścieżkami wejściowymi i wyjściowymi.
IronPDF całkowicie eliminuje zależności ścieżkowe: tworzy ChromePdfRenderer, wywołuje RenderHtmlFileAsPdf() z ścieżką do pliku HTML i używa SaveAs() do zapisania wyniku. 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 PrinceXML.Wrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.JavaScript = true;
prince.Encrypt = true;
prince.PdfTitle = "Website Export";
prince.Convert("https://example.com", "webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.JavaScript = true;
prince.Encrypt = true;
prince.PdfTitle = "Website Export";
prince.Convert("https://example.com", "webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
Imports PrinceXML.Wrapper
Imports System
Class Program
Shared Sub Main()
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.JavaScript = True
prince.Encrypt = True
prince.PdfTitle = "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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.Title = "Website Export";
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SecuritySettings.OwnerPassword = "owner-password";
pdf.SecuritySettings.UserPassword = "user-password";
pdf.SaveAs("webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.Title = "Website Export";
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SecuritySettings.OwnerPassword = "owner-password";
pdf.SecuritySettings.UserPassword = "user-password";
pdf.SaveAs("webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.Title = "Website Export"
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SecuritySettings.OwnerPassword = "owner-password"
pdf.SecuritySettings.UserPassword = "user-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.PrinceXMLudostępnia konfigurację jako właściwości obiektu Prince (JavaScript, Encrypt, PdfTitle) przed konwersją.IronPDF używa właściwości RenderingOptions do ustawień wstępnych renderowania, a po renderze stosuje szyfrowanie za pomocą SecuritySettings na PdfDocument.
Kluczowe powiązania:
prince.JavaScript = true→renderer.RenderingOptions.EnableJavaScript = trueprince.PdfTitle = "..."→renderer.RenderingOptions.Title = "..."prince.Encrypt = true→pdf.SecuritySettings.OwnerPassword = "..."/pdf.SecuritySettings.UserPassword = "..."
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 PrinceXML.Wrapper;
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>";
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
// ConvertString accepts a raw HTML/XML string directly
prince.ConvertString(html, "styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
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>";
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
// ConvertString accepts a raw HTML/XML string directly
prince.ConvertString(html, "styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
Imports PrinceXML.Wrapper
Imports System
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>"
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
' ConvertString accepts a raw HTML/XML string directly
prince.ConvertString(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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
{
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("styled-output.pdf")
Console.WriteLine("Styled PDF created")
End Sub
End Class
Obie biblioteki akceptują bezpośrednio ciąg HTML:PrinceXMLpoprzez ConvertString(), a IronPDF poprzez RenderHtmlAsPdf(). Różnica architektoniczna pozostaje — ConvertStringPrinceXMLnadal przekazuje wejście do zewnętrznego pliku wykonywalnego prince, podczas gdy IronPDF wykonuje renderowanie w procesie bez zewnętrznego pliku wykonywalnego.
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
Ramki marginesów CSS (@top-center, @bottom-right) są specyficzne dla Prince. Zamiast tego użyj HtmlFooter.
Problem 3: string-set/content nie działa
Właściwość CSS string-set jest specyficzna dla Prince. Użyj 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
Użyj zastępczego {total-pages} w IronPDF zamiast liczników CSS.
Porownanie wydajności
| 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 do IronPDF zyskujesz 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
- Wymień specyficzne właściwości CSS dla Prince (
prince-*,string-set) - Zwróć uwagę na funkcje Prince JavaScript
- Określ wykorzystane funkcje plików PDF (szyfrowanie, metadane)
- Uzyskaj klucz licencyjny IronPDF ze strony ironpdf.com
Zmiany w kodzie
- Usuń pakiet NuGet
PrinceXMLWrapper - Zainstaluj pakiet NuGet
IronPdf - Zaktualizuj importy przestrzeni nazw
- Zamień inicjalizację
PrincenaChromePdfRenderer - Zamień
prince.Convert()naRenderHtmlFileAsPdf()lubRenderHtmlAsPdf() - Konwertuj metody ustalające na właściwości
RenderingOptions - Przenieś @page CSS do
RenderingOptions - Zamień ramki marginesów na
HtmlFooter - Przekształć liczniki CSS w 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

