IRONSOFTWAREHOME
FILMY

Jak przekształcić ciąg znaków HTML do formatu PDF w języku C#

Curtis Chau
Curtis Chau
Updated: 19 lipca 2026

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

AspektPrinceXMLIronPDF
ArchitekturaProces zewnętrznyNatywna biblioteka .NET
IntegracjaWiersz poleceńBezpośredni interfejs API
WdrożenieZainstaluj na każdym serwerzePojedynczy pakiet NuGet
Obsługa błędówAnaliza tekstu wyjściowegoWyjątki .NET
Obsługa asynchronicznaRęczne opakowaniaNatywne async/await
Manipulacja plikami PDFTylko generowaniePełna manipulacja (łączenie, dzielenie, edycja)
LicencjonowanieDesktop $495 / Serwer $3,800; free non-commercial use with logo watermarkNa programistę
AktualizacjeRęczna reinstalacjaAktualizacja NuGet
DebugowanieTrudnePełna obsługa debuggera
Podpisy cyfroweNieTak
FormularzeNieTak
Obsługa DockerZłożoneProste
Funkcje chmuroweTrudneŁ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
SHELL

Konfiguracja licencji

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

Kompletna dokumentacija API

Zmiany w przestrzeni nazw

// Before: PrinceXML
using PrinceXML.Wrapper;
using System.Diagnostics;
using System.IO;

// After: IronPDF
using IronPdf;

Mapowanie wiersza poleceń do metod

Prince CommandOdpowiednik IronPDF
prince input.html -o output.pdfrenderer.RenderHtmlFileAsPdf("input.html").SaveAs("output.pdf")
prince --style=custom.css input.htmlUwzględnij CSS w HTML lub użyj RenderingOptions
prince --javascriptrenderer.RenderingOptions.EnableJavaScript = true
prince --no-javascriptrenderer.RenderingOptions.EnableJavaScript = false
prince --page-size=Letterrenderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
prince --page-margin=1inrenderer.RenderingOptions.MarginTop = 72 (72 punkty = 1 cal)
prince --encryptpdf.SecuritySettings.OwnerPassword = "..."
prince --user-password=pwpdf.SecuritySettings.UserPassword = "pw"
prince --disallow-printpdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
prince --disallow-copypdf.SecuritySettings.AllowUserCopyPasteContent = false
prince --baseurl=http://...renderer.RenderingOptions.BaseUrl = new Uri("http://...")
prince --media=printrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
prince --media=screenrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen

Mapowanie CSS @page do opcji renderowania

Właściwość CSS @pageOdpowiednik IronPDF
size: A4PaperSize = PdfPaperSize.A4
size: LetterPaperSize = PdfPaperSize.Letter
size:A4landscapePaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape
margin: 2cmMarginTop/Bottom/Left/Right = 56
margin-top: 1inMarginTop = 72
@top-center { content: "..." }HtmlHeader z wycentrowanym div
@bottom-right { content: counter(page) }HtmlFooter z {page} jako placeholder

Przeliczanie rozmiarów stron

RozmiarPunktyMilimetry
List612 x 792216 x 279
A4595 x 842210 x 297
Kwestie prawne612 x 1008216 x 356
1 cal7225.4
1 cm28.3510

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");
    }
}

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");
    }
}

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");
    }
}

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");
    }
}

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");
    }
}

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");
    }
}

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);
Text

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

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>
HTML
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łaniePrinceXMLIronPDF
Prosty HTML~400 ms~300 ms
Złożony CSS~600 ms~400 ms
StronyJavaScriptOgraniczone~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");

Znaki wodne

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");

Podpisy cyfrowe

var 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");

Podsumowanie porównania funkcji

FunkcjaPrinceXMLIronPDF
Natywny .NETNieTak
Proces zewnętrznyWymaganeNie
Obsługa asynchronicznaRęczne zawijanieNatywne async/await
CSS Paged MediaObsługiwaneZa pośrednictwem RenderingOptions
CSS GridTakTak
FlexboxTakTak
JavaScriptOgraniczonePełna wersja ES2024
GeneracjaTakTak
ScalNieTak
PodzielNieTak
EdytujNieTak
Znaki wodneTylko CSSHTML/CSS + API
Podpisy cyfroweNieTak
PDF/ATakTak
SzyfrowanieTakTak
FormularzeNieTak
Pakiet NuGetNieTak
Instalacja na serwerzeWymaganeNie

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ęczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta