Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Umstellung von Adobe PDF Library SDK auf IronPDF

Migrieren Sie von Adobe PDF Library SDKzu IronPDF: Vollständige C#-Migrationsanleitung

Das Adobe PDF Library SDK, das über Datalogics vertrieben wird, bietet die echte Adobe PDF-Engine mit Funktionen für Unternehmen. Die unerschwinglichen Lizenzkosten, die komplexe native SDK-Integration und das Low-Level-API-Design machen es jedoch für die meisten Entwicklungsteams unpraktisch. Dieses umfassende Handbuch bietet einen schrittweisen Migrationspfad von Adobe PDF Library SDKzuIronPDF- einer modernen, kostengünstigen .NET PDF-Bibliothek, die .NET Framework 4.6.2 bis .NET 9 und zukünftige Versionen unterstützt.

Warum von Adobe PDF Library SDKabwandern?

Obwohl das Adobe PDF Library SDKdie authentische Adobe PDF-Engine bietet, suchen Entwicklerteams aus verschiedenen Gründen nach Alternativen für die Erstellung und Bearbeitung von PDF-Dateien.

Hohe Lizenzkosten

Die Preise für Adobe PDF Library SDKbewegen sich zwischen 10.000 und 50.000 US-Dollar pro Jahr. Aufgrund der Kostenstruktur ist das SDK für kleine und mittelständische Unternehmen, Start-ups, einzelne Entwickler und Projekte, bei denen umfassende Adobe-Engine-Funktionen nicht unbedingt erforderlich sind, nicht geeignet.

Komplexe Native SDK-Integration

Das Adobe PDF Library SDKbasiert auf nativem C++-Code und erfordert plattformspezifische Binärdateien. Die Entwickler müssen den Speicher sorgfältig verwalten, explizite Initialisierungs- und Beendigungsmuster handhaben und komplizierte Einrichtungsvorgänge durchlaufen. Dies führt zu einem erheblichen Mehraufwand bei der Entwicklung und erschwert CI/CD-Pipelines.

Low-Level-API-Design

Die Erstellung von PDF-Dateien mit Adobe PDF Library SDKerfordert die programmatische Erstellung von Seiten, Inhaltsströmen, Textläufen und Schriftarten. Einfache Aufgaben wie das Rendern von HTML-Inhalten werden zu mehrstufigen Operationen, die Koordinatenberechnungen, das Einbetten von Schriften und die manuelle Verwaltung von Inhaltselementen umfassen.

Aufwand für die Verwaltung des Lebenszyklus von Bibliotheken

Jeder Vorgang erfordert die Einbettung von Code in Library.Initialize()- und Library.Terminate()-Blöcke mit sorgfältiger Entsorgung von COM-Objekten. Das Vergessen von Bereinigungsschritten führt zu Ressourcenlecks und Instabilität der Anwendung.

Overkill für typische Projekte

Für Anwendungen, die in erster Linie die Konvertierung von HTML in PDF, die grundlegende Bearbeitung von Dokumenten oder die Erstellung von Berichten erfordern, stellt die vollständige Adobe PDF-Engine ein erhebliches Over-Engineering dar, während einfachere Lösungen gleichwertige Ergebnisse liefern.

Adobe PDF Library SDKvs. IronPDF: Hauptunterschiede

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

Aspekt Adobe PDF Library SDK IronPDF
Preisgestaltung $10K-$50K+/Jahr Unternehmen Erschwingliche Lizenzierung pro Entwickler
Installation Native DLLs, plattformspezifisch Einfaches NuGet-Paket
Dokumentenerstellung Aufbau von Seiten/Inhalten auf niedriger Ebene HTML/CSS-Rendering
Initialisierung Library.Initialize()/Terminate() erforderlich Automatisch
Koordinatensystem PostScript-Punkte, Ursprung unten links CSS-basiertes Layout
Schriftbehandlung Manuelle Einbettung erforderlich Automatisch
Speichermanagement Manuelle Entsorgung von COM-Objekten Standard IDisposable-Muster
Async-Unterstützung Nicht verfügbar Vollständige Unterstützung von async/await

Vorbereitung auf die Migration

Voraussetzungen

Stellen Sie sicher, dass Ihre Umgebung diese Anforderungen erfüllt, bevor Sie mit der Migration beginnen:

  • .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 Verwendung von Adobe PDF Library SDK

Führen Sie diese Befehle in Ihrem Lösungsverzeichnis aus, um alle Verweise auf Adobe PDF Library SDKzu identifizieren:

grep -r "using Datalogics" --include="*.cs" .
grep -r "Adobe.PDF.Library" --include="*.csproj" .
grep -r "Library.Initialize\|Library.Terminate" --include="*.cs" .
grep -r "using Datalogics" --include="*.cs" .
grep -r "Adobe.PDF.Library" --include="*.csproj" .
grep -r "Library.Initialize\|Library.Terminate" --include="*.cs" .
SHELL

Bahnbrechende Änderungen, die zu erwarten sind

Kategorie Adobe PDF Library SDK IronPDF Migration Aktion
Initialisierung Library.Initialize()/ Terminate() Automatisch Lebenszyklus-Code entfernen
Erstellung des Dokuments Neues Dokument()mit Seitenaufbau ChromePdfRenderer HTML-Rendering verwenden
Koordinatensystem PostScript-Punkte, Ursprung unten links CSS-basiertes Layout HTML/CSS verwenden
Handhabung von Schriftarten Manuelle Erstellung und Einbettung von Schriften Automatisch Schriftcode entfernen
Speicherverwaltung Manuelle Entsorgung von COM-Objekten Standard IDisposable Verwenden Sie benutzen-Anweisungen
Aufbau der Seite CreatePage(), AddContent() Automatisch aus HTML Deutlich vereinfachen

Schritt-für-Schritt-Migrationsprozess

Schritt 1: NuGet-Pakete aktualisieren

Entfernen Sie das Paket Adobe PDF Library SDKund installieren Sie IronPDF:

# Remove Adobe PDF Library
dotnet remove package Adobe.PDF.Library.LM.NET

# Install IronPDF
dotnet add package IronPdf
# Remove Adobe PDF Library
dotnet remove package Adobe.PDF.Library.LM.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

Schritt 2: Konfigurieren des Lizenzschlüssels

Ersetzen Sie die Lizenzierung von Adobe durch den codebasierten Lizenzschlüssel von IronPDF:

// Replace Adobe's Library.LicenseKey withIronPDFlicense
// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;
// Replace Adobe's Library.LicenseKey withIronPDFlicense
// Add at application startup, before anyIronPDFoperations
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;
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 Datalogics.PDFL; IronPdf verwenden;
Verwendung von Datalogics.PDFL.Document; IronPdf verwenden;
Verwendung von Datalogics.PDFL.Page; IronPdf verwenden;
Verwendung von Datalogics.PDFL.Content; IronPdf verwenden;

Schritt 4: Code aus dem Lebenszyklus der Bibliothek entfernen

Eine der wichtigsten Vereinfachungen ist das Entfernen von Initialisierungs- und Beendigungsmustern:

// Adobe PDF Library SDK- REMOVE THIS PATTERN
Library.Initialize();
try
{
    // PDF operations
}
finally
{
    Library.Terminate(); // Must always terminate
}

//IronPDF- Just use directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Adobe PDF Library SDK- REMOVE THIS PATTERN
Library.Initialize();
try
{
    // PDF operations
}
finally
{
    Library.Terminate(); // Must always terminate
}

//IronPDF- Just use directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Komplette API-Migrationsreferenz

Bibliotheks-Lebenszyklus-Methoden

Adobe-Methode IronPDF-Äquivalent Notizen
Library.Initialize() Nicht erforderlich Automatische Initialisierung
Library.Terminate() Nicht erforderlich Automatische Bereinigung
Library.LicenseKey = "KEY" IronPdf.License.LicenseKey = "KEY" Einmal beim Start einstellen
Verwendung von (Library lib = new Library()) Nicht erforderlich Kein Wrapper erforderlich

Methoden der Dokumentenerstellung

Adobe-Methode IronPDF-Methode Notizen
Neues Dokument() new ChromePdfRenderer() Renderer für HTML
Neues Dokument(Pfad) PdfDocument.FromFile(path) Vorhandenes PDF laden
doc.CreatePage(index, rect) Automatisch aus HTML Automatisch erstellte Seiten
doc.Save(SaveFlags.Full, Pfad) pdf.SaveAs(Pfad) In Datei speichern
doc.NumPages pdf.PageCount Eigenschaft Seitenzahl
doc.GetPage(index) pdf.Seiten[index] Seite aufrufen
doc.InsertPages(...) PdfDocument.Merge() Dokumente zusammenführen

Inhaltserstellung (großer Paradigmenwechsel)

Adobe PDF Library SDK erfordert die Erstellung von Inhalten auf niedriger Ebene.IronPDFverwendet HTML/CSS:

Adobe-Methode IronPDF-Methode Notizen
neuer Text() Verwenden Sie HTML <p>, <h1>, usw. HTML-Tags
text.AddRun(textRun) HTML verwenden Text über HTML
new TextRun(text, font, size, point) CSS-Styling Stil über CSS
new Font(name, flags) CSS font-family Schriftarten über CSS
neues Bild(Pfad) HTML <img>-Tag Bilder über HTML
content.AddElement(...) HTML-Inhalt Erstellen mit HTML
Seite.UpdateInhalt() Nicht erforderlich Automatisch

Wasserzeichen und Sicherheitsmethoden

Adobe-Methode IronPDF-Methode Notizen
new Watermark(doc, textParams, wmParams) pdf.ApplyWatermark(html) HTML-Wasserzeichen
WasserzeichenParameter.Deckkraft CSS Deckkraft Deckkraft über CSS
new EncryptionHandler(user, owner, perms) pdf.SecuritySettings Sicherheitskonfiguration
PermissionFlags.PrintDoc BenutzerDruckenZulassen Druckgenehmigung

Textextraktion

Adobe-Methode IronPDF-Methode Notizen
new WordFinder(doc, config) pdf.ExtractAllText() Einfache Extraktion
wordFinder.GetWordList() pdf.Seiten[i].Text Text pro Seite
Komplexe Wort-/Zeichenwiederholung Einzelner Methodenaufruf Viel einfacher

Beispiele für die Code-Migration

HTML-zu-PDF-Konvertierung

Die stärkste Vereinfachung tritt bei der Konvertierung von Inhalten in PDF auf. Adobe PDF Library SDKerfordert die manuelle Erstellung von Seiten, die Einbettung von Schriften und die Positionierung von Koordinaten.

Adobe PDF Library SDK Implementierung:

// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeHtmlToPdf
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            // Adobe PDF Library requires complex setup with HTML conversion parameters
            HTMLConversionParameters htmlParams = new HTMLConversionParameters();
            htmlParams.PaperSize = PaperSize.Letter;
            htmlParams.Orientation = Orientation.Portrait;

            string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

            // Convert HTML to PDF
            Document doc = Document.CreateFromHTML(htmlContent, htmlParams);
            doc.Save(SaveFlags.Full, "output.pdf");
            doc.Dispose();
        }
    }
}
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeHtmlToPdf
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            // Adobe PDF Library requires complex setup with HTML conversion parameters
            HTMLConversionParameters htmlParams = new HTMLConversionParameters();
            htmlParams.PaperSize = PaperSize.Letter;
            htmlParams.Orientation = Orientation.Portrait;

            string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

            // Convert HTML to PDF
            Document doc = Document.CreateFromHTML(htmlContent, htmlParams);
            doc.Save(SaveFlags.Full, "output.pdf");
            doc.Dispose();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class IronPdfHtmlToPdf
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        // Convert HTML to PDF with simple API
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfHtmlToPdf
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        // Convert HTML to PDF with simple API
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF macht den Library Lifecycle Wrapper, die Konvertierungsparameterobjekte und die explizite Entsorgung überflüssig. Der ChromePdfRendererverwendet eine Chromium-basierte Engine für pixelgenaue CSS- und JavaScript-Unterstützung. Für fortgeschrittene Szenarien siehe die HTML zu PDF Dokumentation.

Mehrere PDFs zusammenführen

Die PDF-Zusammenführung zeigt den Unterschied in der API-Komplexität deutlich auf.

Adobe PDF Library SDK Implementierung:

// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeMergePdfs
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            // Open first PDF document
            Document doc1 = new Document("document1.pdf");
            Document doc2 = new Document("document2.pdf");

            // Insert pages from second document into first
            PageInsertParams insertParams = new PageInsertParams();
            insertParams.InsertFlags = PageInsertFlags.None;

            for (int i = 0; i < doc2.NumPages; i++)
            {
                Page page = doc2.GetPage(i);
                doc1.InsertPage(doc1.NumPages - 1, page, insertParams);
            }

            doc1.Save(SaveFlags.Full, "merged.pdf");
            doc1.Dispose();
            doc2.Dispose();
        }
    }
}
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeMergePdfs
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            // Open first PDF document
            Document doc1 = new Document("document1.pdf");
            Document doc2 = new Document("document2.pdf");

            // Insert pages from second document into first
            PageInsertParams insertParams = new PageInsertParams();
            insertParams.InsertFlags = PageInsertFlags.None;

            for (int i = 0; i < doc2.NumPages; i++)
            {
                Page page = doc2.GetPage(i);
                doc1.InsertPage(doc1.NumPages - 1, page, insertParams);
            }

            doc1.Save(SaveFlags.Full, "merged.pdf");
            doc1.Dispose();
            doc2.Dispose();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class IronPdfMergePdfs
{
    static void Main()
    {
        // Load PDF documents
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        // Merge PDFs with simple method
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class IronPdfMergePdfs
{
    static void Main()
    {
        // Load PDF documents
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");

        // Merge PDFs with simple method
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Der Ansatz von Adobe erfordert eine seitenweise Iteration mit Einfügeparametern.IronPDFbietet eine einzige Merge-Methode, die mehrere Dokumente akzeptieren kann.

Wasserzeichen hinzufügen

Das Wasserzeichen veranschaulicht, wieIronPDFHTML/CSS für die flexible Gestaltung nutzt.

Adobe PDF Library SDK Implementierung:

// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeAddWatermark
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            Document doc = new Document("input.pdf");

            // Create watermark with complex API
            WatermarkParams watermarkParams = new WatermarkParams();
            watermarkParams.Opacity = 0.5;
            watermarkParams.Rotation = 45.0;
            watermarkParams.VerticalAlignment = WatermarkVerticalAlignment.Center;
            watermarkParams.HorizontalAlignment = WatermarkHorizontalAlignment.Center;

            WatermarkTextParams textParams = new WatermarkTextParams();
            textParams.Text = "CONFIDENTIAL";

            Watermark watermark = new Watermark(doc, textParams, watermarkParams);

            doc.Save(SaveFlags.Full, "watermarked.pdf");
            doc.Dispose();
        }
    }
}
// Adobe PDF Library SDK
using Datalogics.PDFL;
using System;

class AdobeAddWatermark
{
    static void Main()
    {
        using (Library lib = new Library())
        {
            Document doc = new Document("input.pdf");

            // Create watermark with complex API
            WatermarkParams watermarkParams = new WatermarkParams();
            watermarkParams.Opacity = 0.5;
            watermarkParams.Rotation = 45.0;
            watermarkParams.VerticalAlignment = WatermarkVerticalAlignment.Center;
            watermarkParams.HorizontalAlignment = WatermarkHorizontalAlignment.Center;

            WatermarkTextParams textParams = new WatermarkTextParams();
            textParams.Text = "CONFIDENTIAL";

            Watermark watermark = new Watermark(doc, textParams, watermarkParams);

            doc.Save(SaveFlags.Full, "watermarked.pdf");
            doc.Dispose();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class IronPdfAddWatermark
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        // Apply text watermark with simple API
        pdf.ApplyWatermark("<h1 style='color:red; opacity:0.5;'>CONFIDENTIAL</h1>",
            rotation: 45,
            verticalAlignment: VerticalAlignment.Middle,
            horizontalAlignment: HorizontalAlignment.Center);

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

class IronPdfAddWatermark
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");

        // Apply text watermark with simple API
        pdf.ApplyWatermark("<h1 style='color:red; opacity:0.5;'>CONFIDENTIAL</h1>",
            rotation: 45,
            verticalAlignment: VerticalAlignment.Middle,
            horizontalAlignment: HorizontalAlignment.Center);

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

Das HTML-basierte Wasserzeichen vonIronPDFbietet vollständige Designkontrolle durch CSS-Styling und macht separate Parameterobjekte überflüssig.

Passwortschutz und Verschlüsselung

Adobe PDF Library SDK Implementierung:

using Datalogics.PDFL;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    Library.Initialize();
    try
    {
        using (Document doc = new Document(inputPath))
        {
            PermissionFlags permissions =
                PermissionFlags.PrintDoc |
                PermissionFlags.PrintFidelity;

            EncryptionHandler encHandler = new EncryptionHandler(
                password,      // User password
                password,      // Owner password
                permissions,
                EncryptionMethod.AES256);

            doc.SetEncryptionHandler(encHandler);
            doc.Save(SaveFlags.Full | SaveFlags.Encrypted, outputPath);
        }
    }
    finally
    {
        Library.Terminate();
    }
}
using Datalogics.PDFL;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    Library.Initialize();
    try
    {
        using (Document doc = new Document(inputPath))
        {
            PermissionFlags permissions =
                PermissionFlags.PrintDoc |
                PermissionFlags.PrintFidelity;

            EncryptionHandler encHandler = new EncryptionHandler(
                password,      // User password
                password,      // Owner password
                permissions,
                EncryptionMethod.AES256);

            doc.SetEncryptionHandler(encHandler);
            doc.Save(SaveFlags.Full | SaveFlags.Encrypted, outputPath);
        }
    }
    finally
    {
        Library.Terminate();
    }
}
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.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

    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.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

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

IronPDF verwendet stark typisierte Eigenschaften anstelle von bitweisen Berechtigungsflags und Verschlüsselungshandler-Objekten.

Textextraktion

Adobe PDF Library SDK Implementierung:

using Datalogics.PDFL;

public string ExtractText(string pdfPath)
{
    string extractedText = "";

    Library.Initialize();
    try
    {
        using (Document doc = new Document(pdfPath))
        {
            WordFinderConfig config = new WordFinderConfig();
            config.IgnoreCharGaps = true;

            for (int i = 0; i < doc.NumPages; i++)
            {
                using (WordFinder wordFinder = new WordFinder(doc, i, config))
                {
                    IList<Word> words = wordFinder.GetWordList();
                    foreach (Word word in words)
                    {
                        extractedText += word.Text + " ";
                    }
                    extractedText += "\n";
                }
            }
        }
    }
    finally
    {
        Library.Terminate();
    }

    return extractedText;
}
using Datalogics.PDFL;

public string ExtractText(string pdfPath)
{
    string extractedText = "";

    Library.Initialize();
    try
    {
        using (Document doc = new Document(pdfPath))
        {
            WordFinderConfig config = new WordFinderConfig();
            config.IgnoreCharGaps = true;

            for (int i = 0; i < doc.NumPages; i++)
            {
                using (WordFinder wordFinder = new WordFinder(doc, i, config))
                {
                    IList<Word> words = wordFinder.GetWordList();
                    foreach (Word word in words)
                    {
                        extractedText += word.Text + " ";
                    }
                    extractedText += "\n";
                }
            }
        }
    }
    finally
    {
        Library.Terminate();
    }

    return extractedText;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

public string ExtractText(string pdfPath)
{
    using var pdf = PdfDocument.FromFile(pdfPath);
    return pdf.ExtractAllText();
}
using IronPdf;

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

Die Wort-für-Wort-Iteration von Adobe wird mitIronPDFzu einem einzigen Methodenaufruf.

Kopf- und Fußzeilen

Adobe PDF Library SDK Implementierung:

using Datalogics.PDFL;

public void AddHeaderFooter(string inputPath, string outputPath)
{
    Library.Initialize();
    try
    {
        using (Document doc = new Document(inputPath))
        {
            Font font = new Font("Helvetica", FontCreateFlags.None);

            for (int i = 0; i < doc.NumPages; i++)
            {
                using (Page page = doc.GetPage(i))
                {
                    Content content = page.Content;

                    // Add header
                    Text header = new Text();
                    header.AddRun(new TextRun("Document Header",
                        font, 10, new Point(72, page.MediaBox.Top - 36)));
                    content.AddElement(header);

                    // Add footer with page number
                    Text footer = new Text();
                    footer.AddRun(new TextRun($"Page {i + 1} of {doc.NumPages}",
                        font, 10, new Point(72, 36)));
                    content.AddElement(footer);

                    page.UpdateContent();
                }
            }
            doc.Save(SaveFlags.Full, outputPath);
        }
    }
    finally
    {
        Library.Terminate();
    }
}
using Datalogics.PDFL;

public void AddHeaderFooter(string inputPath, string outputPath)
{
    Library.Initialize();
    try
    {
        using (Document doc = new Document(inputPath))
        {
            Font font = new Font("Helvetica", FontCreateFlags.None);

            for (int i = 0; i < doc.NumPages; i++)
            {
                using (Page page = doc.GetPage(i))
                {
                    Content content = page.Content;

                    // Add header
                    Text header = new Text();
                    header.AddRun(new TextRun("Document Header",
                        font, 10, new Point(72, page.MediaBox.Top - 36)));
                    content.AddElement(header);

                    // Add footer with page number
                    Text footer = new Text();
                    footer.AddRun(new TextRun($"Page {i + 1} of {doc.NumPages}",
                        font, 10, new Point(72, 36)));
                    content.AddElement(footer);

                    page.UpdateContent();
                }
            }
            doc.Save(SaveFlags.Full, outputPath);
        }
    }
    finally
    {
        Library.Terminate();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

using IronPdf;

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

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "Document Header",
        FontSize = 10,
        FontFamily = "Helvetica"
    };

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

    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 Header",
        FontSize = 10,
        FontFamily = "Helvetica"
    };

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

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

IronPDF verarbeitet Seiteniterationen automatisch und unterstützt Platzhalter-Token wie {page} und {total-pages}. Weitere Informationen zu fortgeschrittenen Layouts finden Sie in der Kopf- und Fußzeilen-Dokumentation.

URL zu PDF-Konvertierung

Adobe PDF Library SDK verfügt nicht über eine integrierte URL-Rendering-Funktion.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.

ASP.NET Core Integration

Das statische Initialisierungsmuster von Adobe PDF Library SDKführt zu Problemen bei der Injektion von Abhängigkeiten.IronPDFlässt sich problemlos in moderne .NET-Architekturen integrieren.

Adobe Pattern (problematisch für DI):

public class AdobePdfService
{
    public byte[] Generate(string content)
    {
        Library.Initialize();
        try
        {
            // Komplexes Dokumentconstruction...
            return bytes;
        }
        finally
        {
            Library.Terminate();
        }
    }
}
public class AdobePdfService
{
    public byte[] Generate(string content)
    {
        Library.Initialize();
        try
        {
            // Komplexes Dokumentconstruction...
            return bytes;
        }
        finally
        {
            Library.Terminate();
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF-Muster (DI-freundlich):

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

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;
    }
}

// Register in Program.cs (.NET 6+):
builder.Services.AddSingleton<IPdfService, IronPdfService>();
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
}

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;
    }
}

// Register in Program.cs (.NET 6+):
builder.Services.AddSingleton<IPdfService, IronPdfService>();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Async-Unterstützung

Adobe PDF Library SDK unterstützt keine asynchronen Operationen.IronPDFbietet vollständige async/await-Funktionen, die für skalierbare Webanwendungen unerlässlich sind:

public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Performance-Optimierung

Vergleich der Speichernutzung

Szenario Adobe PDF Library SDK IronPDF Notizen
Einfaches PDF ~100 MB ~50 MB Adobe lädt die komplette Engine
Komplexes Dokument ~200 MB ~80 MB IronPDFeffizienter
Stapel (100 PDFs) Hoch (Native Memory) ~100 MB IronPDFbesser verwaltet

Optimierungstipps

Wiederverwendung von Renderer-Instanzen:

// Good: Reuse renderer for batch operations
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
// Good: Reuse renderer for batch operations
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:

public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Fehlerbehebung bei allgemeinen Migrationsproblemen

Problem: Koordinaten-basierte Positionierung funktioniert nicht

Adobe verwendet PostScript-Punktkoordinaten.IronPDFverwendet CSS-Positionierung:

// Adobe: Point-based
new TextRun("Hello", font, 12, new Point(100, 700));

// IronPDF: CSS-based
string html = "<p style='position:absolute; left:100px; top:92px;'>Hello</p>";
// Adobe: Point-based
new TextRun("Hello", font, 12, new Point(100, 700));

// IronPDF: CSS-based
string html = "<p style='position:absolute; left:100px; top:92px;'>Hello</p>";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Problem: Unterschiede in der Seitengröße

Adobe verwendet PostScript-Punkte.IronPDFverwendet Enums oder benutzerdefinierte Dimensionen:

// Adobe: Points
Rect(0, 0, 612, 792) // Letter

// IronPDF: Enum or custom
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom:
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
// Adobe: Points
Rect(0, 0, 612, 792) // Letter

// IronPDF: Enum or custom
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom:
renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Problem: Schriftart nicht gefunden

Adobe verlangt die manuelle Einbettung von Schriftarten.IronPDFbehandelt Schriftarten automatisch:

// IronPDF: Use web fonts if needed
string html = @"
<style>
    @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
    body { font-family: 'Roboto', sans-serif; }
</style>";
// IronPDF: Use web fonts if needed
string html = @"
<style>
    @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
    body { font-family: 'Roboto', sans-serif; }
</style>";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Problem: SaveFlags nicht verfügbar

Adobe verwendet Speicherkennzeichen-Kombinationen.IronPDFverwendet die direkte Speicherung:

// Adobe
doc.Save(SaveFlags.Full | SaveFlags.Incremental, path);

//IronPDF- full save is default
pdf.SaveAs(path);
// Adobe
doc.Save(SaveFlags.Full | SaveFlags.Incremental, path);

//IronPDF- full save is default
pdf.SaveAs(path);
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 alle PDF-Workflows in einer Staging-Umgebung
  • [Überprüfen Sie, ob die Lizenzierung korrekt funktioniert (IronPdf.License.IsLicensed)
  • [Leistungsvergleich mit früherer Implementierung
  • [Adobe-Lizenzierungskonfiguration entfernen
  • [CI/CD-Pipeline-Abhängigkeiten aktualisieren
  • [Alle Adobe PDF Library DLLs aus dem Projekt entfernen
  • [Dokumentieren Sie neue Muster für Ihr Entwicklungsteam

Zukunftssicherheit für Ihre PDF-Infrastruktur

Angesichts der bevorstehenden Veröffentlichung von .NET 10 und der Einführung neuer Sprachfunktionen in C# 14 stellt die Auswahl einer .NET PDF-Bibliothek mit aktiver Entwicklung die Kompatibilität mit den sich entwickelnden Laufzeitfunktionen sicher. 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


Der Umstieg von Adobe PDF Library SDKaufIronPDFvereinfacht die Codebasis für die PDF-Erzeugung erheblich und senkt gleichzeitig die Lizenzkosten um eine Größenordnung. Durch den Wechsel von der Low-Level-Seitenkonstruktion zum HTML/CSS-Rendering entfallen Hunderte von Codezeilen für die Koordinatenberechnung, die Schriftverwaltung und die Lebenszyklusverwaltung. Für Teams, die moderne .NET-Anwendungen erstellen, bietetIronPDFgleichwertige Funktionen mit einer entwicklerfreundlichen API, die für zeitgemäße Entwicklungsabläufe konzipiert ist.

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