Wie man von GdPicture.NET SDK zu IronPDF in C# migriert
Die Migration von GdPicture.NET SDK zu IronPDF bietet .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 SDK zu IronPDF migrieren
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:
-
Überdimensioniert für reine PDF-Projekte: Das GdPicture .NET SDK ist eine vollständige Suite inklusive OCR, Barcode-Erkennung, Scannen und Bildverarbeitung. Wenn Sie nur PDF-Funktionen benötigen, zahlen Sie für Funktionen, die Sie nie nutzen werden.
-
Komplexe Lizenzierung: Mehrere Produktstufen (GdPicture .NET 14, GdPicture.API, Ultimate, Professional) mit verwirrenden SKU-Kombinationen und jährlichen Abonnementanforderungen.
-
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.
-
Steile Lernkurve: Die API basiert auf Dokumentenverarbeitungskonzepten und nicht auf modernen .NET Mustern. Methoden wie
LicenseManager.RegisterKEY(),GdPictureStatusEnum-Prüfungen und 1-indexierte Seiten wirken im Vergleich zu den heutigen C#-Konventionen veraltet. -
Statuscode-Muster: Jede Operation 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. -
Manuelle Ressourcenverwaltung: Erfordert explizite Aufrufe von
Dispose()oderRelease(). Das SDK folgt nicht sauber den Standard-.NET-Entsorgungsmustern. -
Versionsbindung: Der Namensraum
GdPicture14enthält die Versionsnummer, sodass größere Versions-Upgrades Namespace-Änderungen in der gesamten Codebasis erfordern. - 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 SDK vs IronPDFVergleich
| 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 | Steil (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, bietet IronPDF eine zukunftssichere Grundlage, die mit modernen .NET-Mustern und -Konventionen übereinstimmt.
Migrationskomplexitätsbewertung
Geschätzter Aufwand nach Merkmalen
| Feature | Komplexität der Migration |
|---|---|
| HTML zu PDF | Niedrig |
| URL zu PDF | Niedrig |
| PDFs zusammenführen | Niedrig |
| PDFs teilen | Niedrig |
| Wasserzeichen | Niedrig |
| Textextraktion | Niedrig |
| Passwortschutz | Medium |
| Formularfelder | Medium |
| Digitale Signaturen | Mittel-Hoch |
| OCR | Hoch |
| BarCode-Erkennung | Nicht anwendbar |
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 SDK für diese Funktionen, verwenden Sie IronPDF für PDF |
| Vollständiges Document Imaging | Bewerten Sie, ob Sie tatsächlich alle Funktionen nutzen |
Bevor Sie beginnen
Voraussetzungen
- .NET Version:IronPDF unterstützt .NET Framework 4.6.2+ und .NET Core 2.0+ / .NET 5/6/7/8/9+
- Lizenzschlüssel: Ihren IronPDF-Lizenzschlüssel erhalten Sie unter IronPDF.
- Datensicherung: Erstellen Sie einen Branch für die Migrationsarbeiten.
Alle GdPicture.NET SDK-Verwendung identifizieren
# Find all GdPicture.NET SDK references 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 SDK references in your codebase
grep -r "GdPicture14\|GdPicturePDF\|GdPictureDocumentConverter\|GdPictureStatus\|LicenseManager\.RegisterKEY" --include="*.cs" .
# Find all GdPicture package references
grep -r "GdPicture" --include="*.csproj" .
NuGet-Paketänderungen
# Remove GdPicture.NET SDK packages
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 SDK packages
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
Schnellstart Migration
Schritt 1: Lizenzkonfiguration aktualisieren
Vor (GdPicture.NET SDK):
// Must be called before any GdPicture.NET SDK operations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
// Must be called before any GdPicture.NET SDK operations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
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" }
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
' Or in appsettings.json:
' { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
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;
Imports IronPdf
Imports IronPdf.Editing
Schritt 3: Grundlegendes Konvertierungsmuster
Die wichtigste Änderung bei der Migration des GdPicture.NET SDK ist 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}");
}
}
Imports GdPicture14
LicenseManager.RegisterKEY("LICENSE-KEY")
Using converter As New GdPictureDocumentConverter()
Dim status As GdPictureStatus = converter.LoadFromHTMLString("<h1>Hello World</h1>")
If status = GdPictureStatus.OK Then
status = converter.SaveAsPDF("output.pdf")
If status <> GdPictureStatus.OK Then
Console.WriteLine($"Error: {status}")
End If
Else
Console.WriteLine($"Load error: {status}")
End If
End Using
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");
Imports IronPdf
IronPdf.License.LicenseKey = "LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
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.License |
Lizenzverwaltung |
GdPictureStatus |
Ausnahmen | Fehlerbehandlung |
Methoden zum Laden von Dokumenten
| GdPicture.NET SDK | IronPDF |
|---|---|
pdf.LoadFromFile(path, loadInMemory) |
PdfDocument.FromFile(path) |
pdf.LoadFromFile(path, password, loadInMemory) |
PdfDocument.FromFile(path, password) |
converter.LoadFromHTMLString(html) |
renderer.RenderHtmlAsPdf(html) |
converter.LoadFromURL(url) |
renderer.RenderUrlAsPdf(url) |
Seitenoperationen
| GdPicture.NET SDK | IronPDF |
|---|---|
pdf.GetPageCount() |
pdf.PageCount |
pdf.SelectPage(pageNo) |
pdf.Pages[index] |
pdf.GetPageWidth() |
pdf.Pages[i].Width |
pdf.GetPageHeight() |
pdf.Pages[i].Height |
Merge- und Split-Operationen
| GdPicture.NET SDK | IronPDF |
|---|---|
pdf1.MergePages(pdf2) |
PdfDocument.Merge(pdf1, pdf2) |
pdf.ExtractPages(start, end) |
pdf.CopyPages(indices) |
Wasserzeichenoperationen
| GdPicture.NET SDK | IronPDF |
|---|---|
pdf.DrawText(...) Schleife |
pdf.ApplyWatermark(html) |
pdf.SetTextColor(color) |
CSS-Styling |
pdf.SetTextSize(size) |
CSS-Styling |
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");
}
}
}
}
Imports GdPicture14
Imports System
Class Program
Shared Sub Main()
Using converter As New GdPictureDocumentConverter()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim status As GdPictureStatus = converter.LoadFromHTMLString(htmlContent)
If status = GdPictureStatus.OK Then
converter.SaveAsPDF("output.pdf")
End If
End Using
End Sub
End Class
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");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF's ChromePdfRenderer verwendet eine moderne Chromium-Engine für die präzise Darstellung von HTML/CSS, wodurch die Notwendigkeit einer Statuscodeprüfung entfällt. 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");
}
}
}
Imports GdPicture14
Imports System
Class Program
Shared Sub Main()
Using pdf1 As New GdPicturePDF(), pdf2 As New GdPicturePDF()
pdf1.LoadFromFile("document1.pdf", False)
pdf2.LoadFromFile("document2.pdf", False)
pdf1.MergePages(pdf2)
pdf1.SaveToFile("merged.pdf")
End Using
End Sub
End Class
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");
}
}
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
Die statische Methode Merge von IronPDF akzeptiert eine Liste von Dokumenten, wodurch es einfach ist, 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");
}
}
}
Imports GdPicture14
Imports System
Imports System.Drawing
Module Program
Sub Main()
Using pdf As New GdPicturePDF()
pdf.LoadFromFile("input.pdf", False)
For i As Integer = 1 To pdf.GetPageCount()
pdf.SelectPage(i)
pdf.SetTextColor(Color.Red)
pdf.SetTextSize(48)
pdf.DrawText("CONFIDENTIAL", 200, 400)
Next
pdf.SaveToFile("watermarked.pdf")
End Using
End Sub
End Module
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");
}
}
Imports IronPdf
Imports IronPdf.Editing
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center)
pdf.SaveAs("watermarked.pdf")
End Sub
End Class
Die Migration des GdPicture.NET SDK von koordinatenbasierter Textzeichnung zu HTML-basiertem Wasserzeichen vereinfacht den Code erheblich. Die ApplyWatermark-Methode von IronPDF verwendet HTML/CSS-Styling, wodurch die Notwendigkeit manueller Seiteniteration und Koordinatenberechnungen entfällt. 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
);
}
}
}
Imports GdPicture14
Class Program
Shared Sub Main()
LicenseManager.RegisterKEY("LICENSE-KEY")
Using pdf As New GdPicturePDF()
Dim status As GdPictureStatus = pdf.LoadFromFile("document.pdf", False)
If status <> GdPictureStatus.OK Then 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
)
End Using
End Sub
End Class
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");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim 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")
End Sub
End Class
Die SecuritySettings-Eigenschaft von IronPDF stellt benannte, selbstdokumentierende Eigenschaften anstelle von positionellen booleschen Parametern bereit.
Kritische Hinweise zur Migration
Konvertierung der Seitenindizierung
Eine der wichtigsten Änderungen bei dieser Migration des GdPicture.NET SDK ist 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
}
Imports GdPicture
Imports IronPdf
' GdPicture.NET SDK: 1-indiziertpages
For i As Integer = 1 To pdf.GetPageCount()
pdf.SelectPage(i)
' process page
Next
' IronPDF: 0-indexed pages (standard .NET)
For i As Integer = 0 To pdf.PageCount - 1
Dim page = pdf.Pages(i)
' process page
Next
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}");
}
' GdPicture.NET SDK
Dim status As GdPictureStatus = converter.LoadFromHTMLString(html)
If status <> GdPictureStatus.OK Then
Console.WriteLine($"Error: {status}")
Return
End If
' IronPDF
Try
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Catch ex As Exception
Console.WriteLine($"Error: {ex.Message}")
End Try
Einheitsumwandlung
GdPicture.NET SDK verwendet Zoll für Ränder;IronPDF arbeitet 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;
' 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
Umrechnungsformel: millimeters = inches × 25.4
Thread-Sicherheit
GdPicture.NET SDK erfordert eine manuelle Synchronisation für gleichzeitige Operationen. IronPDF s ChromePdfRenderer ist von Grund auf threadsicher, was die Multithread-PDF-Generierung 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;
}
Imports System
Public Class PdfService
Private Shared ReadOnly _renderer As New ChromePdfRenderer()
Public Function Generate(html As String) As Byte()
Return _renderer.RenderHtmlAsPdf(html).BinaryData
End Function
' BAD - Creates new instance each time
Public Function GenerateBad(html As String) As Byte()
Dim renderer As New ChromePdfRenderer() ' Wasteful
Return renderer.RenderHtmlAsPdf(html).BinaryData
End Function
End Class
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
Imports PdfDocument
' Use Using blocks for automatic cleanup
Using pdf = PdfDocument.FromFile("large.pdf")
Dim text As String = pdf.ExtractAllText()
End Using ' pdf is disposed automatically
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 GdPicture .NET SDK NuGet Pakete:
dotnet remove package GdPicture.NET - Installieren Sie das IronPDFNuGet Paket:
dotnet add package IronPdf - Namespace-Importe aktualisieren (
GdPicture14→IronPdf) - Ersetzen Sie
LicenseManager.RegisterKEY()durchIronPdf.License.LicenseKey - Statuscodeprüfungen in try-catch-Blöcke umwandeln
- Aktualisierung der Seitenindizierung (1-indexiert → 0-indexiert)
- Ersetzen Sie
GdPicturePDFdurchPdfDocument - Ersetzen Sie
GdPictureDocumentConverterdurchChromePdfRenderer - 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 IronPDFAPI-Mustern schulen
- Die Produktion auf etwaige Probleme überwachen

