Wie man PDF-Dateien in C# mit IronPDF signiert
Ein Umstieg von Nutrient (ehemals PSPDFKit) auf IronPDF vereinfacht Ihren .NET PDF-Workflow, indem Sie von einem breiten Imaging- und PDF-Toolkit zu einer fokussierten PDF-Bibliothek wechseln. Das serverseitige .NET-Angebot von Nutrient ist GdPicture.NET – das Toolkit, das von ORPALIS erworben und als "Nutrient .NET SDK" neu positioniert wurde – welches als GdPicture NuGet-Paket unter dem GdPicture14 Namensraum ausgeliefert wird. Dieser Leitfaden führt durch einen schrittweisen Migrationspfad, der das prozedurale, vielseitige Toolkit gegen eine PDF-Only-Bibliothek mit kleinerer Oberfläche austauscht.
Warum von Nutrient zu IronPDF migrieren
Das Toolkit-Oberflächenproblem
Nutrient (ehemals PSPDFKit, umbenannt am 23.10.2024) verkauft eine Multi-Produkt-Familie — Dokument-Engine (Docker-Mikroservice), Web-SDK, mobile SDKs und ein serverseitiges .NET SDK, das intern GdPicture ist. Für Teams, die einfache PDF-Operationen ohne den Rest des Toolkits benötigen, zeigt sich die Oberfläche auf einige konkrete Weisen:
-
Breites Toolkit-Scope: Das .NET SDK deckt PDF, OCR, Barcodes, TWAIN-Scannen, Bildverarbeitung und Umwandlung in über 100 Dateiformate ab. Nützlich, wenn Sie diese Breite brauchen — mehr Oberfläche, als ein reines PDF-Projekt benötigt, wenn nicht.
-
Vertriebsgeführte Preisgestaltung: Die Seite
nutrient.io/sdk/pricingleitet zu einem Kontaktformular weiter, statt die Kosten pro Entwickler zu veröffentlichen, was den Kostenvergleich für kleine Teams erschwert. -
Marken- und Paketwechsel: PSPDFKit → Nutrient (23.10.2024) plus der GdPicture-Erwerbung bedeutet drei Namen, die es in älterem Code zu verfolgen gilt. Das .NET SDK wird weiterhin als
GdPictureNuGet-Paket, NamensraumGdPicture14, mit Klassennamen wieGdPicturePDFundGdPictureDocumentConverterausgeliefert, die nicht mit dem "Nutrient" oder "PSPDFKit" Branding übereinstimmen. -
Externe Browser-Abhängigkeit für HTML zu PDF: Der HTML-Renderer des .NET SDKs verlässt sich auf ein systeminstalliertes Chrome oder Edge (oder einen tragbaren Pfad, den Sie über
SetWebBrowserPathfestlegen).IronPDF liefert sein eigenes eingebettetes Chromium. - Prozedurale PDF API: Wasserzeichen setzen sich aus
SetFillAlpha,DrawTextBoxund OCG-Schichtmarkern zusammen; Kopf- und Fußzeilen werden pro Seite in einer Schleife gezeichnet. Das Komponieren allgemeiner PDF-Operationen aus Primitiven bedeutet mehr Code pro Aufgabe.
Nutrient .NET SDK vs IronPDF Vergleich
| Aspekt | Nutrient .NET SDK (GdPicture) | IronPDF |
|---|---|---|
| Umfang | PDF + OCR + Barcode + Scannen + Bildgebung | PDF-Bibliothek |
| Preisgestaltung | Vertriebsgeführt (Kontakt für ein Angebot) | Transparent, veröffentlicht |
| NuGet-Paket | GdPicture |
IronPdf |
| Root-Namespace | GdPicture14 |
IronPdf |
| API-Stil | Hauptsächlich synchrone, prozedurale Zeichenaufrufe | Synchron mit asynchroner Option, fließend |
| HTML-Rendering | Erfordert system Chrome / Edge | Eingebettetes Chromium |
| Seitenindexierung | 1-basiert | 0-basiert |
| Zielbenutzer | Teams, die Imaging + Scannen + PDF in einem Toolkit benötigen | Teams, die nur PDF benötigen |
Für Teams auf modernem .NET, die nur PDF brauchen, bietet IronPDF eine kleinere, PDF-fokussierte Grundlage, die sich sauber integriert, ohne die zusätzlichen Imaging / Scanning / OCR-Schichten.
Bevor Sie beginnen
Voraussetzungen
- .NET -Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet -Zugriff: Möglichkeit zur Installation von NuGet -Paketen
- IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.
NuGet-Paketänderungen
# Remove theNutrient .NET SDK (GdPicture)and any legacy PSPDFKit-branded packages
dotnet remove package GdPicture
dotnet remove package GdPicture.WPF
dotnet remove package GdPicture.WinForms
dotnet remove package PSPDFKit.NET
# Install IronPDF
dotnet add package IronPdf
# Remove theNutrient .NET SDK (GdPicture)and any legacy PSPDFKit-branded packages
dotnet remove package GdPicture
dotnet remove package GdPicture.WPF
dotnet remove package GdPicture.WinForms
dotnet remove package PSPDFKit.NET
# Install IronPDF
dotnet add package IronPdf
Das aktuelle Nutrient .NET SDK wird unter der GdPicture NuGet-ID (neueste 14.x, Inhaber ORPALIS – ein Tochterunternehmen von Nutrient) veröffentlicht. Das ältere PSPDFKit-gebrandete PSPDFKit.NET Paket wird eingestellt; entfernen Sie es, wenn vorhanden.
Lizenz-Konfiguration
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Nutrient .NET SDK Verwendung identifizieren
# Find GdPicture / Nutrient / PSPDFKit usage
grep -rE "GdPicture14|GdPicturePDF|GdPictureDocumentConverter|PSPDFKit|Nutrient" --include="*.cs" .
# Find GdPicture / Nutrient / PSPDFKit usage
grep -rE "GdPicture14|GdPicturePDF|GdPictureDocumentConverter|PSPDFKit|Nutrient" --include="*.cs" .
Komplette API-Referenz
Initialisierungs-Zuordnungen
| Nutrient .NET SDK (GdPicture) | IronPDF |
|---|---|
new GdPicturePDF() |
new PdfDocument(...) / PdfDocument.FromFile(...) |
new GdPictureDocumentConverter() |
new ChromePdfRenderer() |
pdf.Dispose() (IDisposable) |
pdf.Dispose() (IDisposable) |
Zuordnungen beim Laden von Dokumenten
| Nutrient .NET SDK (GdPicture) | IronPDF |
|---|---|
pdf.LoadFromFile(path) |
PdfDocument.FromFile(path) |
pdf.LoadFromStream(stream) |
PdfDocument.FromStream(stream) |
pdf.LoadFromByteArray(bytes) |
new PdfDocument(bytes) / PdfDocument.FromBinaryData(bytes) |
Zuordnungen für die PDF-Erzeugung
| Nutrient .NET SDK (GdPicture) | IronPDF |
|---|---|
HTML-String: in temporäre Datei schreiben, dann converter.LoadFromFile(path, DocumentFormat.DocumentFormatHTML) + SaveAsPDF(out) |
renderer.RenderHtmlAsPdf(html) |
converter.LoadFromHttp(url) + SaveAsPDF(out) |
renderer.RenderUrlAsPdf(url) |
converter.LoadFromFile(htmlPath, DocumentFormat.DocumentFormatHTML) + SaveAsPDF(out) |
renderer.RenderHtmlFileAsPdf(path) |
Zuordnungen von Dokumentenoperationen
| Nutrient .NET SDK (GdPicture) | IronPDF |
|---|---|
converter.CombineToPDF(paths, out, PdfConformance.PDF) |
PdfDocument.Merge(pdfs) |
pdf.GetPageCount() |
pdf.PageCount |
pdf.SaveToFile(path) |
pdf.SaveAs(path) |
pdf.SaveToByteArray(out bytes) |
pdf.BinaryData |
Wasserzeichen-Mappings
| Nutrient .NET SDK (GdPicture) | IronPDF |
|---|---|
pdf.SetFillAlpha(...) + pdf.DrawTextBox(...) pro Seite |
pdf.ApplyWatermark(html, rotation, vAlign, hAlign) |
pdf.AddStandardFont(...) + Zeichenaufrufe |
HTML/CSS im Wasserzeichen-String |
SetFillAlpha(128) (0–255 Byte-Skala) |
Wasserzeichen Opacity 0–100 (int) oder CSS opacity |
pdf.SetTextSize(48) |
CSS font-size: 48px |
Beispiele für die Code-Migration
Beispiel 1: Konvertierung von HTML in PDF
Before (Nutrient .NET SDK / GdPicture):
// NuGet: Install-Package GdPicture
using GdPicture14;
using System.IO;
class Program
{
static void Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
// GdPicture's HTML loader is file-based, so stage the string to disk first.
File.WriteAllText("input.html", htmlContent);
using var converter = new GdPictureDocumentConverter();
converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML);
converter.SaveAsPDF("output.pdf");
}
}
// NuGet: Install-Package GdPicture
using GdPicture14;
using System.IO;
class Program
{
static void Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
// GdPicture's HTML loader is file-based, so stage the string to disk first.
File.WriteAllText("input.html", htmlContent);
using var converter = new GdPictureDocumentConverter();
converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML);
converter.SaveAsPDF("output.pdf");
}
}
Imports GdPicture14
Imports System.IO
Class Program
Shared Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
' GdPicture's HTML loader is file-based, so stage the string to disk first.
File.WriteAllText("input.html", htmlContent)
Using converter As New GdPictureDocumentConverter()
converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML)
converter.SaveAsPDF("output.pdf")
End Using
End Sub
End Class
Nach (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
Der GdPicture-Ansatz erfordert einige zusätzliche Schritte: Der HTML-Loader ist datei-/URL-basiert, daher muss ein im Speicher befindlicher HTML-String zuerst auf die Festplatte abgelegt, dann wird converter.LoadFromFile(...) mit DocumentFormat.DocumentFormatHTML aufgerufen, gefolgt von SaveAsPDF. Die HTML-Renderung verlässt sich auf ein systeminstalliertes Chrome oder Edge (oder einen tragbaren Pfad, der über SetWebBrowserPath bereitgestellt wird).
IronPDF akzeptiert den HTML-String direkt. Erstellen Sie ein ChromePdfRenderer, rufen Sie RenderHtmlAsPdf() auf und speichern Sie mit SaveAs(). Keine Temporärdatei, keine Hostbrowser-Abhängigkeit —IronPDF liefert sein eigenes eingebettetes Chromium. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.
Beispiel 2: Zusammenführen mehrerer PDFs
Before (Nutrient .NET SDK / GdPicture):
// NuGet: Install-Package GdPicture
using GdPicture14;
using System.Collections.Generic;
class Program
{
static void Main()
{
IEnumerable<string> sourceFiles = new List<string>
{
"document1.pdf",
"document2.pdf"
};
using var converter = new GdPictureDocumentConverter();
converter.CombineToPDF(sourceFiles, "merged.pdf", PdfConformance.PDF);
}
}
// NuGet: Install-Package GdPicture
using GdPicture14;
using System.Collections.Generic;
class Program
{
static void Main()
{
IEnumerable<string> sourceFiles = new List<string>
{
"document1.pdf",
"document2.pdf"
};
using var converter = new GdPictureDocumentConverter();
converter.CombineToPDF(sourceFiles, "merged.pdf", PdfConformance.PDF);
}
}
Imports GdPicture14
Imports System.Collections.Generic
Class Program
Shared Sub Main()
Dim sourceFiles As IEnumerable(Of String) = New List(Of String) From {
"document1.pdf",
"document2.pdf"
}
Using converter As New GdPictureDocumentConverter()
converter.CombineToPDF(sourceFiles, "merged.pdf", PdfConformance.PDF)
End Using
End Sub
End Class
Nach (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
Der GdPicture-Merge nimmt einen pfadbasierten IEnumerable<string> durch converter.CombineToPDF, mit einem PdfConformance Wert, der das Ausgabe-Konformitätslevel auswählt.
IronPDF arbeitet auf Dokumentenebene: Laden Sie jedes PDF mit PdfDocument.FromFile(), fügen Sie es mit der statischen PdfDocument.Merge() Methode zusammen und speichern Sie es. Dokumente können direkt oder als aufzählbare Menge übergeben werden. Erfahren Sie mehr über das Zusammenführen und Aufteilen von PDFs.
Beispiel 3: Hinzufügen von Wasserzeichen
Before (Nutrient .NET SDK / GdPicture):
// NuGet: Install-Package GdPicture
using GdPicture14;
class Program
{
static void Main()
{
using var pdf = new GdPicturePDF();
pdf.LoadFromFile("document.pdf");
pdf.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitPoint);
var font = pdf.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold);
int pageCount = pdf.GetPageCount();
for (int i = 1; i <= pageCount; i++)
{
pdf.SelectPage(i);
pdf.SetFillAlpha(128); // ~50% (0..255)
pdf.SetTextSize(48);
pdf.SetOriginRotationInDegrees(45);
pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL",
PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
PdfVerticalAlignment.PdfVerticalAlignmentMiddle);
}
pdf.SaveToFile("watermarked.pdf");
}
}
// NuGet: Install-Package GdPicture
using GdPicture14;
class Program
{
static void Main()
{
using var pdf = new GdPicturePDF();
pdf.LoadFromFile("document.pdf");
pdf.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitPoint);
var font = pdf.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold);
int pageCount = pdf.GetPageCount();
for (int i = 1; i <= pageCount; i++)
{
pdf.SelectPage(i);
pdf.SetFillAlpha(128); // ~50% (0..255)
pdf.SetTextSize(48);
pdf.SetOriginRotationInDegrees(45);
pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL",
PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
PdfVerticalAlignment.PdfVerticalAlignmentMiddle);
}
pdf.SaveToFile("watermarked.pdf");
}
}
Imports GdPicture14
Class Program
Shared Sub Main()
Using pdf As New GdPicturePDF()
pdf.LoadFromFile("document.pdf")
pdf.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitPoint)
Dim font = pdf.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold)
Dim pageCount As Integer = pdf.GetPageCount()
For i As Integer = 1 To pageCount
pdf.SelectPage(i)
pdf.SetFillAlpha(128) ' ~50% (0..255)
pdf.SetTextSize(48)
pdf.SetOriginRotationInDegrees(45)
pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL", PdfHorizontalAlignment.PdfHorizontalAlignmentCenter, PdfVerticalAlignment.PdfVerticalAlignmentMiddle)
Next
pdf.SaveToFile("watermarked.pdf")
End Using
End Sub
End Class
Nach (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
45,
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("document.pdf");
pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
45,
VerticalAlignment.Middle,
HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
45,
VerticalAlignment.Middle,
HorizontalAlignment.Center)
pdf.SaveAs("watermarked.pdf")
End Sub
End Class
Dieses Beispiel verdeutlicht einen grundlegenden architektonischen Unterschied. GdPicture verwendet einen Prozedurale-Zeichenaufruf-Ansatz: Fügen Sie eine Standardschriftart hinzu und iterieren Sie dann seitenweise (1-basiert) und rufen Sie SelectPage, SetFillAlpha, SetTextSize, SetOriginRotationInDegrees, und DrawTextBox auf. Alpha ist auf einer 0–255 Byteskala, Drehung wird als Grafikzustandseigenschaft gesetzt und Positionierung wird durch explizite Koordinaten gehandhabt.
IronPDF verwendet einen HTML-basierten Ansatz: Die Methode ApplyWatermark() akzeptiert einen HTML-String mit CSS-Stil und wendet diesen in einem einzigen Aufruf auf alle Seiten an. Sie kontrollieren das Erscheinungsbild durch bekannte CSS-Eigenschaften (color, opacity, font-size) anstelle primitiver Grafikaufrufe. Dieser Ansatz unterstützt auch reichhaltigere Inhalte — Verläufe, Bilder und komplexere Layouts — im gleichen String. Weitere Beispiele finden Sie in der Dokumentation zum Wasserzeichen .
Kritische Hinweise zur Migration
HTML Input Oberfläche
Der HTML-Loader von GdPicture ist datei-/URL-basiert;IronPDF nimmt HTML-Strings direkt an:
// Nutrient .NET SDK (string -> file -> PDF):
File.WriteAllText("input.html", html);
converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML);
converter.SaveAsPDF("output.pdf");
//IronPDF(string -> PDF):
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Nutrient .NET SDK (string -> file -> PDF):
File.WriteAllText("input.html", html);
converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML);
converter.SaveAsPDF("output.pdf");
//IronPDF(string -> PDF):
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
' Nutrient .NET SDK (string -> file -> PDF):
File.WriteAllText("input.html", html)
converter.LoadFromFile("input.html", DocumentFormat.DocumentFormatHTML)
converter.SaveAsPDF("output.pdf")
' IronPDF(string -> PDF):
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Wenn Sie asynchrone Operationen benötigen, bietet IronPDF asynchrone Varianten wie RenderHtmlAsPdfAsync().
Externe Browser-Abhängigkeit
Der HTML-Renderer von GdPicture verlässt sich auf ein systeminstalliertes Chrome oder Edge (oder einen tragbaren Pfad, den Sie über SetWebBrowserPath festlegen).IronPDF liefert sein eigenes eingebettetes Chromium:
// Nutrient .NET SDK: optionally point to a portable Chrome
converter.SetWebBrowserPath(@"C:\Tools\chrome\chrome.exe");
// IronPDF: nothing to configure
var pdf = renderer.RenderHtmlAsPdf(html);
// Nutrient .NET SDK: optionally point to a portable Chrome
converter.SetWebBrowserPath(@"C:\Tools\chrome\chrome.exe");
// IronPDF: nothing to configure
var pdf = renderer.RenderHtmlAsPdf(html);
' Nutrient .NET SDK: optionally point to a portable Chrome
converter.SetWebBrowserPath("C:\Tools\chrome\chrome.exe")
' IronPDF: nothing to configure
Dim pdf = renderer.RenderHtmlAsPdf(html)
Änderung von Konfigurationsmustern
GdPicture stellt Layout-Einstellungen als pro-Eigenschaften-Werte auf dem Konverter auf (HTML-Seitengröße/Breite in Zoll, individuelle Ränder).IronPDF gruppiert sie in einer RenderingOptions Tasche mit benannten Papierformaten:
// Nutrient .NET SDK: properties on the converter (inches)
using var converter = new GdPictureDocumentConverter();
converter.HtmlPageWidth = 8.27f; // A4 width (inches)
converter.HtmlPageHeight = 11.69f; // A4 height (inches)
converter.HtmlMarginTop = 0.78f;
converter.HtmlMarginBottom = 0.78f;
converter.HtmlMarginLeft = 0.78f;
converter.HtmlMarginRight = 0.78f;
// IronPDF: properties on RenderingOptions (millimetres)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf(html);
// Nutrient .NET SDK: properties on the converter (inches)
using var converter = new GdPictureDocumentConverter();
converter.HtmlPageWidth = 8.27f; // A4 width (inches)
converter.HtmlPageHeight = 11.69f; // A4 height (inches)
converter.HtmlMarginTop = 0.78f;
converter.HtmlMarginBottom = 0.78f;
converter.HtmlMarginLeft = 0.78f;
converter.HtmlMarginRight = 0.78f;
// IronPDF: properties on RenderingOptions (millimetres)
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf(html);
Imports GdPicture14
Imports IronPdf
' Nutrient .NET SDK: properties on the converter (inches)
Using converter As New GdPictureDocumentConverter()
converter.HtmlPageWidth = 8.27F ' A4 width (inches)
converter.HtmlPageHeight = 11.69F ' A4 height (inches)
converter.HtmlMarginTop = 0.78F
converter.HtmlMarginBottom = 0.78F
converter.HtmlMarginLeft = 0.78F
converter.HtmlMarginRight = 0.78F
End Using
' IronPDF: properties on RenderingOptions (millimetres)
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Dim pdf = renderer.RenderHtmlAsPdf(html)
Prozedurale Wasserzeichen zu HTML-Wasserzeichen
Ersetzen Sie primitive Zeichenaufrufe durch einen einzigen HTML/CSS-String:
// Nutrient .NET SDK: SetFillAlpha + SetTextSize + DrawTextBox in a per-page loop
pdf.SetFillAlpha(128);
pdf.SetTextSize(48);
pdf.SetOriginRotationInDegrees(45);
pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL",
PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
PdfVerticalAlignment.PdfVerticalAlignmentMiddle);
// IronPDF: one HTML/CSS string
pdf.ApplyWatermark("<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>",
45, VerticalAlignment.Middle, HorizontalAlignment.Center);
// Nutrient .NET SDK: SetFillAlpha + SetTextSize + DrawTextBox in a per-page loop
pdf.SetFillAlpha(128);
pdf.SetTextSize(48);
pdf.SetOriginRotationInDegrees(45);
pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL",
PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
PdfVerticalAlignment.PdfVerticalAlignmentMiddle);
// IronPDF: one HTML/CSS string
pdf.ApplyWatermark("<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>",
45, VerticalAlignment.Middle, HorizontalAlignment.Center);
' Nutrient .NET SDK: SetFillAlpha + SetTextSize + DrawTextBox in a per-page loop
pdf.SetFillAlpha(128)
pdf.SetTextSize(48)
pdf.SetOriginRotationInDegrees(45)
pdf.DrawTextBox(font, 100, 300, 500, 400, "CONFIDENTIAL", PdfHorizontalAlignment.PdfHorizontalAlignmentCenter, PdfVerticalAlignment.PdfVerticalAlignmentMiddle)
' IronPDF: one HTML/CSS string
pdf.ApplyWatermark("<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>", 45, VerticalAlignment.Middle, HorizontalAlignment.Center)
Behandlung von Seitenzahlen
GdPicture verfügt über kein erstklassiges Kopf-/Fußzeilenmodell – Seitennummern werden seitenweise in einer Schleife gezeichnet.IronPDF bietet eingebaute {page} / {total-pages} Platzhalter:
// Nutrient .NET SDK: per-page DrawText loop (1-based)
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
pdf.SelectPage(i);
pdf.DrawText(font, x, y, $"Page {i} of {pdf.GetPageCount()}");
}
// IronPDF: built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "Page {page} of {total-pages}"
};
// Nutrient .NET SDK: per-page DrawText loop (1-based)
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
pdf.SelectPage(i);
pdf.DrawText(font, x, y, $"Page {i} of {pdf.GetPageCount()}");
}
// IronPDF: built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "Page {page} of {total-pages}"
};
' Nutrient .NET SDK: per-page DrawText loop (1-based)
For i As Integer = 1 To pdf.GetPageCount()
pdf.SelectPage(i)
pdf.DrawText(font, x, y, $"Page {i} of {pdf.GetPageCount()}")
Next
' IronPDF: built-in placeholders
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "Page {page} of {total-pages}"
}
Seitenindizierung
GdPicture ist 1-basiert (SelectPage(1) ist die erste Seite).IronPDFpdf.Pages and pdf.RemovePages(int) are 0-based. Off-by-one ist der häufigste Portierungsfehler:
// Nutrient .NET SDK (1-based):
pdf.SelectPage(1);
pdf.DeletePage();
//IronPDF(0-based):
pdf.RemovePages(0);
// Nutrient .NET SDK (1-based):
pdf.SelectPage(1);
pdf.DeletePage();
//IronPDF(0-based):
pdf.RemovePages(0);
' Nutrient .NET SDK (1-based):
pdf.SelectPage(1)
pdf.DeletePage()
' IronPDF(0-based):
pdf.RemovePages(0)
Fehlerbehebung
Problem 1: GdPictureDocumentConverter nicht gefunden
Problem: Die Klasse GdPictureDocumentConverter existiert nicht in IronPDF.
Lösung: Verwenden Sie ChromePdfRenderer für HTML/URL → PDF:
// Nutrient .NET SDK
using var converter = new GdPictureDocumentConverter();
// IronPDF
var renderer = new ChromePdfRenderer();
// Nutrient .NET SDK
using var converter = new GdPictureDocumentConverter();
// IronPDF
var renderer = new ChromePdfRenderer();
Imports GdPicture14
Imports IronPdf
' Nutrient .NET SDK
Using converter As New GdPictureDocumentConverter()
' Your code here
End Using
' IronPDF
Dim renderer As New ChromePdfRenderer()
Problem 2: GdPicturePDF nicht gefunden
Problem: Die Klasse GdPicturePDF existiert nicht in IronPDF.
Lösung: Verwenden Sie PdfDocument:
// Nutrient .NET SDK
using var pdf = new GdPicturePDF();
pdf.LoadFromFile("input.pdf");
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
// Nutrient .NET SDK
using var pdf = new GdPicturePDF();
pdf.LoadFromFile("input.pdf");
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
Imports GdPicture14
Imports IronPdf
' Nutrient .NET SDK
Using pdf As New GdPicturePDF()
pdf.LoadFromFile("input.pdf")
End Using
' IronPDF
Dim pdfDocument = PdfDocument.FromFile("input.pdf")
Problem 3: DrawTextBox / SetFillAlpha nicht gefunden
Problem: Primitive Zeichenaufrufe existieren nicht in IronPDF.
Lösung: HTML-basierte Wasserzeichen verwenden:
// Nutrient .NET SDK
pdf.SetFillAlpha(128);
pdf.DrawTextBox(font, 100, 300, 500, 400, "DRAFT",
PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
PdfVerticalAlignment.PdfVerticalAlignmentMiddle);
// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>",
45, VerticalAlignment.Middle, HorizontalAlignment.Center);
// Nutrient .NET SDK
pdf.SetFillAlpha(128);
pdf.DrawTextBox(font, 100, 300, 500, 400, "DRAFT",
PdfHorizontalAlignment.PdfHorizontalAlignmentCenter,
PdfVerticalAlignment.PdfVerticalAlignmentMiddle);
// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>",
45, VerticalAlignment.Middle, HorizontalAlignment.Center);
' Nutrient .NET SDK
pdf.SetFillAlpha(128)
pdf.DrawTextBox(font, 100, 300, 500, 400, "DRAFT", PdfHorizontalAlignment.PdfHorizontalAlignmentCenter, PdfVerticalAlignment.PdfVerticalAlignmentMiddle)
' IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>", 45, VerticalAlignment.Middle, HorizontalAlignment.Center)
Problem 4: CombineToPDF nicht gefunden
Problem: Pfadbasierte Kombinationsmethode existiert nicht.
Lösung: Laden Sie jedes PDF als ein PdfDocument und nutzen Sie die statische PdfDocument.Merge():
// Nutrient .NET SDK
converter.CombineToPDF(paths, "merged.pdf", PdfConformance.PDF);
// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
// Nutrient .NET SDK
converter.CombineToPDF(paths, "merged.pdf", PdfConformance.PDF);
// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
' Nutrient .NET SDK
converter.CombineToPDF(paths, "merged.pdf", PdfConformance.PDF)
' IronPDF
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Problem 5: Off-by-One Seitenindex
Problem: GdPicture verwendet 1-basierte Seitenindizes;IronPDF verwendet 0-basiert. Direkte Portierungen von SelectPage(1) zu pdf.Pages[1] überspringen die erste Seite.
Lösung: Subtrahieren Sie eins, wenn Sie Seitenindizes portieren:
// Nutrient .NET SDK (first page)
pdf.SelectPage(1);
//IronPDF(first page)
var firstPage = pdf.Pages[0];
// Nutrient .NET SDK (first page)
pdf.SelectPage(1);
//IronPDF(first page)
var firstPage = pdf.Pages[0];
' Nutrient .NET SDK (first page)
pdf.SelectPage(1)
' IronPDF(first page)
Dim firstPage = pdf.Pages(0)
Migrations-Checkliste
Vor der Migration
- Inventarisieren Sie alle GdPicture / PSPDFKit / Nutrient-Verwendungen im Codebase
- Beachten Sie 1-basierte vs 0-basierte Seitenindizierung im bestehenden GdPicture-Code
- Listen Sie die Konfiguration auf, die bei
GdPictureDocumentConverterfestgelegt wurde (HTML-Seitenabmessungen, Ränder) - Identifizieren Sie prozedurale Zeichen für Wasserzeichen und Kopfzeilen (
SetFillAlpha,DrawTextBox) - Überprüfen Sie den Formularfeldcode, der indexbasierte Zugriffe verwendet (
GetFormFieldName(i)) -IronPDF-Lizenzschlüssel erhalten
Paketänderungen
- Entfernen Sie das
GdPictureNuGet-Paket (undGdPicture.WPF/GdPicture.WinForms, falls vorhanden) - Entfernen Sie das Legacy-Paket
PSPDFKit.NET, falls vorhanden - Installieren Sie das
IronPdfNuGet-Paket:dotnet add package IronPdf - Aktualisieren Sie die Namensraum-Importe (
using GdPicture14;→using IronPdf;)
Code-Änderungen
- Lizenzschlüsselkonfiguration beim Start hinzufügen
- Ersetzen Sie
new GdPictureDocumentConverter()durchnew ChromePdfRenderer()für HTML/URL → PDF - Ersetzen Sie
new GdPicturePDF()+LoadFromFiledurchPdfDocument.FromFile() - Ersetzen Sie
converter.CombineToPDF(paths, ...)durchPdfDocument.Merge() - Konvertieren Sie prozedurale Wasserzeichen-Zeichenaufrufe in
pdf.ApplyWatermark(html, ...) - Ersetzen Sie die Konvertereigenschaften durch
RenderingOptions(benannte Papierformate, mm-Ränder) - Aktualisieren Sie Kopf-/Fußzeilen zu
HtmlHeaderFootermit{page}/{total-pages}Tokens - Konvertieren Sie 1-basierte Seitenindizes überall in 0-basiert
Nach der Migration
- Entfernen Sie die System-Chrome/Edge-Abhängigkeit von Bereitstellungsbildern, falls nur für GdPicture vorhanden
- Führen Sie Regressionstests durch, um die PDF-Ausgabe zu vergleichen.
- Überprüfen Sie die Kopf- und Fußzeilen mit den Seitenzahlen.
- Test der Wasserzeichenwiedergabe
- CI/CD-Pipeline aktualisieren

