Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Wie man von Apache PDFBox zu IronPDF migriert

Migrieren Sie von Apache PDFBox zu IronPDF: Vollständige C#-Migrationsanleitung

Apache PDFBox ist eine angesehene Open-Source-Java-Bibliothek für die PDF-Bearbeitung. Für .NET-Entwickler gibt es jedoch nur inoffizielle, von der Community betriebene Portierungen, die erhebliche Probleme mit sich bringen - APIs im Java-Stil, unvollständige Funktionsabdeckung und spärliche Unterstützung der .NET-Community. Dieser umfassende Leitfaden bietet einen schrittweisen Migrationspfad von Apache PDFBox .NET-Anschlüssezu IronPDF, einer nativen .NET PDF-Bibliothek, die von Grund auf für das .NET-Ökosystem entwickelt wurde.

Warum von den Apache PDFBox .NET-Anschlüsseweggehen?

Während sich Apache PDFBox im Java-Ökosystem auszeichnet, stellen seine inoffiziellen .NET-Portierungen eine Reihe von Herausforderungen dar, die sich auf .NET-Entwicklungsteams auswirken.

Inoffizieller Status des Ports

Apache PDFBox ist im Wesentlichen eine Java-Bibliothek. Bei allen .NET-Versionen handelt es sich um von der Gemeinschaft betriebene Portierungen, die keine offizielle Unterstützung durch das Apache-Projekt erhalten. Diese Portierungen hinken häufig den Java-Releases hinterher und verpassen möglicherweise wichtige Funktionen, Fehlerbehebungen oder Sicherheitsupdates. Für Teams, die Anwendungen entwickeln, deren Anforderungen an die Langlebigkeit bis ins Jahr 2025 und 2026 reichen, stellt diese Unsicherheit ein technisches Risiko dar.

Java-First API Entwurf

Die portierten APIs behalten die Java-Konventionen bei, die sich im .NET-Code fremd anfühlen. Entwickler treffen auf camelCase-Methoden anstelle von PascalCase, Java File-Objekte anstelle von Standard-.NET-Strings und explizite close()-Aufrufe anstelle von IDisposable-Mustern. Dieser kognitive Mehraufwand wirkt sich auf die Entwicklungsgeschwindigkeit und die Wartbarkeit des Codes aus.

Keine HTML-Rendering-Fähigkeit

Apache PDFBox ist für die Bearbeitung von PDF-Dateien konzipiert, nicht für die Umwandlung von HTML in PDF. Die Erstellung von PDFs erfordert eine manuelle Seitenkonstruktion mit präziser Koordinatenpositionierung - ein langwieriger und fehleranfälliger Prozess, der nicht für die Anforderungen der modernen Dokumentenerstellung geeignet ist.

Eingeschränkte Unterstützung der .NET-Community

Das .NET-Ökosystem um die Apache PDFBox-Ports ist spärlich. Die Suche nach Hilfe, Beispielen oder Best Practices für .NET-spezifische Themen gestaltet sich im Vergleich zu Bibliotheken mit aktiven .NET-Communities schwierig.

Potenzielle JVM-Abhängigkeiten

Einige Apache-PDFBox-Portierungen erfordern möglicherweise Java-Laufzeitkomponenten, was die Bereitstellung und das Umgebungsmanagement in .NET-fokussierten Infrastrukturen noch komplexer macht.

Apache PDFBox vs. IronPDF: Hauptunterschiede

Das Verständnis der grundlegenden Unterschiede zwischen diesen Bibliotheken hilft bei der Planung einer effektiven Migrationsstrategie.

Aspekt Apache PDFBox .NET-Anschlüsse IronPDF
Natives Design Java-zentrierte, inoffizielle .NET-Portierung Natives .NET, professionell unterstützt
API-Stil Java-Konventionen (camelCase, close()) Idiomatisches C# (PascalCase, benutzen)
HTML-Rendering Nicht unterstützt (manueller Seitenaufbau) Vollständig Chromium-basiertes HTML/CSS/JS
PDF-Erstellung Manuelle Koordinatenpositionierung CSS-basiertes Layout
Gemeinschaft Java-zentriert, wenig .NET-Ressourcen Aktive .NET-Gemeinschaft, mehr als 10 Millionen Downloads
Unterstützung Nur für die Gemeinschaft Professionelle Unterstützung verfügbar
Ressourcen-Bereinigung Explizite close()-Aufrufe IDisposable mit using-Anweisungen

Vorbereitung auf die Migration

Voraussetzungen

Stellen Sie sicher, dass Ihre Umgebung diese Anforderungen erfüllt:

  • .NET Framework 4.6.2+ oder .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ oder JetBrains Rider
  • NuGet Package Manager Zugang
  • IronPDF-Lizenzschlüssel (kostenlose Testversion erhältlich unter ironpdf.com)

Audit der Apache PDFBox-Nutzung

Führen Sie diese Befehle in Ihrem Lösungsverzeichnis aus, um alle Apache PDFBox-Referenzen zu identifizieren:

grep -r "apache.pdfbox\|PdfBox\|PDDocument\|PDFTextStripper" --include="*.cs" .
grep -r "PdfBox\|Apache.PdfBox" --include="*.csproj" .
grep -r "apache.pdfbox\|PdfBox\|PDDocument\|PDFTextStripper" --include="*.cs" .
grep -r "PdfBox\|Apache.PdfBox" --include="*.csproj" .
SHELL

Bahnbrechende Änderungen, die zu erwarten sind

Kategorie Apache PDFBox .NET-Anschluss IronPDF Migration Aktion
Objektmodell PDDocument, PDPage PdfDocument, ChromePdfRenderer Unterschiedliche Klassenhierarchie
PDF-Erstellung Manuelle Seiten-/Inhaltsströme HTML-Rendering Neuschreiben der Erstellungslogik
Methode Stil camelCase() (Java-Stil) PascalCase() (.NET-Stil) Methodennamen aktualisieren
Bereinigung von Ressourcen document.close() Verwendung-Anweisungen Entsorgungsmuster ändern
Dateizugriff Java Datei-Objekte .NET Standard Strings/Streams .NET-Typen verwenden
Textextraktion PDFTextStripper Klasse pdf.ExtractAllText() Einfachere API

Schritt-für-Schritt-Migrationsprozess

Schritt 1: NuGet-Pakete aktualisieren

Entfernen Sie die Apache PDFBox .NET-Port-Pakete und installieren Sie IronPDF:

# Remove PDFBox .NET port packages
dotnet remove package PdfBox
dotnet remove package PDFBoxNet
dotnet remove package Apache.PdfBox

# Install IronPDF
dotnet add package IronPdf
# Remove PDFBox .NET port packages
dotnet remove package PdfBox
dotnet remove package PDFBoxNet
dotnet remove package Apache.PdfBox

# Install IronPDF
dotnet add package IronPdf
SHELL

Schritt 2: Konfigurieren des Lizenzschlüssels

Fügen Sie den IronPDF-Lizenzschlüssel beim Starten der Anwendung hinzu:

// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Schritt 3: Aktualisieren der Namensraum-Referenzen

Führen Sie ein globales Suchen und Ersetzen in Ihrer Lösung durch:

Finden Sie Ersetzen durch
Verwendung von org.apache.pdfbox.pdmodel; IronPdf verwenden;
Verwendung von org.apache.pdfbox.text; IronPdf verwenden;
Verwendung von org.apache.pdfbox.multipdf; IronPdf verwenden;
Verwendung von PdfBoxDotNet.Pdmodel; IronPdf verwenden;
Verwendung von Apache.Pdfbox.PdModel; IronPdf verwenden;

Komplette API-Migrationsreferenz

Dokumentenoperationen

Apache PDFBox-Methode IronPDF-Methode Notizen
PDDocument.load(Pfad) PdfDocument.FromFile(path) PDF laden
PDDocument.load(stream) PdfDocument.FromStream(stream) Vom Stream laden
new PDDocument() new ChromePdfRenderer() Für die Erstellung von PDFs
document.save(path) pdf.SaveAs(Pfad) PDF speichern
document.close() Benutzen Anweisung oder Entsorgen() Bereinigung
document.getNumberOfPages() pdf.PageCount Eigenschaft Seitenzahl
document.getPage(index) pdf.Seiten[index] Seite aufrufen
document.removePage(index) pdf.RemovePages(index) Seiten entfernen

Textextraktion

Apache PDFBox-Methode IronPDF-Methode Notizen
new PDFTextStripper() Nicht erforderlich Kein Stripper-Objekt erforderlich
stripper.getText(Dokument) pdf.ExtractAllText() Vollständige Dokumentenextraktion
stripper.setStartPage(n) pdf.Seiten[n].Text Extraktion pro Seite
stripper.setSortByPosition(true) Automatisch Eingebaute Textsortierung

Merge- und Split-Operationen

Apache PDFBox-Methode IronPDF-Methode Notizen
new PDFMergerUtility() Nicht erforderlich Statische Merge-Methode
merger.addSource(file) Laden mit FromFile() Laden Sie zuerst die Dokumente
merger.mergeDocuments() PdfDocument.Merge(pdfs) Statische Zusammenführung
neuer Splitter() Nicht erforderlich Direkte Seitenmanipulation
splitter.split(Dokument) pdf.CopyPages(indices) Kopieren bestimmter Seiten

Sicherheit und Verschlüsselung

Apache PDFBox-Methode IronPDF-Methode Notizen
StandardSchutzPolicy pdf.SecuritySettings Sicherheitskonfiguration
policy.setUserPassword() pdf.SecuritySettings.UserPassword Benutzer-Passwort
policy.setOwnerPassword() pdf.SecuritySettings.OwnerPassword Passwort des Eigentümers
policy.setPermissions() pdf.SecuritySettings.AllowUserXxx Berechtigungen

Beispiele für die Code-Migration

Textextraktion

Die häufigste Apache PDFBox-Operation demonstriert die API-Vereinfachung, dieIronPDFbietet.

Apache PDFBox .NET Port Implementierung:

// Apache PDFBox .NET ports are experimental and incomplete
using PdfBoxDotNet.Pdmodel;
using PdfBoxDotNet.Text;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Note: PDFBox-dotnet has limited functionality
        using (var document = PDDocument.Load("document.pdf"))
        {
            var stripper = new PDFTextStripper();
            string text = stripper.GetText(document);
            Console.WriteLine(text);
        }
    }
}
// Apache PDFBox .NET ports are experimental and incomplete
using PdfBoxDotNet.Pdmodel;
using PdfBoxDotNet.Text;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Note: PDFBox-dotnet has limited functionality
        using (var document = PDDocument.Load("document.pdf"))
        {
            var stripper = new PDFTextStripper();
            string text = stripper.GetText(document);
            Console.WriteLine(text);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");
        string text = pdf.ExtractAllText();
        Console.WriteLine(text);

        // Or extract text from specific pages
        string pageText = pdf.ExtractTextFromPage(0);
        Console.WriteLine(pageText);
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");
        string text = pdf.ExtractAllText();
        Console.WriteLine(text);

        // Or extract text from specific pages
        string pageText = pdf.ExtractTextFromPage(0);
        Console.WriteLine(pageText);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF eliminiert die PDFTextStripper-Klasse vollständig und ersetzt die mehrstufige Extraktion durch einen einzigen Methodenaufruf.

HTML-zu-PDF-Konvertierung

Apache PDFBox unterstützt die HTML-zu-PDF-Konvertierung nicht nativ - dies stellt eine grundlegende Lücke dar.

Apache PDFBox .NET Port (wird nicht unterstützt):

// Apache PDFBox does not have official .NET port
// Community ports like PDFBox-dotnet are incomplete
// and do not support HTML to PDF conversion natively.
// You would need to use additional libraries like
// iText or combine with HTML renderers separately.

using PdfBoxDotNet.Pdmodel;
using System.IO;

// Note: This is NOT supported in PDFBox
// PDFBox is primarily for PDF manipulation, not HTML rendering
// You would need external HTML-Renderingengine
// Apache PDFBox does not have official .NET port
// Community ports like PDFBox-dotnet are incomplete
// and do not support HTML to PDF conversion natively.
// You would need to use additional libraries like
// iText or combine with HTML renderers separately.

using PdfBoxDotNet.Pdmodel;
using System.IO;

// Note: This is NOT supported in PDFBox
// PDFBox is primarily for PDF manipulation, not HTML rendering
// You would need external HTML-Renderingengine
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is HTML to PDF</p>");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is HTML to PDF</p>");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die Chromium-basierte Rendering-Engine vonIronPDFbietet vollständige HTML-, CSS- und JavaScript-Unterstützung. Für fortgeschrittene Szenarien siehe die HTML zu PDF Dokumentation.

Mehrere PDFs zusammenführen

Apache PDFBox .NET Port Implementierung:

// Apache PDFBox .NET port attempt (incomplete support)
using PdfBoxDotNet.Pdmodel;
using PdfBoxDotNet.Multipdf;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // PDFBox-dotnet ports have incomplete API coverage
        var merger = new PDFMergerUtility();
        merger.AddSource("document1.pdf");
        merger.AddSource("document2.pdf");
        merger.SetDestinationFileName("merged.pdf");
        merger.MergeDocuments();
        Console.WriteLine("PDFs merged");
    }
}
// Apache PDFBox .NET port attempt (incomplete support)
using PdfBoxDotNet.Pdmodel;
using PdfBoxDotNet.Multipdf;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // PDFBox-dotnet ports have incomplete API coverage
        var merger = new PDFMergerUtility();
        merger.AddSource("document1.pdf");
        merger.AddSource("document2.pdf");
        merger.SetDestinationFileName("merged.pdf");
        merger.MergeDocuments();
        Console.WriteLine("PDFs merged");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var pdf3 = PdfDocument.FromFile("document3.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var pdf3 = PdfDocument.FromFile("document3.pdf");

        var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die statische Merge-Methode vonIronPDFakzeptiert mehrere Dokumente direkt, so dass das Muster der Utility-Klasse entfällt.

PDFs von Grund auf neu erstellen

Der größte Unterschied tritt bei der Erstellung von PDFs auf. Apache PDFBox erfordert eine manuelle Koordinatenpositionierung.

Apache PDFBox .NET Port Implementierung:

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.font;
using org.apache.pdfbox.pdmodel.edit;

public void CreatePdf(string outputPath)
{
    PDDocument document = new PDDocument();
    try
    {
        PDPage page = new PDPage();
        document.addPage(page);

        PDPageContentStream contentStream = new PDPageContentStream(document, page);
        PDFont font = PDType1Font.HELVETICA_BOLD;

        contentStream.beginText();
        contentStream.setFont(font, 24);
        contentStream.moveTextPositionByAmount(72, 700);
        contentStream.drawString("Hello World");
        contentStream.endText();

        contentStream.beginText();
        contentStream.setFont(PDType1Font.HELVETICA, 12);
        contentStream.moveTextPositionByAmount(72, 650);
        contentStream.drawString("This is a paragraph of text.");
        contentStream.endText();

        contentStream.close();
        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.font;
using org.apache.pdfbox.pdmodel.edit;

public void CreatePdf(string outputPath)
{
    PDDocument document = new PDDocument();
    try
    {
        PDPage page = new PDPage();
        document.addPage(page);

        PDPageContentStream contentStream = new PDPageContentStream(document, page);
        PDFont font = PDType1Font.HELVETICA_BOLD;

        contentStream.beginText();
        contentStream.setFont(font, 24);
        contentStream.moveTextPositionByAmount(72, 700);
        contentStream.drawString("Hello World");
        contentStream.endText();

        contentStream.beginText();
        contentStream.setFont(PDType1Font.HELVETICA, 12);
        contentStream.moveTextPositionByAmount(72, 650);
        contentStream.drawString("This is a paragraph of text.");
        contentStream.endText();

        contentStream.close();
        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

public void CreatePdf(string outputPath)
{
    var renderer = new ChromePdfRenderer();

    string html = @"
        <html>
        <head>
            <style>
                body { font-family: Helvetica, Arial, sans-serif; margin: 1in; }
                h1 { font-size: 24pt; font-weight: bold; }
                p { font-size: 12pt; }
            </style>
        </head>
        <body>
            <h1>Hello World</h1>
            <p>This is a paragraph of text.</p>
        </body>
        </html>";

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
using IronPdf;

public void CreatePdf(string outputPath)
{
    var renderer = new ChromePdfRenderer();

    string html = @"
        <html>
        <head>
            <style>
                body { font-family: Helvetica, Arial, sans-serif; margin: 1in; }
                h1 { font-size: 24pt; font-weight: bold; }
                p { font-size: 12pt; }
            </style>
        </head>
        <body>
            <h1>Hello World</h1>
            <p>This is a paragraph of text.</p>
        </body>
        </html>";

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Bei der HTML/CSS-basierten Erstellung entfallen Koordinatenberechnungen, Schriftartenverwaltung und die Bearbeitung von Inhaltsströmen.

Passwortschutz hinzufügen

Apache PDFBox .NET Port Implementierung:

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.encryption;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    PDDocument document = PDDocument.load(new File(inputPath));
    try
    {
        AccessPermission ap = new AccessPermission();
        ap.setCanPrint(true);
        ap.setCanExtractContent(false);

        StandardProtectionPolicy spp = new StandardProtectionPolicy(password, password, ap);
        spp.setEncryptionKeyLength(128);

        document.protect(spp);
        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.encryption;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    PDDocument document = PDDocument.load(new File(inputPath));
    try
    {
        AccessPermission ap = new AccessPermission();
        ap.setCanPrint(true);
        ap.setCanExtractContent(false);

        StandardProtectionPolicy spp = new StandardProtectionPolicy(password, password, ap);
        spp.setEncryptionKeyLength(128);

        document.protect(spp);
        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.SecuritySettings.UserPassword = password;
    pdf.SecuritySettings.OwnerPassword = password;
    pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;

    pdf.SaveAs(outputPath);
}
using IronPdf;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.SecuritySettings.UserPassword = password;
    pdf.SecuritySettings.OwnerPassword = password;
    pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;

    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF verwendet stark typisierte Eigenschaften anstelle von separaten Berechtigungs- und Richtlinienobjekten.

Wasserzeichen hinzufügen

Apache PDFBox .NET Port Implementierung:

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.edit;
using org.apache.pdfbox.pdmodel.font;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    PDDocument document = PDDocument.load(new File(inputPath));
    try
    {
        PDFont font = PDType1Font.HELVETICA_BOLD;

        for (int i = 0; i < document.getNumberOfPages(); i++)
        {
            PDPage page = document.getPage(i);
            PDPageContentStream cs = new PDPageContentStream(
                document, page, PDPageContentStream.AppendMode.APPEND, true, true);

            cs.beginText();
            cs.setFont(font, 72);
            cs.setNonStrokingColor(200, 200, 200);
            cs.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(45), 200, 400));
            cs.showText(watermarkText);
            cs.endText();
            cs.close();
        }

        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.pdmodel.edit;
using org.apache.pdfbox.pdmodel.font;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    PDDocument document = PDDocument.load(new File(inputPath));
    try
    {
        PDFont font = PDType1Font.HELVETICA_BOLD;

        for (int i = 0; i < document.getNumberOfPages(); i++)
        {
            PDPage page = document.getPage(i);
            PDPageContentStream cs = new PDPageContentStream(
                document, page, PDPageContentStream.AppendMode.APPEND, true, true);

            cs.beginText();
            cs.setFont(font, 72);
            cs.setNonStrokingColor(200, 200, 200);
            cs.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(45), 200, 400));
            cs.showText(watermarkText);
            cs.endText();
            cs.close();
        }

        document.save(outputPath);
    }
    finally
    {
        document.close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.ApplyWatermark(
        $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>",
        rotation: 45,
        opacity: 50);

    pdf.SaveAs(outputPath);
}
using IronPdf;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.ApplyWatermark(
        $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>",
        rotation: 45,
        opacity: 50);

    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Das HTML-basierte Wasserzeichen vonIronPDFmacht Seiteniterationen und Matrixberechnungen überflüssig.

URL zu PDF-Konvertierung

Apache PDFBox unterstützt keine URL-zu-PDF-Konvertierung.IronPDFbietet native Unterstützung:

using IronPdf;

public void ConvertUrlToPdf(string url, string outputPath)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderUrlAsPdf(url);
    pdf.SaveAs(outputPath);
}
using IronPdf;

public void ConvertUrlToPdf(string url, string outputPath)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderUrlAsPdf(url);
    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die vollständigen Optionen für die URL-Konvertierung finden Sie in der URL in PDF-Dokumentation.

Kopf- und Fußzeilen

Die Apache PDFBox erfordert eine manuelle Positionierung auf jeder Seite und bietet keine integrierte Unterstützung für Kopf- und Fußzeilen.IronPDFbietet eine deklarative Konfiguration:

using IronPdf;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "Document Title",
        FontSize = 12
    };

    renderer.RenderingOptions.TextFooter = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        FontSize = 10
    };

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
using IronPdf;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "Document Title",
        FontSize = 12
    };

    renderer.RenderingOptions.TextFooter = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        FontSize = 10
    };

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Für fortgeschrittene Layouts siehe die Kopf- und Fußzeilen-Dokumentation.

ASP.NET Core Integration

IronPDF lässt sich problemlos in moderne .NET-Webanwendungen integrieren:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Async-Unterstützung

Die Apache-PDFBox-Ports unterstützen keine asynchronen Operationen.IronPDFbietet vollständige async/await-Funktionen:

using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dependency Injection Konfiguration

public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
    string ExtractText(string pdfPath);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public string ExtractText(string pdfPath)
    {
        using var pdf = PdfDocument.FromFile(pdfPath);
        return pdf.ExtractAllText();
    }
}
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
    string ExtractText(string pdfPath);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public string ExtractText(string pdfPath)
    {
        using var pdf = PdfDocument.FromFile(pdfPath);
        return pdf.ExtractAllText();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Performance-Optimierung

Vergleich der Speichernutzung

Szenario Apache PDFBox .NET-Anschluss IronPDF Notizen
Textextraktion ~80 MB ~50 MB IronPDFeffizienter
PDF-Erstellung ~100 MB ~60 MB HTML-Rendering optimiert
Stapel (100 PDFs) Hoch (manuelle Bereinigung) ~100 MB Verwenden Sie benutzen-Anweisungen

Optimierungstipps

Verwendung von Verwendung von-Anweisungen:

// Automatischcleanup with IDisposable pattern
using var pdf = PdfDocument.FromFile(path);
// Automatischcleanup with IDisposable pattern
using var pdf = PdfDocument.FromFile(path);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Reuse Renderer für Batch-Operationen:

var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Verwendung von Async in Webanwendungen:

using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Fehlerbehebung bei allgemeinen Migrationsproblemen

Problem: Methodennamen im Java-Stil nicht gefunden

Ersetzen Sie camelCase Java-Methoden durch PascalCase .NET-Entsprechungen:

// PDFBox: stripper.getText(document)
// IronPDF: pdf.ExtractAllText()

// PDFBox: document.getNumberOfPages()
// IronPDF: pdf.PageCount
// PDFBox: stripper.getText(document)
// IronPDF: pdf.ExtractAllText()

// PDFBox: document.getNumberOfPages()
// IronPDF: pdf.PageCount
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Problem: Keine close() Methode

IronPDF verwendet das IDisposable-Muster:

// PDFBox
document.close();

// IronPDF
using var pdf = PdfDocument.FromFile(path);
// Automatischdisposal at end of scope
// PDFBox
document.close();

// IronPDF
using var pdf = PdfDocument.FromFile(path);
// Automatischdisposal at end of scope
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Problem: Kein PDFTextStripper Äquivalent

Die Textextraktion wird durch eine einzige Methode vereinfacht:

// IronPDF: Just call ExtractAllText()
string text = pdf.ExtractAllText();

// Per-page extraction:
string pageText = pdf.Pages[0].Text;
// IronPDF: Just call ExtractAllText()
string text = pdf.ExtractAllText();

// Per-page extraction:
string pageText = pdf.Pages[0].Text;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Ausgabe: PDFMergerUtility Nicht gefunden

Verwenden Sie die statische Methode Merge:

//IronPDFuses static Merge
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
//IronPDFuses static Merge
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Post-Migrations-Checkliste

Überprüfen Sie nach Abschluss der Codemigration Folgendes:

  • [Führen Sie alle vorhandenen Unit- und Integrationstests durch
  • [PDF-Ausgaben visuell mit früheren Versionen vergleichen
  • [Testen Sie die Genauigkeit der Textextraktion
  • [Überprüfen Sie, ob die Lizenzierung korrekt funktioniert (IronPdf.License.IsLicensed)
  • [Leistungsvergleich mit früherer Implementierung
  • [CI/CD-Pipeline-Abhängigkeiten aktualisieren
  • [Dokumentieren Sie neue Muster für Ihr Entwicklungsteam

Zukunftssicherheit für Ihre PDF-Infrastruktur

Mit .NET 10 am Horizont und C# 14, das neue Sprachfunktionen einführt, gewährleistet die Wahl einer nativen .NET PDF-Bibliothek die Kompatibilität mit den sich entwickelnden Laufzeitfunktionen. IronPDFs Engagement für die Unterstützung der neuesten .NET-Versionen bedeutet, dass sich Ihre Migrationsinvestition auszahlt, wenn Ihre Projekte bis ins Jahr 2025 und 2026 reichen.

Zusätzliche Ressourcen


Durch die Migration von Apache PDFBox .NET-Ports zuIronPDFwird Ihre PDF-Codebasis von Java-artigen Mustern in idiomatisches C# umgewandelt. Der Wechsel von der manuellen Koordinatenpositionierung zum HTML/CSS-Rendering, kombiniert mit nativer asynchroner Unterstützung und moderner .NET-Integration, liefert sauberen, besser wartbaren Code mit professioneller Unterstützung für Ihre Produktionsanwendungen.

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