IRONSOFTWAREHOME
FILMY

Jak konwertować pliki SVG do formatu PDF przy użyciu języka C#

Curtis Chau
Curtis Chau
Updated: 19 lipca 2026

Przejście zPDFreactorna IronPDF eliminuje zależności od Javy i infrastrukturę serwerową, zapewniając jednocześnie równoważne możliwości konwersji HTML do PDF za pośrednictwem natywnej biblioteki .NET. Niniejszy przewodnik zawiera kompletną, szczegółową ścieżkę migracji, która pozwala zastąpić architekturę serwerową opartą na Javie biblioteką działającą w ramach procesu, która płynnie integruje się z aplikacjami .NET.

Dlaczego warto przejść zPDFreactorna IronPDF

Zrozumienie PDFreactor

PDFreactor to potężny serwer do konwersji HTML na PDF, który integruje się z różnymi platformami. Jako rozwiązanie komercyjne,PDFreactorwykorzystuje swoją autorską technologię do konwersji treści HTML i CSS na wysokiej jakości dokumenty PDF. Wśród swoich godnych uwagi cechPDFreactorobsługuje szeroki wachlarz właściwości CSS, co czyni go silnym kandydatem do renderowania złożonych układów.

Jednak zależnośćPDFreactorod Javy stwarza pewne wyzwania w środowiskach .NET, gdzie jego nienatywny charakter może komplikówać wdrażanie i integrację. Jego zależność od Javy powoduje dodatkowe obciążenie w aplikacjach .NET, często wymagając dodatkowej pracy integracyjnej.

Problem zależności w Javie

ArchitekturaPDFreactorstwarza kilka wyzwań w środowiskach .NET:

  1. Wymagane środowisko uruchomieniowe Java: Wymaga instalacji JRE/JDK na wszystkich serwerach.

  2. Architektura serwera: Działa jako oddzielna usługa wymagająca dodatkowej infrastruktury. Jako rozwiązanie serwerowe,PDFreactorwymaga wywołań REST API dla każdej konwersji.

  3. Złożone wdrożenie: Zarządzanie zależnościami Java w ekosystemie opartym głównie na .NET może skomplikować konfigurację i zwiększyć koszty utrzymania. Dwa środowiska uruchomieniowe (Java + .NET) do zarządzania w potokach CI/CD.

  4. Komunikacja międzyprocesowa: REST API lub komunikacja przez gniazda powodują opóźnienia. Każda konwersja pliku PDF wymaga pełnej wymiany danych HTTP z serwerem.

  5. Oddzielne zarządzanie licencjami: Licencja przypisana do instancji serwera, a nie do aplikacji. Licencjonowanie na serwer powiązane z instancją usługi Java.

  6. Izolacja zasobów: Oddzielne zarządzanie pamięcią procesów i procesorem. Dodatkowy serwer do monitorowania, skalowania i konserwacji.

PorównaniePDFreactori IronPDF

Funkcja/AspektPDFreactorIronPDF
Natywna biblioteka .NETNie (oparte na Javie)Tak
Środowisko uruchomienioweJava (serwer zewnętrzny)Natywny .NET (w ramach procesu)
ArchitekturaUsługa REST APIBiblioteka NuGet
WdrożenieJava + konfiguracja serweraPojedynczy pakiet NuGet
ZależnościJRE + klient HTTPSamodzielny
OpóźnienieRuch sieciowy w obie stronyBezpośrednie wywołania metod
Obsługa wielu platformTak (zależne od Javy)Tak (w pakiecie z Chromium)
Obsługa CSSZaawansowana obsługa CSS3,CSS Paged MediaKompleksowa obsługa HTML5/CSS3
Złożoność wdrożeniaBardziej złożone ze względu na JavęProsty, bezpośrednio integruje się z platformą .NET
Funkcje manipulacji plikami PDFPodstawowe (tylko generowanie)Obszerne, w tym scałanie, dzielenie, edycja i dodawanie adnotacji

W przeciwieństwie do PDFreactor,IronPDF prezentuje się jako natywna biblioteka .NET, zaprojektowana specjalnie w celu płynnej integracji z projektami .NET bez zewnętrznych zależności, takich jak Java.IronPDF wykorzystuje wbudowany silnik renderujący Chromium, co pozwala na konwersję HTML do PDF za pomocą zaledwie kilku linii kodu.

Dla zespolow przyjmujacych nowoczesne wersje .NET,IronPDF zapewnia wlasne rozwiazanie .NET, ktore eliminuje zlozonosc serwera Java, oferujac jednoczesnie kompleksowe zarzadzanie cyklem zycia PDF.


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

#PDFreactoris NOT distributed via NuGet. The .NET wrapper ships as
# PDFreactor.dll inside <PDFreactor-install>/clients/netstandard2/bin/
# (or netframework40/bin for older .NET Framework projects).
# Remove the assembly reference from your .csproj.

# StopPDFreactorWeb Service (Java/Jetty, default port 9423)
# Windows: net stop PDFreactor
# Linux:   sudo systemctl stop pdfreactor

# Install IronPDF
dotnet add package IronPdf
SHELL

Konfiguracja licencji

PDFreactor (oparty na serwerze):

// License configured on thePDFreactorWeb Service via config file or command line.
// The .NET client (RealObjects.PDFreactor.Webservice.Client) connects to that licensed service.
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423/service/rest");
C#

IronPDF (poziom aplikacji):

// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

Zidentyfikuj zastosowanie PDFreactor

# FindPDFreactorusage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .

# FindCSS Paged Mediarules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .
SHELL

Kompletna dokumentacija API

Zmiany w przestrzeni nazw

// Before:PDFreactor(Web Service client)
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
C#

Mapowania klas podstawowych

PDFreactorIronPDF
PDFreactorChromePdfRenderer
ConfigurationChromePdfRenderOptions
ResultPdfDocument
config.Document = htmlrenderer.RenderHtmlAsPdf(html)
result.Document (byte[])pdf.BinaryData

Mapowania właściwości konfiguracyjnych

KonfiguracjaPDFreactorIronPDF RenderingOptions
config.Document = htmlrenderer.RenderHtmlAsPdf(html)
config.Document = urlrenderer.RenderUrlAsPdf(url)
config.PageFormat = PageFormat.A4RenderingOptions.PaperSize = PdfPaperSize.A4
config.PageOrientationRenderingOptions.PaperOrientation
config.PageMarginsRenderingOptions.MarginTop/Bottom/Left/Right
config.EnableJavaScript = trueRenderingOptions.EnableJavaScript = true
config.UserStyleSheets = new List<Resource>{...}Osadź CSS w HTML
config.Titlepdf.MetaData.Title
config.Encryptionpdf.SecuritySettings

Nowe funkcje niedostępne w PDFreactor

Funkcja IronPDFOpis
PdfDocument.Merge()Łączenie wielu plików PDF
pdf.ApplyWatermark()Dodaj znaki wodne
pdf.ExtractAllText()Wyodrębnianie tekstu
pdf.FormWypełnianie formularzy
pdf.Sign()Podpisy cyfrowe

Przykłady migracji kodu

Przykład 1: Konwersja ciągu znaków HTML do formatu PDF

Przed (PDFreactor):

//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();
        
        string html = "<html><body><h1>Hello World</h1></body></html>";
        
        Configuration config = new Configuration();
        config.Document = html;
        
        Result result = pdfReactor.Convert(config);
        
        File.WriteAllBytes("output.pdf", result.Document);
    }
}
C#

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        string html = "<html><body><h1>Hello World</h1></body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(html);
        
        pdf.SaveAs("output.pdf");
    }
}

Podstawową różnicą jest wzorzec architektoniczny.PDFreactorwymaga utworzenia instancji PDFreactor (która łączy się z serwerem Java), osobnego obiektu Configuration do przechowywania ustawień i treści HTML, wywołania Convert(), która zwraca obiekt Result, a na końcu zapisania bajtów result.Document do pliku za pomocą File.WriteAllBytes().

IronPDF upraszcza to do utworzenia ChromePdfRenderer, bezpośredniego wywołania RenderHtmlAsPdf() z ciągiem HTML oraz użycia wbudowanej metody SaveAs() na zwróconym PdfDocument. Bez połączenia z serwerem, bez obiektu konfiguracyjnego, bez ręcznej obsługi bajtów. Kompleksowe przykłady można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.

Przykład 2: Konwersja adresów URL do formatu PDF

Przed (PDFreactor):

//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();
        
        Configuration config = new Configuration();
        config.Document = "https://www.example.com";
        
        Result result = pdfReactor.Convert(config);
        
        File.WriteAllBytes("webpage.pdf", result.Document);
    }
}
C#

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        
        pdf.SaveAs("webpage.pdf");
    }
}

PDFreactor używa tej samej właściwości config.Document zarówno dla ciągów HTML, jak i URL-i, automatycznie określając typ.IronPDF zapewnia jawne metody: RenderHtmlAsPdf() dla ciągów HTML i RenderUrlAsPdf() dla URL-i. To bezpośrednie podejście poprawia przejrzystość kodu i obsługę funkcji IntelliSense. Dowiedz się więcej z naszych samouczków.

Przykład 3: Nagłówki i stopki z numerami stron

Przed (PDFreactor):

//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();
        
        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
        
        Configuration config = new Configuration();
        config.Document = html;
        config.UserStyleSheets = new System.Collections.Generic.List<Resource>
        {
            new Resource { Content = "@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }" }
        };
        
        Result result = pdfReactor.Convert(config);
        
        File.WriteAllBytes("document.pdf", result.Document);
    }
}
C#

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Header Text"
        };
        
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page}"
        };
        
        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(html);
        
        pdf.SaveAs("document.pdf");
    }
}

Ten przykład pokazuje najważniejszą różnicę w składni.PDFreactorkorzysta z składniCSS Paged Mediaz regułami @page, regionami @bottom-center, oraz counter(page) dla numerów stron wprowadzanych przez listę UserStyleSheets elementów Resource.

IronPDF używa natywnego API .NET z obiektami TextHeaderFooter przypisanymi do RenderingOptions.TextHeader oraz RenderingOptions.TextFooter. Numery stron używają symbolu zastępczego {page} zamiast CSS counter(page).


Ważne uwagi dotyczące migracji

Nie wymaga serwera

IronPDF działa w trybie in-process — nie wymaga konfiguracji serwera Java:

// PDFreactor: Requires the Web Service running on a reachable host
var pdfReactor = new PDFreactor("http://localhost:9423/service/rest");

// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();

###CSS Paged Mediado IronPDF API

Zastąp reguły CSS @page opcjami RenderingOptions:

//PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } }
//IronPDF equivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter 
{ 
    CenterText = "Page {page}" 
};
C#

Składnia symbolu zastępczego numeru strony

//PDFreactorCSS: counter(page)
// IronPDF: {page}

//PDFreactorCSS: counter(pages)  
// IronPDF: {total-pages}

Obsługa wyników Zmiana

Konfiguracja + wzorzec wynikowy staje się bezpośrednim PdfDocument:

// PDFreactor: Configuration → Convert → Result → bytes
Result result = pdfReactor.Convert(config);
byte[] bytes = result.Document;
File.WriteAllBytes("output.pdf", bytes);

// IronPDF: Direct PdfDocument with built-in methods
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or: byte[] bytes = pdf.BinaryData;

Zmiana jednostek marginesu

PDFreactor używa ciągów znaków;IronPDF używa milimetrów:

// PDFreactor: config.PageMargins.Top = "1in"
// IronPDF: renderer.RenderingOptions.MarginTop = 25.4  // 1 inch in mm

Nowe możliwości po migracji

Po migracji do IronPDF zyskujesz możliwości, którychPDFreactornie jest w stanie zapewnić:

Łączenie plików PDF

var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");

Znaki wodne

pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");

Wyodrębnianie tekstu

string text = pdf.ExtractAllText();

Ochrona hasłem

pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";

Podsumowanie porównania funkcji

FunkcjaPDFreactorIronPDF
HTML do PDF
URL do pliku PDF
Nagłówki/stopkiCSS Paged MediaNatywne API
Ustawienia strony
Obsługa JavaScript
Natywny .NET
W trakcie realizacji
Łączenie plików PDF
Podział plików PDF
Znaki wodne
Ekstrakcja tekstu
Wypełnianie formularzy
Podpisy cyfrowe

Lista kontrolna migracji

Przed migracją

  • Sporządź spis wszystkich miejsc użyciaPDFreactorw kodzie źródłowym
  • Udokumentuj wszystkie zastosowane reguły CSS dotyczące mediów stronicowanych
  • Zwróć uwagę na wszystkie ustawienia konfiguracyjne (marginesy, rozmiar strony, JavaScript)
  • Zaplanuj przechowywanie klucza licencyjnego IronPDF(zalecane są zmienne środowiskowe)
  • Najpierw przetestuj z Licencją Trial IronPDF

Zmiany w pakiecie

  • Usuń bezpośrednie odwołanie do zestawu PDFreactor.dll z twojego .csproj
  • Wycofaj usluge sieciowaPDFreactor(Java/Jetty)
  • Zainstaluj pakiet NuGet: IronPdf dotnet add package IronPdf

Zmiany w kodzie

  • Zaktualizuj importy przestrzeni nazw (using RealObjects.PDFreactor.Webservice.Client;using IronPdf;)
  • Dodaj using IronPdf.Rendering; dla klas nagłówka/stopki
  • Zastąp klasę PDFreactor klasą ChromePdfRenderer
  • Przekształć obiekty Configuration na właściwości RenderingOptions
  • Zastąp config.Document = html przez renderer.RenderHtmlAsPdf(html)
  • Zastąp config.Document = url przez renderer.RenderUrlAsPdf(url)
  • Zastąp File.WriteAllBytes(path, result.Document) przez pdf.SaveAs(path)
  • Przekształć reguły CSS @page na obiekty TextFooter
  • Zaktualizuj symbole zastępcze numerów stron (counter(page){page})
  • Przekształć jednostki marginesu z ciągów znaków na milimetry

Migracja infrastruktury

  • Usunąć wymóg środowiska uruchomieniowego Java
  • Wycofanie serwera PDFreactor
  • Aktualizacja konfiguracji Docker/wdrożenia
  • Aktualizacja potoków CI/CD

Po migracji

  • Sprawdź, czy jakość pliku PDF odpowiada oczekiwaniom
  • Sprawdź renderowanie nagłówków/stopek
  • Sprawdź, czy używany jest JavaScript
  • W razie potrzeby dodaj nowe funkcje (scałanie, znaki wodne, zabezpieczenia)

Zwróć uwagę: PDFReactor jest zarejestrowanym znakiem towarowym odpowiedniego właściciela. Ta strona nie jest powiązana z, wspierana ani sponsorowana przez RealObjects. 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