Zum Fußzeileninhalt springen
VIDEOS

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:

  1. 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.

  2. Vertriebsgeführte Preisgestaltung: Die Seite nutrient.io/sdk/pricing leitet zu einem Kontaktformular weiter, statt die Kosten pro Entwickler zu veröffentlichen, was den Kostenvergleich für kleine Teams erschwert.

  3. 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 GdPicture NuGet-Paket, Namensraum GdPicture14, mit Klassennamen wie GdPicturePDF und GdPictureDocumentConverter ausgeliefert, die nicht mit dem "Nutrient" oder "PSPDFKit" Branding übereinstimmen.

  4. 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 SetWebBrowserPath festlegen).IronPDF liefert sein eigenes eingebettetes Chromium.

  5. Prozedurale PDF API: Wasserzeichen setzen sich aus SetFillAlpha, DrawTextBox und 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

  1. .NET -Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet -Zugriff: Möglichkeit zur Installation von NuGet -Paketen
  3. 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
SHELL

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"
$vbLabelText   $csharpLabel

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" .
SHELL

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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

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)
$vbLabelText   $csharpLabel

Ä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)
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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

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)
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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

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)
$vbLabelText   $csharpLabel

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

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)
$vbLabelText   $csharpLabel

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 GdPictureDocumentConverter festgelegt 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 GdPicture NuGet-Paket (und GdPicture.WPF / GdPicture.WinForms, falls vorhanden)
  • Entfernen Sie das Legacy-Paket PSPDFKit.NET, falls vorhanden
  • Installieren Sie das IronPdf NuGet-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() durch new ChromePdfRenderer() für HTML/URL → PDF
  • Ersetzen Sie new GdPicturePDF() + LoadFromFile durch PdfDocument.FromFile()
  • Ersetzen Sie converter.CombineToPDF(paths, ...) durch PdfDocument.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 HtmlHeaderFooter mit {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

Hinweis:Nutrient, PSPDFKit, GdPicture und ORPALIS sind Marken ihrer jeweiligen Eigentümer. Diese Seite ist nicht verbunden mit, unterstützt oder gesponsert von Nutrient, PSPDFKit, GdPicture oder ORPALIS. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an