Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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:

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

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

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

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

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

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

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

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 = truerenderer.RenderingOptions.EnableJavaScript = true
  • prince.PdfTitle = "..."renderer.RenderingOptions.Title = "..."
  • prince.Encrypt = truepdf.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
$vbLabelText   $csharpLabel

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

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

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

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")
$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
  • 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ę Prince na ChromePdfRenderer
  • Zamień prince.Convert() na RenderHtmlFileAsPdf() lub RenderHtmlAsPdf()
  • 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

Zwróć uwagęPrinceXML jest zarejestrowanym znakiem towarowym jego właściciela. Ta strona nie jest powiązana z, zatwierdzona przez lub sponsorowana przez YesLogic Pty. Jan Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

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

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie