Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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:

  1. Obciążenie związane z zarządzaniem procesami: Musi uruchamiać, monitorować i kończyć procesy zewnętrzne.

  2. Brak natywnej integracji z .NET: Komunikacja poprzez stdin/stdout lub pliki tymczasowe.

  3. Złożoność wdrożenia: Wymaga instalacji Prince na każdym serwerze.

  4. Licencjonowanie na serwer: Każde wdrożenie wymaga oddzielnej licencji (495 USD+).

  5. Obsługa błędów Trudność: Przeanalizuj tekst wyjściowy w celu wykrycia błędów.

  6. Brak Async/Await: Wymagane są wywołania blokujące lub złożone opakowania asynchroniczne.

  7. 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

  1. Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Dostęp do NuGet: Możliwość instalowania pakietów NuGet
  3. 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
SHELL

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"
$vbLabelText   $csharpLabel

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" .
SHELL

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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 = true
  • prince.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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
}
$vbLabelText   $csharpLabel

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>
HTML
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>{html-title}</div>"
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>{html-title}</div>"
};
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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ę Prince instancją ChromePdfRenderer
  • Zastąp prince.Convert() przez RenderHtmlFileAsPdf() lub RenderHtmlAsPdf()
  • 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

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie