Zum Fußzeileninhalt springen
VIDEOS

Wie SVGs zu PDF mit C# konvertieren

Die Migration von PDFreactorzu IronPDF beseitigt Java-Abhängigkeiten und die Server-Infrastruktur und bietet gleichzeitig gleichwertige HTML-zu-PDF-Konvertierungsfunktionen durch eine native .NET-Bibliothek. Dieses Handbuch bietet einen vollständigen, schrittweisen Migrationspfad, der Ihre Java-basierte Serverarchitektur durch eine prozessinterne Bibliothek ersetzt, die sich nahtlos in .NET-Anwendungen integrieren lässt.

Warum von PDFreactorzu IronPDF migrieren

PDFreactorkennenlernen

PDFreactor ist ein leistungsstarker HTML-zu-PDF-Konvertierungsserver, der sich in verschiedene Plattformen integrieren lässt. Als kommerzielle Lösung nutzt PDFreactorseine proprietäre Technologie, um HTML- und CSS-Inhalte in hochwertige PDF-Dokumente zu konvertieren. Zu den bemerkenswerten Eigenschaften von PDFreactorgehört, dass es eine Vielzahl von CSS-Eigenschaften unterstützt, was es zu einem guten Kandidaten für komplexes Layout-Rendering macht.

Die Tatsache, dass PDFreactorauf Java basiert, stellt jedoch in .NET-Umgebungen eine gewisse Herausforderung dar, da die nicht-native Natur von Java den Einsatz und die Integration erschweren kann. Die Abhängigkeit von Java führt zu zusätzlichem Aufwand in .NET-Anwendungen und erfordert oft zusätzliche Integrationsarbeit.

Das Java-Abhängigkeitsproblem

Die Architektur von PDFreactorbringt einige Herausforderungen in .NET-Umgebungen mit sich:

  1. Java Runtime erforderlich: Die Installation von JRE/JDK ist auf allen Servern notwendig.

  2. Serverarchitektur: Läuft als separater Dienst und erfordert zusätzliche Infrastruktur. Als serverbasierte Lösung benötigt PDFreactorfür jede Konvertierung einen REST-API-Aufruf.

  3. Komplexe Bereitstellung: Die Verwaltung von Java-Abhängigkeiten in einem primär auf .NET basierenden Ökosystem kann die Einrichtung verkomplizieren und die Wartungskosten erhöhen. Zwei Laufzeiten (Java + .NET) zur Verwaltung in CI/CD-Pipelines.

  4. Interprozesskommunikation: Die Kommunikation über REST-API oder Sockets führt zu Latenz. Jede PDF-Konvertierung erfordert einen HTTP-Roundtrip zum Server.

  5. Separates Lizenzmanagement: Die Lizenz ist an die Serverinstanz und nicht an die Anwendung gebunden. Die Lizenzierung pro Server ist an die Java-Service-Instanz gebunden.

  6. Ressourcenisolation: Trennung von Prozessspeicher und CPU-Verwaltung. Zusätzlicher Server zur Überwachung, Skalierung und Wartung.

PDFreactorvs IronPDF Vergleich

Merkmal/Aspekt PDFreactor IronPDF
Native .NET-Bibliothek Nein (Java-basiert) Ja
Laufzeit Java (externer Server) Native .NET(in Bearbeitung)
Architektur REST-API-Dienst NuGet-Bibliothek
Einsatz Java + Server-Konfiguration Einzelnes NuGet-Paket
Abhängigkeiten JRE + HTTP-Client In sich geschlossen
Latenzzeit Netzwerk-Round-Trip Direkte Methodenaufrufe
Plattformübergreifende Eignung Ja (Java-abhängig) Ja (Gebündeltes Chromium)
CSS-Unterstützung Erweiterte Unterstützung für CSS3, CSS Paged Media Umfassende HTML5/CSS3-Unterstützung
Bereitstellungskomplexität Komplexer aufgrund von Java Einfach, direkt integriert mit .NET
Funktionen zur PDF-Bearbeitung Basic (nur Generierung) Umfangreich, einschließlich Zusammenführen, Teilen, Bearbeiten und Kommentieren

Im Gegensatz zu PDFreactorpräsentiert sich IronPDF als native .NET-Bibliothek, die speziell für die nahtlose Integration in .NET-Projekte ohne externe Abhängigkeiten wie Java entwickelt wurde.IronPDF verwendet eine gebündelte Chromium-Rendering-Engine, die es ermöglicht, HTML mit nur wenigen Codezeilen in PDF zu konvertieren.

Für Teams, die moderne .NET-Versionen einführen, bietet IronPDF eine native .NET-Lösung, die die Java-Server-Komplexität eliminiert und gleichzeitig umfassendes PDF-Lifecycle-Management bietet.


Bevor Sie beginnen

Voraussetzungen

  1. .NET -Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet -Zugriff: Möglichkeit zur Installation von NuGet -Paketen
  3. IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.

NuGet-Paketänderungen

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

# Stop PDFreactorWeb 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.

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

# Install IronPDF
dotnet add package IronPdf
SHELL

Lizenz-Konfiguration

PDFreactor (serverbasiert):

// License configured on the PDFreactorWeb 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 the PDFreactorWeb 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 the PDFreactorWeb 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")
$vbLabelText   $csharpLabel

IronPDF (Anwendungsebene):

// 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

PDFreactor-Verwendung identifizieren

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

# Find CSS Ausgelagerte Medienrules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .
# Find PDFreactorusage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .

# Find CSS Ausgelagerte Medienrules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .
SHELL

Komplette API-Referenz

Namensraumänderungen

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

Kernklassen-Zuordnungen

PDFreactor IronPDF
PDFreactor ChromePdfRenderer
Configuration ChromePdfRenderOptions
Result PdfDocument
config.Document = html renderer.RenderHtmlAsPdf(html)
result.Document (byte[]) pdf.BinaryData

Zuordnungen von Konfigurationseigenschaften

PDFreactor-Konfiguration IronPDF RenderingOptionen
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>{...} CSS in HTML einbetten
config.Title pdf.MetaData.Title
config.Encryption pdf.SecuritySettings

Neue Funktionen, die in PDFreactornicht verfügbar sind

IronPDF Merkmal Beschreibung
PdfDocument.Merge() Mehrere PDFs zusammenführen
pdf.ApplyWatermark() Wasserzeichen hinzufügen
pdf.ExtractAllText() Textextraktion
pdf.Form Ausfüllen von Formularen
pdf.Sign() Digitale Signaturen

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML-Strings in PDF

Vor (PDFreactor):

// PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run the PDFreactorWeb 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 the PDFreactorWeb 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

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

Nach (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

Der grundlegende Unterschied ist das Architekturmuster. PDFreactorerfordert die Erstellung einer PDFreactor Instanz (die mit dem Java-Server verbindet), eines separaten Configuration Objekts zur Speicherung von Einstellungen und HTML-Inhalten, das Aufrufen von Convert(), das ein Result Objekt zurückgibt, und schließlich das Schreiben der result.Document Bytes in die Datei mit File.WriteAllBytes().

IronPDF vereinfacht dies zu der Erstellung eines ChromePdfRenderer, dem direkten Aufruf von RenderHtmlAsPdf() mit dem HTML-String und der Verwendung der eingebauten SaveAs() Methode auf dem zurückgegebenen PdfDocument. Keine Serververbindung, kein Konfigurationsobjekt, keine manuelle Byte-Verarbeitung. Umfassende Beispiele finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Konvertierung von URL in PDF

Vor (PDFreactor):

// PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run the PDFreactorWeb 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 the PDFreactorWeb 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
$vbLabelText   $csharpLabel

Nach (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 verwendet dieselbe config.Document Eigenschaft sowohl für HTML-Strings als auch für URLs und bestimmt den Typ automatisch.IronPDF bietet explizite Methoden: RenderHtmlAsPdf() für HTML-Strings und RenderUrlAsPdf() für URLs. Dieser explizite Ansatz verbessert die Klarheit des Codes und die IntelliSense-Unterstützung. Erfahren Sie mehr in unseren Tutorials.

Beispiel 3: Kopf- und Fußzeilen mit Seitenzahlen

Vor (PDFreactor):

// PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run the PDFreactorWeb 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 the PDFreactorWeb 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
$vbLabelText   $csharpLabel

Nach (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

Dieses Beispiel zeigt den größten Unterschied in der Syntax. PDFreactorverwendet die CSS Paged Media-Syntax mit @page Regeln, @bottom-center Regionen und counter(page) für Seitennummern, die über die UserStyleSheets Liste von Resource Elementen eingefügt werden.

IronPDF verwendet eine native .NET-API mit TextHeaderFooter Objekten, die RenderingOptions.TextHeader und RenderingOptions.TextFooter zugewiesen sind. Seitennummern verwenden den {page} Platzhalter anstelle von CSS counter(page).


Kritische Hinweise zur Migration

Kein Server erforderlich

IronPDF wird prozessintern ausgeführt - es muss kein Java-Server konfiguriert werden:

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

CSS Ausgelagerte Medienzu IronPDF API

Ersetzen Sie CSS @page Regeln durch 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}"
}
$vbLabelText   $csharpLabel

Seitennummern-Platzhalter-Syntax

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

Änderung der Ergebnisbehandlung

Konfiguration + Ergebnismuster wird direkt zu 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

Margeneinheiten ändern

PDFreactor verwendet Zeichenketten;IronPDF arbeitet mit Millimetern:

// 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

Neue Funktionen nach der Migration

Nach der Umstellung auf IronPDF erhalten Sie Funktionen, die PDFreactornicht bieten kann:

PDF-Zusammenführung

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

Wasserzeichen

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

Textextraktion

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

Passwortschutz

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

Zusammenfassung des Funktionsvergleichs

Feature PDFreactor IronPDF
HTML zu PDF
URL zu PDF
Kopf-/Fußzeilen CSS Ausgelagerte Medien Native API
Seite Einstellungen
JavaScript-Unterstützung
Native .NET
In Bearbeitung
PDFs zusammenführen
PDFs teilen
Wasserzeichen
Textextraktion
Formular ausfüllen
Digitale Signaturen

Migrations-Checkliste

Vor der Migration

  • Erfassung aller PDFreactor-Nutzungen im Quellcode
  • Alle verwendeten CSS-Regeln für Seitenmedien dokumentieren
  • Notieren Sie alle Konfigurationseinstellungen (Ränder, Seitengröße, JavaScript)
  • Speicherung des IronPDF-Lizenzschlüssels (Umgebungsvariablen empfohlen)
  • Zuerst mit der IronPDF Testlizenz testen

Paketänderungen

  • Entfernen Sie die direkte PDFreactor.dll Assembly-Referenz aus Ihrem .csproj
  • Geben Sie den PDFreactor-Webdienst (Java/Jetty) außer Betrieb
  • Installieren Sie das IronPdf NuGet-Paket: dotnet add package IronPdf

Code-Änderungen

  • Aktualisieren Sie die Namespace-Importe (using RealObjects.PDFreactor.Webservice.Client;using IronPdf;)
  • Fügen Sie using IronPdf.Rendering; für Header/Footer-Klassen hinzu
  • Ersetzen Sie die PDFreactor Klasse durch ChromePdfRenderer
  • Konvertieren Sie Configuration Objekte in RenderingOptions Eigenschaften
  • Ersetzen Sie config.Document = html durch renderer.RenderHtmlAsPdf(html)
  • Ersetzen Sie config.Document = url durch renderer.RenderUrlAsPdf(url)
  • Ersetzen Sie File.WriteAllBytes(path, result.Document) durch pdf.SaveAs(path)
  • Konvertieren Sie CSS @page Regeln in TextFooter Objekte
  • Aktualisieren Sie die Platzhalter für Seitennummern (counter(page){page})
  • Umrechnung von Randeinheiten von Zeichenketten in Millimeter

Infrastruktur-Migration

  • Java-Laufzeitvoraussetzung entfernen
  • PDFreactor-Server außer Betrieb nehmen
  • Docker-/Bereitstellungskonfigurationen aktualisieren
  • CI/CD-Pipelines aktualisieren

Nach der Migration

  • Testen Sie, ob die Qualität der PDF-Ausgabe den Erwartungen entspricht
  • Überprüfung der Darstellung von Kopf- und Fußzeile
  • Überprüfen Sie die JavaScript Ausführung, falls verwendet
  • Fügen Sie bei Bedarf neue Funktionen hinzu (Zusammenführung, Wasserzeichen, Sicherheit).

Hinweis:PDFReactor ist ein eingetragenes Warenzeichen seines jeweiligen Eigentümers. Diese Website ist nicht mit RealObjects verbunden, unterstützt oder gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an