Zum Fußzeileninhalt springen
VIDEOS

Wie man Kopf- und Fußzeilen in PDFs mit IronPDF hinzufügt

Full Comparison

Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Apryse PDF on pricing, HTML support, and licensing.

View Full Comparison

Apryse (umbenannt von PDFTron am 8. Februar 2023) ist ein Enterprise-PDF-SDK, das für seine umfassenden Dokumentverarbeitungsfähigkeiten bekannt ist. Die NuGet-Pakete und .NET-Namespaces werden nach dem Rebranding weiterhin unter den historischen PDFTron.* / pdftron.* IDs ausgeliefert. Apryse verwendet verkaufsgeführtes Pricing – öffentliche Preispunkte werden nicht auf apryse.com veröffentlicht, und Drittanbieter-Marktplätze (Vendr, G2) berichten Einstiegsangebote von etwa 1.500 $/Entwickler/Jahr. Kombiniert mit Modulpfad-Einrichtung und C++-heritage APIs kann das für Teams, die nach einer einfachen PDF-Funktionalität suchen, Barrieren schaffen. Diese Anleitung bietet einen schrittweisen Migrationspfad von Apryse zu IronPDF– einer nativen .NET-PDF-Bibliothek mit modernen C#-Konventionen, einfacher Integration und einmaliger unbefristeter Lizenzierung.

Warum von Apryse PDFabwandern?

Obwohl Apryse PDFeine solide Funktionalität bietet, gibt es mehrere Faktoren, die Entwicklerteams dazu veranlassen, nach Alternativen für ihre PDF-Erzeugungsanforderungen zu suchen.

Premium-Preise und Abonnement-Modell

Apryse zielt mit verkaufsgeführtem Pricing auf Unternehmenskunden ab, das für kleine bis mittelgroße Projekte abschreckend wirken kann. Öffentliche Preispunkte werden nicht auf apryse.com veröffentlicht; die unten aufgeführten Zahlen stammen von Drittanbieter-Aggregatoren (Vendr, G2) und sollten mit dem Apryse-Vertrieb bestätigt werden:

Aspekt Apryse (PDFTron) IronPDF
Einsteiger ~1.500 $/Entwickler/Jahr (gemeldet von Vendr) $749 einmalig (Lite)
Typischer Bereich ~9.275–35.816 $/Jahr (pro Vendr-Marktplatzdaten) Gestaffelte Lite/Plus/Professional
Lizenzmodell Jährliches Abonnement, verkaufsgeführte Angebote Unbefristete Lizenz
Betrachterlizenz WebViewer/PDFViewCtrl wird separat berechnet N/A (Standard-Viewer verwenden)
Server-Lizenz Preisgestaltung für Unternehmen erforderlich In den Lizenzstufen enthalten

Komplexität der Integration

Apryses C++-Herkunft prägt die .NET-Oberfläche, was im Vergleich zu einem verwalteten Paket zusätzliche Einrichtungsschritte hinzufügen kann:

Feature Apryse PDF IronPDF
Einrichten Modulpfade, externe Binärdateien Einzelnes NuGet-Paket
Initialisierung PDFNet.Initialize() mit Lizenz Einfache Zuweisung von Eigenschaften
HTML-Rendering Externes html2pdf-Modul erforderlich Eingebaute Chromium-Engine
API-Stil C++-Erbe, komplex Moderne C#-Konventionen
Abhängigkeiten Mehrere DLLs, plattformspezifisch In sich geschlossenes Paket

Wann sollte man eine Migration in Betracht ziehen

Migrieren Sie zu IronPDF, wenn:

  • Sie benötigen vor allem die Konvertierung von HTML/URL in PDF
  • Sie möchten eine einfachere API mit weniger Textbausteinen
  • Premiumpreise sind für Ihren Anwendungsfall nicht gerechtfertigt
  • Sie benötigen keine PDFViewCtrl-Viewer-Steuerung
  • Sie bevorzugen einmalige Lizenzierung über Abonnements

Bleiben Sie bei Apryse PDF, wenn:

  • Sie benötigen deren native Viewer-Steuerelemente (PDFViewCtrl)
  • Sie verwenden häufig XOD oder proprietäre Formate
  • Sie benötigen spezielle Unternehmensfunktionen (erweiterte Redigierung usw.)
  • Ihr Unternehmen verfügt bereits über Unternehmenslizenzen

Vorbereitung auf die Migration

Voraussetzungen

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

  • .NET Framework 4.6.2+, .NET Core 3.1+, or .NET 5/6/7/8/9
  • Visual Studio 2019+ oder VS Code mit C#-Erweiterung
  • NuGet Package Manager Zugang
  • IronPDF-Lizenzschlüssel (kostenlose Testversion erhältlich unter ironpdf.com)

Audit Apryse PDF-Verwendung

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

# Find all pdftron using statements
grep -r "using pdftron" --include="*.cs" .

# Find PDFNet initialization
grep -r "PDFNet.Initialize\|PDFNet.SetResourcesPath" --include="*.cs" .

# Find PDFDoc usage
grep -r "new PDFDoc\|PDFDoc\." --include="*.cs" .

# Find HTML2PDF usage
grep -r "HTML2PDF\|InsertFromURL\|InsertFromHtmlString" --include="*.cs" .

# Find ElementReader/Writer usage
grep -r "ElementReader\|ElementWriter\|ElementBuilder" --include="*.cs" .
# Find all pdftron using statements
grep -r "using pdftron" --include="*.cs" .

# Find PDFNet initialization
grep -r "PDFNet.Initialize\|PDFNet.SetResourcesPath" --include="*.cs" .

# Find PDFDoc usage
grep -r "new PDFDoc\|PDFDoc\." --include="*.cs" .

# Find HTML2PDF usage
grep -r "HTML2PDF\|InsertFromURL\|InsertFromHtmlString" --include="*.cs" .

# Find ElementReader/Writer usage
grep -r "ElementReader\|ElementWriter\|ElementBuilder" --include="*.cs" .
SHELL

Bahnbrechende Änderungen, die zu erwarten sind

Apryse PDF-Muster Änderung erforderlich
PDFNet.Initialize() Ersetzen Sie durch IronPdf.License.LicenseKey
HTML2PDF Modul Integriertes ChromePdfRenderer
ElementWriter IronPDF bearbeitet die Inhalte intern
SDFDoc.SaveOptions Einfacher SaveAs() Methode
PDFViewCtrl Externe PDF-Viewer verwenden
XOD-Format In PDF oder Bilder konvertieren
Konfiguration des Modulpfads Nicht erforderlich

Schritt-für-Schritt-Migrationsprozess

Schritt 1: NuGet-Pakete aktualisieren

Apryse veröffentlicht das .NET SDK unter mehreren PDFTron.* Paket-IDs, abhängig vom Ziel-Framework und der Architektur (die Marke wurde 2023 geändert, die Paket-IDs nicht). Weit verbreitete sind:

  • PDFTron.NET.x64 — primäres .NET / .NET Core x64 Paket (aktuell 11.x)
  • PDFTron.NetFramework.x64 — nur für .NET Framework 4.5.1+ x64
  • PDFTron.NETCore.Windows.x64 — .NET Core unter Windows x64
  • PDFNet — veraltetes kombiniertes Windows .NET Framework 32/64-Bit Paket
# Remove whichever Apryse/PDFTron package(s) you have installed
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NetFramework.x64
dotnet remove package PDFTron.NETCore.Windows.x64
dotnet remove package PDFNet

# Install IronPDF
dotnet add package IronPdf
# Remove whichever Apryse/PDFTron package(s) you have installed
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NetFramework.x64
dotnet remove package PDFTron.NETCore.Windows.x64
dotnet remove package PDFNet

# Install IronPDF
dotnet add package IronPdf
SHELL

Oder über die Paketmanager-Konsole:

Uninstall-Package PDFTron.NET.x64
Install-Package IronPdf

Schritt 2: Namensraumreferenzen aktualisieren

Ersetzen Sie die Namensräume von Apryse durch IronPDF:

// Remove these
using pdftron;
using pdftron.PDF;
using pdftron.PDF.Convert;
using pdftron.SDF;
using pdftron.Filters;

// Add these
using IronPdf;
using IronPdf.Rendering;
// Remove these
using pdftron;
using pdftron.PDF;
using pdftron.PDF.Convert;
using pdftron.SDF;
using pdftron.Filters;

// Add these
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

Schritt 3: Initialisierungs-Boilerplate entfernen

Apryse PDF erfordert eine komplexe Initialisierung. Mit IronPDF entfällt dies vollständig.

Apryse PDF Implementierung:

// Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
// Plus module path for HTML2PDF...
// Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
// Plus module path for HTML2PDF...
' Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY")
PDFNet.SetResourcesPath("path/to/resources")
' Plus module path for HTML2PDF...
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

// Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";
// Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";
' Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY"
$vbLabelText   $csharpLabel

Kein PDFNet.Terminate() Aufruf ist mit IronPDF erforderlich—Ressourcen werden automatisch verwaltet.

Komplette API-Migrationsreferenz

Kernklassen-Zuordnung

Apryse PDF-Klasse IronPDF-Äquivalent
PDFDoc PdfDocument
HTML2PDF ChromePdfRenderer
TextExtractor PdfDocument.ExtractAllText()
Stamper PdfDocument.ApplyWatermark()
PDFDraw PdfDocument.ToBitmap()
SecurityHandler PdfDocument.SecuritySettings
PDFNet IronPdf.License

Dokumentenoperationen

Apryse PDF-Methode IronPDF-Methode
new PDFDoc() new PdfDocument()
new PDFDoc(path) PdfDocument.FromFile(path)
new PDFDoc(buffer) PdfDocument.FromBinaryData(bytes)
doc.Save(path, options) pdf.SaveAs(path)
doc.Save(buffer) pdf.BinaryData
doc.Close() pdf.Dispose()
doc.GetPageCount() pdf.PageCount
doc.AppendPages(doc2, start, end) PdfDocument.Merge(pdfs)

HTML-zu-PDF-Konvertierung

Apryse PDF-Methode IronPDF-Methode
HTML2PDF.Convert(doc) renderer.RenderHtmlAsPdf(html)
converter.InsertFromURL(url) renderer.RenderUrlAsPdf(url)
converter.InsertFromHtmlString(html) renderer.RenderHtmlAsPdf(html)
converter.SetModulePath(path) Nicht erforderlich
converter.SetPaperSize(width, height) RenderingOptions.PaperSize
converter.SetLandscape(true) RenderingOptions.PaperOrientation

Beispiele für die Code-Migration

HTML-String in PDF konvertieren

Der häufigste Vorgang demonstriert die drastische Reduzierung von Standardcode.

Apryse PDF Implementierung:

using pdftron;
using pdftron.PDF;

class Program
{
    static void Main()
    {
        PDFNet.Initialize("YOUR_LICENSE_KEY");
        PDFNet.SetResourcesPath("path/to/resources");

        string html = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>";

        using (PDFDoc doc = new PDFDoc())
        {
            HTML2PDF converter = new HTML2PDF();
            converter.SetModulePath("path/to/html2pdf");
            converter.InsertFromHtmlString(html);

            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            if (converter.Convert(doc))
            {
                doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine("PDF created successfully");
            }
            else
            {
                Console.WriteLine($"Conversion failed: {converter.GetLog()}");
            }
        }

        PDFNet.Terminate();
    }
}
using pdftron;
using pdftron.PDF;

class Program
{
    static void Main()
    {
        PDFNet.Initialize("YOUR_LICENSE_KEY");
        PDFNet.SetResourcesPath("path/to/resources");

        string html = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>";

        using (PDFDoc doc = new PDFDoc())
        {
            HTML2PDF converter = new HTML2PDF();
            converter.SetModulePath("path/to/html2pdf");
            converter.InsertFromHtmlString(html);

            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            if (converter.Convert(doc))
            {
                doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine("PDF created successfully");
            }
            else
            {
                Console.WriteLine($"Conversion failed: {converter.GetLog()}");
            }
        }

        PDFNet.Terminate();
    }
}
Imports pdftron
Imports pdftron.PDF

Class Program
    Shared Sub Main()
        PDFNet.Initialize("YOUR_LICENSE_KEY")
        PDFNet.SetResourcesPath("path/to/resources")

        Dim html As String = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>"

        Using doc As New PDFDoc()
            Dim converter As New HTML2PDF()
            converter.SetModulePath("path/to/html2pdf")
            converter.InsertFromHtmlString(html)

            Dim settings As New HTML2PDF.WebPageSettings()
            settings.SetPrintBackground(True)
            settings.SetLoadImages(True)

            If converter.Convert(doc) Then
                doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized)
                Console.WriteLine("PDF created successfully")
            Else
                Console.WriteLine($"Conversion failed: {converter.GetLog()}")
            End If
        End Using

        PDFNet.Terminate()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

// NuGet: Install-Package IronPdf
using IronPdf;

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;

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

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

IronPDF eliminiert Initialisierung, Modulpfade und Bereinigungscode und reduziert 35+ Zeilen auf 5 Zeilen.

URL zu PDF-Konvertierung

Apryse PDF Implementierung:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc())
{
    HTML2PDF converter = new HTML2PDF();
    converter.SetModulePath("path/to/html2pdf");

    HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
    settings.SetLoadImages(true);
    settings.SetAllowJavaScript(true);
    settings.SetPrintBackground(true);

    converter.InsertFromURL("https://example.com", settings);

    if (converter.Convert(doc))
    {
        doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized);
    }
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc())
{
    HTML2PDF converter = new HTML2PDF();
    converter.SetModulePath("path/to/html2pdf");

    HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
    settings.SetLoadImages(true);
    settings.SetAllowJavaScript(true);
    settings.SetPrintBackground(true);

    converter.InsertFromURL("https://example.com", settings);

    if (converter.Convert(doc))
    {
        doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized);
    }
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using doc As New PDFDoc()
    Dim converter As New HTML2PDF()
    converter.SetModulePath("path/to/html2pdf")

    Dim settings As New HTML2PDF.WebPageSettings()
    settings.SetLoadImages(True)
    settings.SetAllowJavaScript(True)
    settings.SetPrintBackground(True)

    converter.InsertFromURL("https://example.com", settings)

    If converter.Convert(doc) Then
        doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized)
    End If
End Using

PDFNet.Terminate()
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);

        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);

        pdf.SaveAs("webpage.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim url As String = "https://www.example.com"
        Dim pdf = renderer.RenderUrlAsPdf(url)

        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Mehrere PDFs zusammenführen

Apryse PDF Implementierung:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc mainDoc = new PDFDoc())
{
    string[] files = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };

    foreach (string file in files)
    {
        using (PDFDoc doc = new PDFDoc(file))
        {
            mainDoc.AppendPages(doc, 1, doc.GetPageCount());
        }
    }

    mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc mainDoc = new PDFDoc())
{
    string[] files = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };

    foreach (string file in files)
    {
        using (PDFDoc doc = new PDFDoc(file))
        {
            mainDoc.AppendPages(doc, 1, doc.GetPageCount());
        }
    }

    mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using mainDoc As New PDFDoc()
    Dim files As String() = {"doc1.pdf", "doc2.pdf", "doc3.pdf"}

    For Each file As String In files
        Using doc As New PDFDoc(file)
            mainDoc.AppendPages(doc, 1, doc.GetPageCount())
        End Using
    Next

    mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized)
End Using

PDFNet.Terminate()
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

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

        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });

        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

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

        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });

        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf
Imports System.Collections.Generic

Class Program
    Shared Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")

        Dim merged = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})

        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Die statische Merge Methode von IronPDF akzeptiert mehrere Dokumente direkt und eliminiert damit das Seiteniterationsmuster.

Textextraktion

Apryse PDF Implementierung:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    TextExtractor extractor = new TextExtractor();

    for (int i = 1; i <= doc.GetPageCount(); i++)
    {
        Page page = doc.GetPage(i);
        extractor.Begin(page);

        string pageText = extractor.GetAsText();
        Console.WriteLine($"Page {i}:");
        Console.WriteLine(pageText);
    }
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    TextExtractor extractor = new TextExtractor();

    for (int i = 1; i <= doc.GetPageCount(); i++)
    {
        Page page = doc.GetPage(i);
        extractor.Begin(page);

        string pageText = extractor.GetAsText();
        Console.WriteLine($"Page {i}:");
        Console.WriteLine(pageText);
    }
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using doc As New PDFDoc("document.pdf")
    Dim extractor As New TextExtractor()

    For i As Integer = 1 To doc.GetPageCount()
        Dim page As Page = doc.GetPage(i)
        extractor.Begin(page)

        Dim pageText As String = extractor.GetAsText()
        Console.WriteLine($"Page {i}:")
        Console.WriteLine(pageText)
    Next
End Using

PDFNet.Terminate()
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text at once
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Extract from specific page
string page1Text = pdf.ExtractTextFromPage(0); // 0-indexed
Console.WriteLine($"Page 1: {page1Text}");
using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text at once
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Extract from specific page
string page1Text = pdf.ExtractTextFromPage(0); // 0-indexed
Console.WriteLine($"Page 1: {page1Text}");
Imports IronPdf

Dim pdf = PdfDocument.FromFile("document.pdf")

' Extract all text at once
Dim allText As String = pdf.ExtractAllText()
Console.WriteLine(allText)

' Extract from specific page
Dim page1Text As String = pdf.ExtractTextFromPage(0) ' 0-indexed
Console.WriteLine($"Page 1: {page1Text}")
$vbLabelText   $csharpLabel

Wasserzeichen hinzufügen

Apryse PDF Implementierung:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    Stamper stamper = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5);
    stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center,
                         Stamper.VerticalAlignment.e_vertical_center);
    stamper.SetOpacity(0.3);
    stamper.SetRotation(45);
    stamper.SetFontColor(new ColorPt(1, 0, 0));
    stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center);

    stamper.StampText(doc, "CONFIDENTIAL",
        new PageSet(1, doc.GetPageCount()));

    doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    Stamper stamper = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5);
    stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center,
                         Stamper.VerticalAlignment.e_vertical_center);
    stamper.SetOpacity(0.3);
    stamper.SetRotation(45);
    stamper.SetFontColor(new ColorPt(1, 0, 0));
    stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center);

    stamper.StampText(doc, "CONFIDENTIAL",
        new PageSet(1, doc.GetPageCount()));

    doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using doc As New PDFDoc("document.pdf")
    Dim stamper As New Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5)
    stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center, Stamper.VerticalAlignment.e_vertical_center)
    stamper.SetOpacity(0.3)
    stamper.SetRotation(45)
    stamper.SetFontColor(New ColorPt(1, 0, 0))
    stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center)

    stamper.StampText(doc, "CONFIDENTIAL", New PageSet(1, doc.GetPageCount()))

    doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized)
End Using

PDFNet.Terminate()
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.3;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");
using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.3;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");
Imports IronPdf
Imports IronPdf.Editing

Dim pdf = PdfDocument.FromFile("document.pdf")

' HTML-based watermark with full styling control
Dim watermarkHtml As String = "
<div style='
    color: red;
    opacity: 0.3;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>"

pdf.ApplyWatermark(watermarkHtml,
    rotation:=45,
    verticalAlignment:=VerticalAlignment.Middle,
    horizontalAlignment:=HorizontalAlignment.Center)

pdf.SaveAs("watermarked.pdf")
$vbLabelText   $csharpLabel

IronPDF verwendet HTML/CSS-basierte Wasserzeichen und bietet so volle Kontrolle über das Styling durch vertraute Webtechnologien.

Passwortschutz

Apryse PDF Implementierung:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    SecurityHandler handler = new SecurityHandler();
    handler.ChangeUserPassword("user123");
    handler.ChangeMasterPassword("owner456");

    handler.SetPermission(SecurityHandler.Permission.e_print, false);
    handler.SetPermission(SecurityHandler.Permission.e_extract_content, false);

    doc.SetSecurityHandler(handler);
    doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    SecurityHandler handler = new SecurityHandler();
    handler.ChangeUserPassword("user123");
    handler.ChangeMasterPassword("owner456");

    handler.SetPermission(SecurityHandler.Permission.e_print, false);
    handler.SetPermission(SecurityHandler.Permission.e_extract_content, false);

    doc.SetSecurityHandler(handler);
    doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();
Imports pdftron
Imports pdftron.PDF
Imports pdftron.SDF

PDFNet.Initialize("YOUR_LICENSE_KEY")

Using doc As New PDFDoc("document.pdf")
    Dim handler As New SecurityHandler()
    handler.ChangeUserPassword("user123")
    handler.ChangeMasterPassword("owner456")

    handler.SetPermission(SecurityHandler.Permission.e_print, False)
    handler.SetPermission(SecurityHandler.Permission.e_extract_content, False)

    doc.SetSecurityHandler(handler)
    doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized)
End Using

PDFNet.Terminate()
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");
Imports IronPdf

Dim pdf = PdfDocument.FromFile("document.pdf")

' Set passwords
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"

' Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit

pdf.SaveAs("protected.pdf")
$vbLabelText   $csharpLabel

Kopf- und Fußzeilen

IronPDF-Implementierung:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
    .DrawDividerLine = True,
    .MaxHeight = 30
}

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    .DrawDividerLine = True,
    .MaxHeight = 25
}

Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>")
pdf.SaveAs("with_headers.pdf")
$vbLabelText   $csharpLabel

IronPDF unterstützt Platzhalter-Tokens wie {page} und {total-pages} für dynamische Seitennummerierung. Weitere Optionen finden Sie in der Kopf- und Fußzeilen-Dokumentation.

ASP.NET Core -Integration

Die Initialisierungsanforderungen von Apryse PDFerschweren die Integration von Webanwendungen.IronPDF vereinfacht dieses Muster.

IronPDF-Muster:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }
}
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("[controller]")>
Public Class PdfController
    Inherits ControllerBase

    <HttpGet("generate")>
    Public Function GeneratePdf() As IActionResult
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")

        Return File(pdf.BinaryData, "application/pdf", "report.pdf")
    End Function

    <HttpGet("generate-async")>
    Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")

        Return File(pdf.BinaryData, "application/pdf", "report.pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

Dependency Injection Konfiguration

// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();

    // Or create a wrapper service
    services.AddScoped<IPdfService, IronPdfService>();
}

// IronPdfService.cs
public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

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

    public PdfDocument GenerateFromHtml(string html) =>
        _renderer.RenderHtmlAsPdf(html);

    public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
        _renderer.RenderHtmlAsPdfAsync(html);
}
// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();

    // Or create a wrapper service
    services.AddScoped<IPdfService, IronPdfService>();
}

// IronPdfService.cs
public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

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

    public PdfDocument GenerateFromHtml(string html) =>
        _renderer.RenderHtmlAsPdf(html);

    public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
        _renderer.RenderHtmlAsPdfAsync(html);
}
' Program.vb
Public Sub ConfigureServices(services As IServiceCollection)
    ' Set license once
    IronPdf.License.LicenseKey = Configuration("IronPdf:LicenseKey")

    ' Register renderer as scoped service
    services.AddScoped(Of ChromePdfRenderer)()

    ' Or create a wrapper service
    services.AddScoped(Of IPdfService, IronPdfService)()
End Sub

' IronPdfService.vb
Public Class IronPdfService
    Implements IPdfService

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        _renderer.RenderingOptions.PrintHtmlBackgrounds = True
    End Sub

    Public Function GenerateFromHtml(html As String) As PdfDocument Implements IPdfService.GenerateFromHtml
        Return _renderer.RenderHtmlAsPdf(html)
    End Function

    Public Function GenerateFromHtmlAsync(html As String) As Task(Of PdfDocument) Implements IPdfService.GenerateFromHtmlAsync
        Return _renderer.RenderHtmlAsPdfAsync(html)
    End Function
End Class
$vbLabelText   $csharpLabel

Leistungsvergleich

Metrik Apryse PDF IronPDF
Kaltstart Schnell (nativer Code) ~2s (Chromium init)
Nachfolgende Renderings Schnell Schnell
Komplexes HTML Variable (html2pdf-Modul) Ausgezeichnet (Chromium)
CSS-Unterstützung Beschränkt Vollständig CSS3
JavaScript Beschränkt Unterstützt

Tipps zur Optimierung der Leistung

// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}
// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}
' 1. Reuse renderer instance
Private Shared ReadOnly SharedRenderer As New ChromePdfRenderer()

' 2. Disable unnecessary features for speed
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = False ' If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0)   ' No delay
renderer.RenderingOptions.Timeout = 30000          ' 30s max

' 3. Proper disposal
Using pdf = renderer.RenderHtmlAsPdf(html)
    pdf.SaveAs("output.pdf")
End Using
$vbLabelText   $csharpLabel

Fehlerbehebung bei allgemeinen Migrationsproblemen

Problem: Modulpfad-Fehler

Entfernen Sie alle Modulpfad-Konfigurationen - die Chromium-Engine von IronPDF ist bereits integriert:

// Remove this
converter.SetModulePath("path/to/html2pdf");

// Just use the renderer
var renderer = new ChromePdfRenderer();
// Remove this
converter.SetModulePath("path/to/html2pdf");

// Just use the renderer
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

Problem: PDFNet.Initialize() nicht gefunden

Ersetzen durch IronPDF Lizenz-Setup:

// Remove this
PDFNet.Initialize("KEY");
PDFNet.SetResourcesPath("path");

// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";
// Remove this
PDFNet.Initialize("KEY");
PDFNet.SetResourcesPath("path");

// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";
' Remove this
PDFNet.Initialize("KEY")
PDFNet.SetResourcesPath("path")

' Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY"
$vbLabelText   $csharpLabel

Ausgabe: PDFViewCtrl-Ersatz

IronPDF enthält keine Viewer-Steuerelemente. Optionen:

  • PDF.js für Web-Viewer verwenden
  • System-PDF-Viewer verwenden
  • Berücksichtigen Sie Viewer-Komponenten von Drittanbietern

Post-Migrations-Checkliste

Überprüfen Sie nach Abschluss der Codemigration Folgendes:

  • Überprüfung der PDF-Ausgabequalität auf Übereinstimmung mit den Erwartungen
  • Alle Grenzfälle testen (große Dokumente, komplexes CSS)
  • Leistungskennzahlen vergleichen
  • Docker-Konfigurationen gegebenenfalls aktualisieren
  • Apryse-Lizenz und zugehörige Konfigurationen entfernen
  • Dokumentieren Sie alle IronPDF-spezifischen Konfigurationen
  • Das Team in neuen API-Mustern schulen
  • Aktualisieren Sie bei Bedarf die CI/CD-Pipelines.

Zusätzliche Ressourcen


Die Migration von Apryse PDFzu IronPDF verwandelt Ihre PDF-Codebasis von komplexen C++-Mustern in idiomatisches C#. Der Wegfall von Initialisierungs-Boilerplate, Modulpfadkonfiguration und abonnementbasierter Lizenzierung führt zu unmittelbaren Produktivitätssteigerungen bei gleichzeitiger Reduzierung der langfristigen Kosten.

Hinweis:Apryse ist eine eingetragene Marke ihres jeweiligen Eigentümers. Diese Website ist nicht mit Apryse oder PDFTron affiliiert, noch von diesen 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