Jak przeprowadzić migrację z PDFreactor do IronPDF w języku C#
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:
-
Wymagane środowisko uruchomieniowe Java: Wymaga instalacji JRE/JDK na wszystkich serwerach.
-
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.
-
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.
-
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.
-
Oddzielne zarządzanie licencjami: Licencja przypisana do instancji serwera, a nie do aplikacji. Licencjonowanie na serwer powiązane z instancją usługi Java.
- Izolacja zasobów: Oddzielne zarządzanie pamięcią procesów i procesorem. Dodatkowy serwer do monitorowania, skalowania i konserwacji.
PorównaniePDFreactori IronPDF
| Funkcja/Aspekt | PDFreactor | IronPDF |
|---|---|---|
| Natywna biblioteka .NET | Nie (oparte na Javie) | Tak |
| Środowisko uruchomieniowe | Java (serwer zewnętrzny) | Natywny .NET (w ramach procesu) |
| Architektura | Usługa REST API | Biblioteka NuGet |
| Wdrożenie | Java + konfiguracja serwera | Pojedynczy pakiet NuGet |
| Zależności | JRE + klient HTTP | Samodzielny |
| Opóźnienie | Ruch sieciowy w obie strony | Bezpośrednie wywołania metod |
| Obsługa wielu platform | Tak (zależne od Javy) | Tak (w pakiecie z Chromium) |
| Obsługa CSS | Zaawansowana obsługa CSS3,CSS Paged Media | Kompleksowa obsługa HTML5/CSS3 |
| Złożoność wdrożenia | Bardziej złożone ze względu na Javę | Prosty, bezpośrednio integruje się z platformą .NET |
| Funkcje manipulacji plikami PDF | Podstawowe (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
- Ś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
#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
#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
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");
// 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");
' License configured on thePDFreactorWeb Service via config file or command line.
' The .NET client (RealObjects.PDFreactor.Webservice.Client) connects to that licensed service.
Dim pdfReactor = New PDFreactor("http://pdfreactor-server:9423/service/rest")
IronPDF (poziom aplikacji):
// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
' 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" .
# 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" .
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;
// Before:PDFreactor(Web Service client)
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports RealObjects.PDFreactor.Webservice.Client
Imports System.IO
' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
Mapowania klas podstawowych
| PDFreactor | IronPDF |
|---|---|
PDFreactor |
ChromePdfRenderer |
Configuration |
ChromePdfRenderOptions |
Result |
PdfDocument |
config.Document = html |
renderer.RenderHtmlAsPdf(html) |
result.Document (byte[]) |
pdf.BinaryData |
Mapowania właściwości konfiguracyjnych
| KonfiguracjaPDFreactor | IronPDF RenderingOptions |
|---|---|
config.Document = html |
renderer.RenderHtmlAsPdf(html) |
config.Document = url |
renderer.RenderUrlAsPdf(url) |
config.PageFormat = PageFormat.A4 |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
config.PageOrientation |
RenderingOptions.PaperOrientation |
config.PageMargins |
RenderingOptions.MarginTop/Bottom/Left/Right |
config.EnableJavaScript = true |
RenderingOptions.EnableJavaScript = true |
config.UserStyleSheets = new List<Resource>{...} |
Osadź CSS w HTML |
config.Title |
pdf.MetaData.Title |
config.Encryption |
pdf.SecuritySettings |
Nowe funkcje niedostępne w PDFreactor
| Funkcja IronPDF | Opis |
|---|---|
PdfDocument.Merge() |
Łączenie wielu plików PDF |
pdf.ApplyWatermark() |
Dodaj znaki wodne |
pdf.ExtractAllText() |
Wyodrębnianie tekstu |
pdf.Form |
Wypeł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);
}
}
//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);
}
}
Imports RealObjects.PDFreactor.Webservice.Client
Imports System.IO
Class Program
Shared Sub Main()
Dim pdfReactor As New PDFreactor()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim config As New Configuration()
config.Document = html
Dim result As Result = pdfReactor.Convert(config)
File.WriteAllBytes("output.pdf", result.Document)
End Sub
End Class
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");
}
}
// 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");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
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);
}
}
//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);
}
}
Imports RealObjects.PDFreactor.Webservice.Client
Imports System.IO
Class Program
Shared Sub Main()
Dim pdfReactor As New PDFreactor()
Dim config As New Configuration()
config.Document = "https://www.example.com"
Dim result As Result = pdfReactor.Convert(config)
File.WriteAllBytes("webpage.pdf", result.Document)
End Sub
End Class
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");
}
}
// 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");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
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);
}
}
//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);
}
}
Imports RealObjects.PDFreactor.Webservice.Client
Imports System.IO
Class Program
Shared Sub Main()
Dim pdfReactor As New PDFreactor()
Dim html As String = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"
Dim config As New Configuration()
config.Document = html
config.UserStyleSheets = New System.Collections.Generic.List(Of Resource) From {
New Resource With {.Content = "@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }"}
}
Dim result As Result = pdfReactor.Convert(config)
File.WriteAllBytes("document.pdf", result.Document)
End Sub
End Class
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");
}
}
// 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");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.CenterText = "Header Text"
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.CenterText = "Page {page}"
}
Dim html As String = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("document.pdf")
End Sub
End Module
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();
// 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();
' PDFreactor: Requires the Web Service running on a reachable host
Dim pdfReactor = New PDFreactor("http://localhost:9423/service/rest")
' IronPDF: No server URL needed
Dim 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}"
};
//PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } }
//IronPDF equivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};
'PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } }
'IronPDF equivalent:
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
.CenterText = "Page {page}"
}
Składnia symbolu zastępczego numeru strony
//PDFreactorCSS: counter(page)
// IronPDF: {page}
//PDFreactorCSS: counter(pages)
// IronPDF: {total-pages}
//PDFreactorCSS: counter(page)
// IronPDF: {page}
//PDFreactorCSS: counter(pages)
// IronPDF: {total-pages}
'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;
// 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;
' PDFreactor: Configuration → Convert → Result → bytes
Dim result As Result = pdfReactor.Convert(config)
Dim bytes As Byte() = result.Document
File.WriteAllBytes("output.pdf", bytes)
' IronPDF: Direct PdfDocument with built-in methods
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
' Or: Dim bytes As Byte() = 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
// PDFreactor: config.PageMargins.Top = "1in"
// IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mm
' 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");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Znaki wodne
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")
Wyodrębnianie tekstu
string text = pdf.ExtractAllText();
string text = pdf.ExtractAllText();
Dim text As String = pdf.ExtractAllText()
Ochrona hasłem
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
Podsumowanie porównania funkcji
| Funkcja | PDFreactor | IronPDF |
|---|---|---|
| HTML do PDF | ✓ | ✓ |
| URL do pliku PDF | ✓ | ✓ |
| Nagłówki/stopki | CSS Paged Media | Natywne 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.dllz twojego.csproj - Wycofaj usluge sieciowaPDFreactor(Java/Jetty)
- Zainstaluj pakiet NuGet:
IronPdfdotnet 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ę
PDFreactorklasąChromePdfRenderer - Przekształć obiekty
Configurationna właściwościRenderingOptions - Zastąp
config.Document = htmlprzezrenderer.RenderHtmlAsPdf(html) - Zastąp
config.Document = urlprzezrenderer.RenderUrlAsPdf(url) - Zastąp
File.WriteAllBytes(path, result.Document)przezpdf.SaveAs(path) - Przekształć reguły CSS
@pagena obiektyTextFooter - 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)

