Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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:

  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, PDFreactor wymaga 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 skomplikówać 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ó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

  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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Wyodrębnianie tekstu

string text = pdf.ExtractAllText();
string text = pdf.ExtractAllText();
Dim text As String = pdf.ExtractAllText()
$vbLabelText   $csharpLabel

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

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ę PDFreactor przez ChromePdfRenderer
  • Konwertuj 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)
  • Konwersja reguł 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 (scalanie, znaki wodne, zabezpieczenia)

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

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie