Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Wie man von GdPicture.NET SDK zu IronPDF in C# migriert

Die Migration von GdPicture.NET SDKzuIronPDFbietet .NET-Entwicklern einen fokussierten, optimierten Ansatz für die PDF-Erzeugung. Dieses Handbuch bietet einen umfassenden, schrittweisen Migrationspfad, der komplexe SDK-Muster für die Dokumentenerstellung durch moderne, PDF-spezifische APIs ersetzt, die für eine zeitgemäße .NET-Entwicklung konzipiert sind.

Warum von GdPicture.NET SDKzuIronPDFmigrieren

Die GdPicture.NET SDK-Herausforderungen

GdPicture.NET SDK (jetzt umbenannt in Nutrient) ist ein umfassendes SDK für die Bildbearbeitung von Dokumenten mit mehreren Herausforderungen für die Entwicklung von PDF-Dateien:

  1. Überdimensioniert für reine PDF-Projekte: Das GdPicture.NET SDKist eine vollständige Dokumentenverarbeitungssuite inklusive OCR, Barcode-Erkennung, Scannen und Bildverarbeitung. Wenn Sie nur PDF-Funktionen benötigen, zahlen Sie für Funktionen, die Sie nie nutzen werden.

  2. Komplexe Lizenzierung: Mehrere Produktstufen (GdPicture.NET 14, GdPicture.API, Ultimate, Professional) mit verwirrenden SKU-Kombinationen und jährlichen Abonnementanforderungen.

  3. Enterprise-Preisgestaltung: Die Lizenzkosten beginnen bei 2.999 US-Dollar für das PDF-Plugin allein und steigen bis auf über 10.000 US-Dollar für die Ultimate Edition. Die Lizenzierung pro Entwickler bedeutet einen erheblichen Mehraufwand für wachsende Teams.

  4. Steile Lernkurve: Die API basiert auf Dokumentenverarbeitungskonzepten und nicht auf modernen .NET-Mustern. Methoden wie LicenseManager.RegisterKEY(), GdPictureStatusenum checking und 1-indizierte Seiten wirken im Vergleich zu den heutigen C#-Konventionen veraltet.

  5. Statuscode-Muster: Jeder Vorgang gibt einen GdPictureStatusEnum zurück, der überprüft werden muss – es werden keine Ausnahmen bei Fehlern ausgelöst, was die Fehlerbehandlung ausführlich und wiederholend macht.

  6. Manuelle Ressourcenverwaltung: Erfordert explizite Aufrufe von Dispose() oder Release() . Das SDK folgt nicht sauber den Standard-.NET-Entsorgungsmustern.

  7. Versionsbindung: Der NamensraumGdPicture14enthält die Versionsnummer, sodass größere Versionsaktualisierungen Namespace-Änderungen in der gesamten Codebasis erfordern.

  8. Verwirrung durch Rebranding: Das kürzliche Rebranding zu "Nutrient" führt zu einer Fragmentierung der Dokumentation zwischen gdpicture.com und nutrient.io, was Support und Lernprozesse erschwert.

GdPicture.NET SDKvsIronPDFVergleich

Aspekt GdPicture.NET SDK IronPDF
Schwerpunkt Document Imaging Suite (Overkill für PDF) PDF-spezifische Bibliothek
Preisgestaltung $2.999-$10.000+ Unternehmensstufe Wettbewerbsfähig, skaliert mit dem Geschäft
API-Stil Statuscodes, manuelle Verwaltung Ausnahmen, IDisposable, modernes .NET
Lernkurve Steep (Bildgebungs-SDK-Konzepte) Einfach (HTML/CSS vertraut)
HTML-Rendering Basis, interner Motor Neuestes Chromium mit CSS3/JS
Indizierung der Seite 1-indiziert 0-indiziert (Standard .NET)
Thread-Sicherheit Manuelle Synchronisation erforderlich Thread-sicher durch Design
Namensraum Versionsspezifisch (GdPicture14) Stabil (IronPdf)

Für Teams, die die Einführung von .NET 10 und C# 14 bis 2025 und 2026 planen, bietetIronPDFeine zukunftssichere Grundlage, die mit modernen .NET-Mustern und -Konventionen übereinstimmt.


Migrationskomplexitätsbewertung

Geschätzter Aufwand nach Merkmalen

Feature Komplexität der Migration Notizen
HTML zu PDF Niedrig Direkte Methodenzuordnung
URLzu PDF Niedrig Direkte Methodenzuordnung
PDFs zusammenführen Niedrig Ähnliche API-Muster
PDFs teilen Niedrig Ähnliche API-Muster
Wasserzeichen Niedrig Unterschiedlicher Ansatz (HTML-basiert)
Textextraktion Niedrig Eigenschaft vs. Methode
Passwortschutz Medium Unterschiedliche Parameterstruktur
Formularfelder Medium API-Unterschiede
Digitale Signaturen Mittel-Hoch Unterschiedliche Handhabung von Zertifikaten
OCR Hoch IronOCR ist ein separates Produkt
BarCode-Erkennung Nicht anwendbar Nicht inIronPDFunterstützt

Migrations-Entscheidungsmatrix

Ihre Situation Empfehlung
Reine PDF-Vorgänge Migrieren - erhebliche Vereinfachung und Kosteneinsparungen
Starke OCR-Nutzung Betrachten Sie IronOCR als Begleitprodukt
BarCode/Scanning-Bedarf Behalten Sie GdPicture.NET SDKfür diese Funktionen, verwenden SieIronPDFfür PDF
Vollständiges Document Imaging Bewerten Sie, ob Sie tatsächlich alle Funktionen nutzen

Bevor Sie beginnen

Voraussetzungen

  1. .NET-Version:IronPDFunterstützt .NET Framework 4.6.2+ und .NET Core 2.0+ / .NET 5/6/7/8/9+
  2. Lizenzschlüssel: Ihren IronPDF-Lizenzschlüssel erhalten Sie auf ironpdf.com.
  3. Datensicherung: Erstellen Sie einen Branch für die Migrationsarbeiten.

Alle GdPicture.NET SDK-Verwendung identifizieren

# Find all GdPicture.NET SDKreferences in your codebase
grep -r "GdPicture14\|GdPicturePDF\|GdPictureDocumentConverter\|GdPictureStatus\|LicenseManager\.RegisterKEY" --include="*.cs" .

# Find all GdPicture package references
grep -r "GdPicture" --include="*.csproj" .
# Find all GdPicture.NET SDKreferences in your codebase
grep -r "GdPicture14\|GdPicturePDF\|GdPictureDocumentConverter\|GdPictureStatus\|LicenseManager\.RegisterKEY" --include="*.cs" .

# Find all GdPicture package references
grep -r "GdPicture" --include="*.csproj" .
SHELL

NuGet-Paketänderungen

# Remove GdPicture.NET SDKpackages
dotnet remove package GdPicture.NET.14
dotnet remove package GdPicture.NET.14.API
dotnet remove package GdPicture
dotnet remove package GdPicture.API

# Install IronPDF
dotnet add package IronPdf
# Remove GdPicture.NET SDKpackages
dotnet remove package GdPicture.NET.14
dotnet remove package GdPicture.NET.14.API
dotnet remove package GdPicture
dotnet remove package GdPicture.API

# Install IronPDF
dotnet add package IronPdf
SHELL

Schnellstart Migration

Schritt 1: Lizenzkonfiguration aktualisieren

Vor (GdPicture.NET SDK):

// Must be called before any GdPicture.NET SDKoperations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
// Must be called before any GdPicture.NET SDKoperations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
$vbLabelText   $csharpLabel

Nach (IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
$vbLabelText   $csharpLabel

Schritt 2: Aktualisieren der Namensraum-Importe

// Before (GdPicture.NET SDK)
using GdPicture14;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
// Before (GdPicture.NET SDK)
using GdPicture14;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
$vbLabelText   $csharpLabel

Schritt 3: Grundlegendes Konvertierungsmuster

Die wichtigste Änderung bei der Migration des GdPicture.NET SDKist die Abschaffung des ausführlichen Statusprüfungsmusters:

Vor (GdPicture.NET SDK):

using GdPicture14;

LicenseManager.RegisterKEY("LICENSE-KEY");

using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
{
    GdPictureStatus status = converter.LoadFromHTMLString("<h1>Hello World</h1>");

    if (status == GdPictureStatus.OK)
    {
        status = converter.SaveAsPDF("output.pdf");

        if (status != GdPictureStatus.OK)
        {
            Console.WriteLine($"Error: {status}");
        }
    }
    else
    {
        Console.WriteLine($"Load error: {status}");
    }
}
using GdPicture14;

LicenseManager.RegisterKEY("LICENSE-KEY");

using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
{
    GdPictureStatus status = converter.LoadFromHTMLString("<h1>Hello World</h1>");

    if (status == GdPictureStatus.OK)
    {
        status = converter.SaveAsPDF("output.pdf");

        if (status != GdPictureStatus.OK)
        {
            Console.WriteLine($"Error: {status}");
        }
    }
    else
    {
        Console.WriteLine($"Load error: {status}");
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

using IronPdf;

IronPdf.License.LicenseKey = "LICENSE-KEY";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
using IronPdf;

IronPdf.License.LicenseKey = "LICENSE-KEY";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

Hauptunterschiede:

  • Keine Statusüberprüfung - Ausnahmen bei Fehlern
  • Keine explizite Verfügung für Renderer erforderlich
  • Moderne, fließende API
  • Chromium-basiertes Rendering für bessere HTML/CSS-Unterstützung

Komplette API-Referenz

Namensraum-Zuordnung

GdPicture.NET SDK IronPDF
GdPicture14 IronPdf
GdPicture14.PDF IronPdf
GdPicture14.Imaging Nicht anwendbar (nicht erforderlich)

Kernklassen-Zuordnung

GdPicture.NET SDK IronPDF Beschreibung
GdPicturePDF PdfDocument Hauptklasse des PDF-Dokuments
GdPictureDocumentConverter ChromePdfRenderer Konvertierung von HTML/URL in PDF
LicenseManager IronPdf.Lizenz Lizenzverwaltung
GdPictureStatus Ausnahmen Fehlerbehandlung

Methoden zum Laden von Dokumenten

GdPicture.NET SDK IronPDF Notizen
pdf.LoadFromFile(path, loadInMemory) PdfDocument.FromFile(path) Aus Datei laden
pdf.LoadFromFile(Pfad, Passwort, loadInMemory) PdfDocument.FromFile(Pfad, Passwort) Passwort-geschützt
converter.LoadFromHTMLString(html) renderer.RenderHtmlAsPdf(html) HTML-Zeichenkette
converter.LoadFromURL(url) renderer.RenderUrlAsPdf(url) URL

Seitenoperationen

GdPicture.NET SDK IronPDF Notizen
pdf.GetPageCount() pdf.PageCount Seitenzahl abrufen
pdf.SelectPage(pageNo) pdf.Seiten[index] Seite auswählen (1-indiziert vs. 0-indiziert)
pdf.GetPageWidth() pdf.Pages[i].Width Breite der Seite
pdf.GetPageHeight() pdf.Pages[i].Height Seitenhöhe

Merge- und Split-Operationen

GdPicture.NET SDK IronPDF Notizen
pdf1.MergePages(pdf2) PdfDocument.Merge(pdf1, pdf2) PDFs zusammenführen
pdf.ExtractPages(start, end) pdf.CopyPages(indices) Seiten extrahieren

Wasserzeichenoperationen

GdPicture.NET SDK IronPDF Notizen
pdf.DrawText(...) Schleife pdf.ApplyWatermark(html) Text-Wasserzeichen
pdf.SetTextColor(Farbe) CSS-Styling Textfarbe einstellen
pdf.SetTextSize(Größe) CSS-Styling Textgröße festlegen

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML in PDF

Vor (GdPicture.NET SDK):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
        {
            string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
            GdPictureStatus status = converter.LoadFromHTMLString(htmlContent);

            if (status == GdPictureStatus.OK)
            {
                converter.SaveAsPDF("output.pdf");
            }
        }
    }
}
// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
        {
            string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
            GdPictureStatus status = converter.LoadFromHTMLString(htmlContent);

            if (status == GdPictureStatus.OK)
            {
                converter.SaveAsPDF("output.pdf");
            }
        }
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Der ChromePdfRenderervonIronPDFverwendet eine moderne Chromium-Engine für präzises HTML/CSS-Rendering, so dass eine Überprüfung des Statuscodes nicht erforderlich ist. Weitere HTML-Rendering-Optionen finden Sie in der HTML to PDF-Dokumentation.

Beispiel 2: Mehrere PDFs zusammenführen

Vor (GdPicture.NET SDK):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf1 = new GdPicturePDF())
        using (GdPicturePDF pdf2 = new GdPicturePDF())
        {
            pdf1.LoadFromFile("document1.pdf", false);
            pdf2.LoadFromFile("document2.pdf", false);

            pdf1.MergePages(pdf2);
            pdf1.SaveToFile("merged.pdf");
        }
    }
}
// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf1 = new GdPicturePDF())
        using (GdPicturePDF pdf2 = new GdPicturePDF())
        {
            pdf1.LoadFromFile("document1.pdf", false);
            pdf2.LoadFromFile("document2.pdf", false);

            pdf1.MergePages(pdf2);
            pdf1.SaveToFile("merged.pdf");
        }
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

Die statische Merge-Methode vonIronPDFakzeptiert eine Liste von Dokumenten und macht es einfach, mehrere PDFs in einem einzigen Vorgang zu kombinieren. Erfahren Sie mehr über das Zusammenführen und Aufteilen von PDFs.

Beispiel 3: Hinzufügen eines Wasserzeichens auf allen Seiten

Vor (GdPicture.NET SDK):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            pdf.LoadFromFile("input.pdf", false);

            for (int i = 1; i <= pdf.GetPageCount(); i++)
            {
                pdf.SelectPage(i);
                pdf.SetTextColor(Color.Red);
                pdf.SetTextSize(48);
                pdf.DrawText("CONFIDENTIAL", 200, 400);
            }

            pdf.SaveToFile("watermarked.pdf");
        }
    }
}
// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            pdf.LoadFromFile("input.pdf", false);

            for (int i = 1; i <= pdf.GetPageCount(); i++)
            {
                pdf.SelectPage(i);
                pdf.SetTextColor(Color.Red);
                pdf.SetTextSize(48);
                pdf.DrawText("CONFIDENTIAL", 200, 400);
            }

            pdf.SaveToFile("watermarked.pdf");
        }
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

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

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

        pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center);

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

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

        pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center);

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

Die Migration des GdPicture.NET SDKvon koordinatenbasierter Textzeichnung zu HTML-basiertem Wasserzeichen vereinfacht den Code erheblich. Die ApplyWatermark-Methode vonIronPDFverwendet HTML/CSS-Styling, so dass keine manuellen Seiteniterationen und Koordinatenberechnungen erforderlich sind. Weitere Optionen finden Sie in der vollständigen Wasserzeichen-Dokumentation.

Beispiel 4: Passwortschutz und Sicherheit

Vor (GdPicture.NET SDK):

using GdPicture14;

class Program
{
    static void Main()
    {
        LicenseManager.RegisterKEY("LICENSE-KEY");

        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            GdPictureStatus status = pdf.LoadFromFile("document.pdf", false);

            if (status != GdPictureStatus.OK) return;

            // Save with encryption - many boolean parameters
            status = pdf.SaveToFile(
                "protected.pdf",
                PdfEncryption.PdfEncryption256BitAES,
                "user123",      // User password
                "owner456",     // Owner password
                true,           // Can print
                false,          // Cannot copy
                false,          // Cannot modify
                false,          // Cannot add notes
                true,           // Can fill forms
                false,          // Cannot extract
                false,          // Cannot assemble
                true            // Can print high quality
            );
        }
    }
}
using GdPicture14;

class Program
{
    static void Main()
    {
        LicenseManager.RegisterKEY("LICENSE-KEY");

        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            GdPictureStatus status = pdf.LoadFromFile("document.pdf", false);

            if (status != GdPictureStatus.OK) return;

            // Save with encryption - many boolean parameters
            status = pdf.SaveToFile(
                "protected.pdf",
                PdfEncryption.PdfEncryption256BitAES,
                "user123",      // User password
                "owner456",     // Owner password
                true,           // Can print
                false,          // Cannot copy
                false,          // Cannot modify
                false,          // Cannot add notes
                true,           // Can fill forms
                false,          // Cannot extract
                false,          // Cannot assemble
                true            // Can print high quality
            );
        }
    }
}
$vbLabelText   $csharpLabel

Nach (IronPDF):

using IronPdf;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        // Configure security settings with clear property names
        pdf.SecuritySettings.OwnerPassword = "owner456";
        pdf.SecuritySettings.UserPassword = "user123";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
        pdf.SecuritySettings.AllowUserAnnotations = false;
        pdf.SecuritySettings.AllowUserFormData = true;

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

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        // Configure security settings with clear property names
        pdf.SecuritySettings.OwnerPassword = "owner456";
        pdf.SecuritySettings.UserPassword = "user123";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
        pdf.SecuritySettings.AllowUserAnnotations = false;
        pdf.SecuritySettings.AllowUserFormData = true;

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

Die SecuritySettings-Eigenschaft vonIronPDFbietet benannte, selbstdokumentierende Eigenschaften anstelle von booleschen Positionsparametern.


Kritische Hinweise zur Migration

Konvertierung der Seitenindizierung

Eine der wichtigsten Änderungen bei dieser Migration des GdPicture.NET SDKist der Unterschied bei der Seitenindexierung:

// GdPicture.NET SDK: 1-indiziertpages
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
    pdf.SelectPage(i);
    // process page
}

// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < pdf.PageCount; i++)
{
    var page = pdf.Pages[i];
    // process page
}
// GdPicture.NET SDK: 1-indiziertpages
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
    pdf.SelectPage(i);
    // process page
}

// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < pdf.PageCount; i++)
{
    var page = pdf.Pages[i];
    // process page
}
$vbLabelText   $csharpLabel

Status-Codes zu Ausnahmen

Ersetzen Sie die ausführliche Statusprüfung durch das Standard-Try-Catch-Verfahren:

// GdPicture.NET SDK
GdPictureStatus status = converter.LoadFromHTMLString(html);
if (status != GdPictureStatus.OK)
{
    Console.WriteLine($"Error: {status}");
    return;
}

// IronPDF
try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}
// GdPicture.NET SDK
GdPictureStatus status = converter.LoadFromHTMLString(html);
if (status != GdPictureStatus.OK)
{
    Console.WriteLine($"Error: {status}");
    return;
}

// IronPDF
try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}
$vbLabelText   $csharpLabel

Einheitsumwandlung

GdPicture.NET SDK verwendet Zoll für Ränder;IronPDFarbeitet mit Millimetern:

// GdPicture.NET SDK: 0.5 inches margin
converter.HtmlSetMargins(0.5f, 0.5f, 0.5f, 0.5f);

// IronPDF: 0.5 inches = 12.7 mm
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;
// GdPicture.NET SDK: 0.5 inches margin
converter.HtmlSetMargins(0.5f, 0.5f, 0.5f, 0.5f);

// IronPDF: 0.5 inches = 12.7 mm
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;
$vbLabelText   $csharpLabel

Umrechnungsformel: Millimeter = Zoll × 25,4

Thread-Sicherheit

GdPicture.NET SDK erfordert eine manuelle Synchronisation für gleichzeitige Operationen. Der ChromePdfRenderervonIronPDFist von Haus aus thread-sicher, was die PDF-Erzeugung mit mehreren Threads vereinfacht.


Erwägungen zur Leistung

Wiederverwendung von ChromePdfRenderer

Für eine optimale Leistung sollten Sie die Renderer-Instanz wiederverwenden:

// GOOD - Reuse renderer (thread-safe)
public class PdfService
{
    private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

    public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}

// BAD - Creates new instance each time
public byte[] GenerateBad(string html)
{
    var renderer = new ChromePdfRenderer();  // Wasteful
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}
// GOOD - Reuse renderer (thread-safe)
public class PdfService
{
    private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

    public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}

// BAD - Creates new instance each time
public byte[] GenerateBad(string html)
{
    var renderer = new ChromePdfRenderer();  // Wasteful
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}
$vbLabelText   $csharpLabel

Ressourcen richtig entsorgen

// Use using statements for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically
// Use using statements for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • Erfassung aller GdPicture.NET SDK-Nutzungen im Quellcode
  • Ermitteln Sie, welche Funktionen tatsächlich verwendet werden (PDF vs. OCRvs. Barcode).
  • Prüfen, ob OCR-/Barcode-Funktionen benötigt werden (erwägen Sie IronOCR/IronBarcode).
  • Überprüfen Sie die aktuelle Lizenzierung und vergleichen Sie sie mit den Preisen von IronPDF.
  • IronPDF-Lizenzschlüssel erhalten
  • Migrationszweig in der Versionskontrolle erstellen

Code-Migration

  • Entfernen Sie die NuGet-Pakete des GdPicture.NET SDK: dotnet remove package GdPicture.NET
  • Installieren Sie das IronPdf NuGet-Paket: dotnet add package IronPdf
  • Namespace-Importe aktualisieren ( GdPicture14IronPdf)
  • Ersetzen Sie LicenseManager.RegisterKEY() durch IronPdf.License.LicenseKey
  • Statuscodeprüfungen in try-catch-Blöcke umwandeln
  • Aktualisierung der Seitenindizierung (1-indexiert → 0-indexiert)
  • Ersetzen Sie GdPicturePDFdurch PdfDocument
  • Ersetzen Sie GdPictureDocumentConverterdurch ChromePdfRenderer
  • Konvertierung von koordinatenbasiertem Text in HTML-Stempel
  • Einheitenumrechnungen aktualisieren (Zoll → Millimeter)

Testen

  • Alle PDF-Generierungspfade einem Unit-Test unterziehen
  • Überprüfen Sie, ob die HTML-Rendering-Qualität den Anforderungen entspricht oder diese übertrifft.
  • Alle Sicherheits-/Verschlüsselungsszenarien testen
  • Überprüfung der Formularausfüllfunktion
  • Testen von Zusammenführungs-/Aufteilungsoperationen
  • Überprüfung des Wasserzeichen-Erscheinungsbilds
  • Leistungsbenchmark kritische Pfade

Nach der Migration

  • GdPicture.NET SDK-Lizenzdateien/-schlüssel entfernen
  • Dokumentation aktualisieren
  • Das Team in IronPDF-API-Mustern schulen
  • Die Produktion auf etwaige Probleme überwachen

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