Jak przeprowadzić migrację z PDFreactor do IronPDF w języku C#
Przejście z PDFreactor naIronPDFeliminuje 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ść z PDFreactor na 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, PDFreactor wykorzystuje swoją autorską technologię do konwersji treści HTML i CSS na wysokiej jakości dokumenty PDF. Wśród swoich godnych uwagi cech PDFreactor obsługuje szeroki wachlarz właściwości CSS, co czyni go silnym kandydatem do renderowania złożonych układów.
Jednak zależność PDFreactor od 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
Architektura PDFreactor stwarza 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, PDFreactor wymaga 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 skomplikówać 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ównanie PDFreactor i 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 scalanie, dzielenie, edycja i dodawanie adnotacji |
W przeciwieństwie do PDFreactor,IronPDFprezentuje się jako natywna biblioteka .NET, zaprojektowana specjalnie w celu płynnej integracji z projektami .NET bez zewnętrznych zależności, takich jak Java.IronPDFwykorzystuje wbudowany silnik renderujący Chromium, co pozwala na konwersję HTML do PDF za pomocą zaledwie kilku linii kodu.
Dla zespołów planujących wdrożenie .NET 10 i C# 14 w latach 2025 i 2026,IronPDFoferuje natywne rozwiązanie .NET, które eliminuje złożoność serwerów Java, zapewniając jednocześnie kompleksowe zarządzanie cyklem życia plików 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
# Remove PDFreactor NuGet packages
dotnet remove package PDFreactor.NET
dotnet remove package PDFreactor.Native.Windows.x64
# Stop PDFreactor server service (if running locally)
# Windows: net stop PDFreactor
# Linux: sudo systemctl stop pdfreactor
# Install IronPDF
dotnet add package IronPdf
# Remove PDFreactor NuGet packages
dotnet remove package PDFreactor.NET
dotnet remove package PDFreactor.Native.Windows.x64
# Stop PDFreactor server service (if running locally)
# Windows: net stop PDFreactor
# Linux: sudo systemctl stop pdfreactor
# Install IronPDF
dotnet add package IronPdf
Konfiguracja licencji
PDFreactor (oparty na serwerze):
// License configured on server via config file or command line
// Client connects to licensed server
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423");
// License configured on server via config file or command line
// Client connects to licensed server
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423");
' License configured on server via config file or command line
' Client connects to licensed server
Dim pdfReactor = New PDFreactor("http://pdfreactor-server:9423")
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
# Find PDFreactor usage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .
# FindCSS Paged Mediarules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .
# Find PDFreactor usage
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
using RealObjects.PDFreactor;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PDFreactor
using RealObjects.PDFreactor;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
Imports System.IO
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
| Konfiguracja PDFreactor | 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.AddUserStyleSheet(css) |
Osadź CSS w HTML |
config.Title |
pdf.MetaData.Title |
config.Encryption |
pdf.SecuritySettings |
Nowe funkcje niedostępne w PDFreactor
| FunkcjaIronPDF | 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):
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = 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);
}
}
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = 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
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. PDFreactor wymaga utworzenia instancji PDFreactor (która łączy się z serwerem Java), oddzielnego obiektu Configuration do przechowywania ustawień i treści HTML, wywołania Convert(), które zwraca obiekt Result, a na koniec zapisanie bajtów result.Document do pliku przy użyciu File.WriteAllBytes().
IronPDF upraszcza to do utworzenia ChromePdfRenderer, bezpośredniego wywołania RenderHtmlAsPdf() za pomocą ciągu 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):
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = new PDFreactor();
Configuration config = new Configuration();
config.Document = "https://www.example.com";
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("webpage.pdf", result.Document);
}
}
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = 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
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 adresów URL, automatycznie określając typ.IronPDFudostępnia wyraźne metody: RenderHtmlAsPdf() dla ciągów HTML i RenderUrlAsPdf() dla adresów URL. 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):
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = 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.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }");
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("document.pdf", result.Document);
}
}
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = 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.AddUserStyleSheet("@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
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.AddUserStyleSheet("@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. PDFreactor wykorzystuje składnięCSS Paged Mediaz regułami @page, regionami @bottom-center oraz counter(page) dla numerów stron wstawianych za pomocą AddUserStyleSheet().
IronPDF wykorzystuje natywny interfejs API .NET z obiektami TextHeaderFooter przypisanymi do RenderingOptions.TextHeader i RenderingOptions.TextFooter. Numery stron wykorzystują symbol zastępczy {page} zamiast CSS counter(page). Należy pamiętać, żeIronPDFwymaga również zaimportowania przestrzeni nazw IronPdf.Rendering dla klas nagłówków/stopek.
Ważne uwagi dotyczące migracji
Nie wymaga serwera
IronPDF działa w trybie in-process — nie wymaga konfiguracji serwera Java:
// PDFreactor: Requires server connection
var pdfReactor = new PDFreactor("http://localhost:9423");
// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();
// PDFreactor: Requires server connection
var pdfReactor = new PDFreactor("http://localhost:9423");
// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();
' PDFreactor: Requires server connection
Dim pdfReactor = New PDFreactor("http://localhost:9423")
' IronPDF: No server URL needed
Dim renderer = New ChromePdfRenderer()
CSS Paged MediadoIronPDFAPI
Zastąp reguły CSS @page przez RenderingOptions:
// PDFreactor CSS: @page { @bottom-center { content: 'Page ' counter(page); } }
//IronPDFequivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};
// PDFreactor CSS: @page { @bottom-center { content: 'Page ' counter(page); } }
//IronPDFequivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};
' PDFreactor CSS: @page { @bottom-center { content: 'Page ' counter(page); } }
' IronPDFequivalent:
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
.CenterText = "Page {page}"
}
Składnia symbolu zastępczego numeru strony
// PDFreactor CSS: counter(page)
// IronPDF: {page}
// PDFreactor CSS: counter(pages)
// IronPDF: {total-pages}
// PDFreactor CSS: counter(page)
// IronPDF: {page}
// PDFreactor CSS: counter(pages)
// IronPDF: {total-pages}
' PDFreactor CSS: counter(page)
' IronPDF: {page}
' PDFreactor CSS: 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;IronPDFuż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 doIronPDFzyskujesz możliwości, których PDFreactor nie 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życia PDFreactor w 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 licencyjnegoIronPDF(zalecane są zmienne środowiskowe)
- Najpierw przetestuj z Licencją Trial IronPDF
Zmiany w pakiecie
- Usuń pakiet NuGet
PDFreactor.NET - Usuń pakiet NuGet
PDFreactor.Native.Windows.x64 - Zainstaluj pakiet NuGet
IronPdf:dotnet add package IronPdf
Zmiany w kodzie
- Zaktualizuj importy przestrzeni nazw (
using RealObjects.PDFreactor;→using IronPdf;) - Dodaj
using IronPdf.Rendering;dla klas nagłówków/stopek - Zastąp klasę
PDFreactorprzezChromePdfRenderer - Konwertuj 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) - Konwersja reguł 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 (scalanie, znaki wodne, zabezpieczenia)

