Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Wie man von Nutrient.io zu IronPDF in C# migriert

Die Migration von Nutrient.io (ehemals PSPDFKit) zuIronPDFvereinfacht Ihren .NET-PDF-Workflow durch den Wechsel von einer komplexen Document-Intelligence-Plattform mit Async-First-Patterns zu einer fokussierten PDF-Bibliothek mit einfachen synchronen APIs. Dieser Leitfaden bietet einen umfassenden, schrittweisen Migrationspfad, der den Plattform-Overhead eliminiert und gleichzeitig alle wesentlichen PDF-Funktionen beibehält.

Warum von Nutrient.io zuIronPDFmigrieren

Das Problem der Plattformkomplexität

Nutrient.io (ehemals PSPDFKit) hat sich von einem PDF-SDK zu einer umfassenden "Document Intelligence Platform" entwickelt Dieser Wandel erweitert zwar die Möglichkeiten, stellt aber Teams, die einfach nur zuverlässige PDF-Vorgänge benötigen, vor große Herausforderungen:

  1. Überentwicklung der Plattform: Was einst ein PDF SDK war, ist heute eine vollständige Dokumentenintelligenzplattform mit KI-Funktionen und Dokumenten-Workflow-Funktionen, die für einfache PDF-Aufgaben möglicherweise unnötig sind.

  2. Enterprise-Preisgestaltung: Nutrient.io richtet sich an große Organisationen mit intransparenter Preisgestaltung, die die Kontaktaufnahme mit dem Vertrieb erfordert. Dies stellt eine Hürde für kleine bis mittelgroße Teams dar und erschwert die Budgetplanung.

  3. Verwirrung durch die Umbenennung: Der Übergang von PSPDFKit zu Nutrient hat zu Dokumentationsproblemen geführt, da beide Namen verwendet werden. Paketnamen verwenden möglicherweise noch PSPDFKit, und die Migrationspfade während des Übergangs sind weiterhin unklar.

  4. Komplexität durch Async-First: Alles in Nutrient.io erfordert async/await-Muster. Selbst einfache Operationen benötigen PdfProcessor.CreateAsync() für die Initialisierung und asynchrone Methoden für grundlegende Aufgaben, was bei synchronen Arbeitsabläufen einen zusätzlichen Aufwand bedeutet.

  5. Hohe Abhängigkeiten: Die vollständige Plattform benötigt mehr Ressourcen, was sich in einem größeren Paketumfang, längeren Initialisierungszeiten und zusätzlichem Konfigurationsaufwand äußert.

Nutrient.io vsIronPDFVergleich

Aspekt Nutrient.io (PSPDFKit) IronPDF
Schwerpunkt Document Intelligence-Plattform PDF-Bibliothek
Preisgestaltung Unternehmen (Kontakt zum Vertrieb) Transparent, veröffentlicht
Architektur Komplexe Plattform Einfache Bibliothek
API-Stil Async-first Syncmit asynchronen Optionen
Abhängigkeiten Schwer Leichtgewichtig
Konfiguration Komplexe Konfigurationsobjekte Unkomplizierte Eigenschaften
Lernkurve Steep (Plattform) Gentle (Bibliothek)
Zielbenutzer Unternehmen Alle Teamgrößen

Für Teams, die die Einführung von .NET 10 und C# 14 bis zum Jahr 2025 bzw. 2026 planen, bietetIronPDFeine einfachere Grundlage, die sich ohne den Overhead einer vollständigen Document Intelligence-Plattform sauber integrieren lässt.


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 auf ironpdf.com.

NuGet-Paketänderungen

# Remove Nutrient/PSPDFKit packages
dotnet remove package PSPDFKit.NET
dotnet remove package PSPDFKit.PDF
dotnet remove package Nutrient
dotnet remove package Nutrient.PDF

# Install IronPDF
dotnet add package IronPdf
# Remove Nutrient/PSPDFKit packages
dotnet remove package PSPDFKit.NET
dotnet remove package PSPDFKit.PDF
dotnet remove package Nutrient
dotnet remove package Nutrient.PDF

# Install IronPDF
dotnet add package IronPdf
SHELL

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

Nutrient.io-Verwendung identifizieren

# Find all Nutrient/PSPDFKit references
grep -r "PSPDFKit\|Nutrient\|PdfProcessor\|PdfConfiguration" --include="*.cs" .
# Find all Nutrient/PSPDFKit references
grep -r "PSPDFKit\|Nutrient\|PdfProcessor\|PdfConfiguration" --include="*.cs" .
SHELL

Komplette API-Referenz

Initialisierungs-Zuordnungen

Nutrient.io (PSPDFKit) IronPDF Notizen
Warten Sie PdfProcessor.CreateAsync() new ChromePdfRenderer() Keine Asynchronität erforderlich
processor.Dispose() (automatisch oder manuell)_ Einfacher Lebenszyklus
new PdfConfiguration { ... } renderer.RenderingOptions Eigenschaftsbasiert

Zuordnungen beim Laden von Dokumenten

Nutrient.io (PSPDFKit) IronPDF Notizen
Warte auf processor.OpenAsync(Pfad) PdfDocument.FromFile(path) Standardmäßig synchronisieren
Document.LoadFromStream(stream) PdfDocument.FromStream(stream) Stream-Unterstützung
Document.LoadFromBytes(bytes) new PdfDocument(bytes) Byte-Array

Zuordnungen für die PDF-Erzeugung

Nutrient.io (PSPDFKit) IronPDF Notizen
await processor.GeneratePdfFromHtmlStringAsync(html) renderer.RenderHtmlAsPdf(html) Sync-Methode
await processor.GeneratePdfFromUrlAsync(url) renderer.RenderUrlAsPdf(url) Direkte URL
await processor.GeneratePdfFromFileAsync(path) renderer.RenderHtmlFileAsPdf(path) HTML-Datei

Zuordnungen von Dokumentenoperationen

Nutrient.io (PSPDFKit) IronPDF Notizen
Warten Sie processor.MergeAsync(docs) PdfDocument.Merge(pdfs) Sync
document.PageCount pdf.PageCount Gleiches Muster
await document.SaveAsync(path) pdf.SaveAs(Pfad) Sync
document.ToBytes() pdf.BinaryData Byte-Array

Anmerkungen und Wasserzeichen-Zuordnungen

Nutrient.io (PSPDFKit) IronPDF Notizen
await document.AddAnnotationAsync(index, annotation) pdf.ApplyWatermark(html) HTML-basiert
new TextAnnotation("Text") HTML im Wasserzeichen Mehr Flexibilität
Anmerkung.Deckkraft = 0.5 CSS Deckkraft: 0.5 CSS-Styling
Anmerkung.FontSize = 48 CSS Schriftgröße: 48px CSS-Styling

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML in PDF

Vor (Nutrient.io):

// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        using var processor = await PdfProcessor.CreateAsync();
        var document = await processor.GeneratePdfFromHtmlStringAsync(htmlContent);
        await document.SaveAsync("output.pdf");
    }
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var htmlContent = "<html><body><h1>Hello World</h1></body></html>";

        using var processor = await PdfProcessor.CreateAsync();
        var document = await processor.GeneratePdfFromHtmlStringAsync(htmlContent);
        await document.SaveAsync("output.pdf");
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

Der Ansatz von Nutrient.io erfordert mehrere asynchrone Schritte: das Erstellen eines PdfProcessors mit await PdfProcessor.CreateAsync(), dann der Aufruf von await processor.GeneratePdfFromHtmlStringAsync() und schließlich await document.SaveAsync(). Die gesamte Methode muss als async Task gekennzeichnet sein, und der Prozessor benötigt eine using-Anweisung zur ordnungsgemäßen Entsorgung.

IronPDF vereinfacht dies dramatisch. Erstellen Sie einen ChromePdfRenderer, rufen Sie RenderHtmlAsPdf() auf, und speichern Sie mit SaveAs(). Kein async/await erforderlich, kein Prozessor-Lebenszyklus zu verwalten und keine benutzen Blöcke für einfache Operationen erforderlich. Dieses Muster ist für Entwickler, die keine asynchronen Muster für ihren PDF-Workflow benötigen, intuitiver. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Zusammenführen mehrerer PDFs

Vor (Nutrient.io):

// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
using System.Collections.Generic;

class Program
{
    static async Task Main()
    {
        using var processor = await PdfProcessor.CreateAsync();

        var document1 = await processor.OpenAsync("document1.pdf");
        var document2 = await processor.OpenAsync("document2.pdf");

        var mergedDocument = await processor.MergeAsync(new List<PdfDocument> { document1, document2 });
        await mergedDocument.SaveAsync("merged.pdf");
    }
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
using System.Collections.Generic;

class Program
{
    static async Task Main()
    {
        using var processor = await PdfProcessor.CreateAsync();

        var document1 = await processor.OpenAsync("document1.pdf");
        var document2 = await processor.OpenAsync("document2.pdf");

        var mergedDocument = await processor.MergeAsync(new List<PdfDocument> { document1, document2 });
        await mergedDocument.SaveAsync("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(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(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
$vbLabelText   $csharpLabel

Der Nutrient.io-Zusammenführungsvorgang erfordert die Erstellung eines Prozessors mit await PdfProcessor.CreateAsync(), das Öffnen jedes Dokuments mit separaten await processor.OpenAsync()-Aufrufen, die Erstellung einer Liste<PdfDocument>, den Aufruf von await processor.MergeAsync() mit dieser Liste und schließlich await mergedDocument.SaveAsync(). Das sind fünf asynchrone Operationen für eine einfache Zusammenführung.

IronPDF reduziert dies auf vier synchrone Zeilen: Laden jedes PDF mit PdfDocument.FromFile(), Zusammenführen mit der statischen Methode PdfDocument.Merge() und Speichern. Kein Prozessor-Lebenszyklus, keine Listenerstellung erforderlich (Sie können Dokumente direkt übergeben) und kein asynchroner Overhead. Erfahren Sie mehr über das Zusammenführen und Aufteilen von PDFs.

Beispiel 3: Hinzufügen von Wasserzeichen

Vor (Nutrient.io):

// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using PSPDFKit.Pdf.Annotation;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var processor = await PdfProcessor.CreateAsync();
        var document = await processor.OpenAsync("document.pdf");

        for (int i = 0; i < document.PageCount; i++)
        {
            var watermark = new TextAnnotation("CONFIDENTIAL")
            {
                Opacity = 0.5,
                FontSize = 48
            };
            await document.AddAnnotationAsync(i, watermark);
        }

        await document.SaveAsync("watermarked.pdf");
    }
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using PSPDFKit.Pdf.Annotation;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var processor = await PdfProcessor.CreateAsync();
        var document = await processor.OpenAsync("document.pdf");

        for (int i = 0; i < document.PageCount; i++)
        {
            var watermark = new TextAnnotation("CONFIDENTIAL")
            {
                Opacity = 0.5,
                FontSize = 48
            };
            await document.AddAnnotationAsync(i, watermark);
        }

        await document.SaveAsync("watermarked.pdf");
    }
}
$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>",
            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("document.pdf");

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

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

Dieses Beispiel verdeutlicht einen grundlegenden architektonischen Unterschied. Nutrient.io verwendet einen annotationsbasierten Ansatz: Sie erstellen ein TextAnnotation Objekt mit Eigenschaften wie Opacity und FontSize und durchlaufen dann jede Seite, indem Sie für jede await document.AddAnnotationAsync(i, watermark) aufrufen. Dazu ist es erforderlich, das Anmerkungssystem zu verstehen und die Schleife selbst zu verwalten.

IronPDF verwendet einen HTML-basierten Ansatz: Die ApplyWatermark() Methode akzeptiert eine HTML-Zeichenkette mit CSS-Styling. Das Wasserzeichen wird automatisch auf alle Seiten in einem einzigen Aufruf angewendet. Sie steuern das Erscheinungsbild über bekannte CSS-Eigenschaften (Farbe, Deckkraft, Schriftgröße) und nicht über annotationsspezifische Objekteigenschaften. Dieser Ansatz bietet mehr Flexibilität bei der Gestaltung - Sie können beliebiges HTML/CSS verwenden, einschließlich Farbverläufen, Bildern und komplexen Layouts. Weitere Beispiele finden Sie in der Dokumentation zum Wasserzeichen .


Kritische Hinweise zur Migration

Async zu SyncKonvertierung

Die wichtigste Änderung ist das Entfernen unnötiger async/await-Muster:

// Nutrient.io: Async-first
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(html);
await document.SaveAsync("output.pdf");

// IronPDF: Standardmäßig synchronisieren(async available when needed)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Nutrient.io: Async-first
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(html);
await document.SaveAsync("output.pdf");

// IronPDF: Standardmäßig synchronisieren(async available when needed)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

Wenn Sie asynchrone Operationen benötigen, bietetIronPDFasynchrone Varianten wie RenderHtmlAsPdfAsync().

Prozessor-Lebenszyklus-Eliminierung

Nutrient.io erfordert die Erstellung und Entsorgung von Prozessoren:

// Nutrient.io: Processor lifecycle management
using var processor = await PdfProcessor.CreateAsync();
// ... use processor ...
// Processor disposed at end of using block

// IronPDF: No processor lifecycle
var renderer = new ChromePdfRenderer();
// Reuse renderer, no complex lifecycle management
// Nutrient.io: Processor lifecycle management
using var processor = await PdfProcessor.CreateAsync();
// ... use processor ...
// Processor disposed at end of using block

// IronPDF: No processor lifecycle
var renderer = new ChromePdfRenderer();
// Reuse renderer, no complex lifecycle management
$vbLabelText   $csharpLabel

Änderung von Konfigurationsmustern

Nutrient.io verwendet Konfigurationsobjekte;IronPDFverwendet Eigenschaften:

// Nutrient.io: Config object
var config = new PdfConfiguration
{
    PageSize = PageSize.A4,
    Margins = new Margins(20, 20, 20, 20)
};
var doc = await processor.GeneratePdfFromHtmlStringAsync(html, config);

// IronPDF: Properties on RenderingOptions
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.io: Config object
var config = new PdfConfiguration
{
    PageSize = PageSize.A4,
    Margins = new Margins(20, 20, 20, 20)
};
var doc = await processor.GeneratePdfFromHtmlStringAsync(html, config);

// IronPDF: Properties on RenderingOptions
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);
$vbLabelText   $csharpLabel

Anmerkungen zu HTML-Wasserzeichen

Ersetzen Sie Anmerkungsobjekte durch HTML-Strings:

// Nutrient.io: Annotation object with properties
new TextAnnotation("CONFIDENTIAL") { Opacity = 0.5f, FontSize = 48 }

// IronPDF: HTML with CSS
"<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>"
// Nutrient.io: Annotation object with properties
new TextAnnotation("CONFIDENTIAL") { Opacity = 0.5f, FontSize = 48 }

// IronPDF: HTML with CSS
"<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>"
$vbLabelText   $csharpLabel

Behandlung von Seitenzahlen

Nutrient.io erfordert eine manuelle Seitenzählung;IronPDFverfügt über integrierte Platzhalter:

// Nutrient.io: Manual loop and page counting
for (int i = 0; i < doc.PageCount; i++)
{
    var footer = new TextAnnotation($"Page {i + 1} of {doc.PageCount}");
    await doc.AddAnnotationAsync(i, footer);
}

// IronPDF: Built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "Page {page} of {total-pages}"
};
// Nutrient.io: Manual loop and page counting
for (int i = 0; i < doc.PageCount; i++)
{
    var footer = new TextAnnotation($"Page {i + 1} of {doc.PageCount}");
    await doc.AddAnnotationAsync(i, footer);
}

// IronPDF: Built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "Page {page} of {total-pages}"
};
$vbLabelText   $csharpLabel

Fehlerbehebung

Ausgabe 1: PdfProcessor nicht gefunden

Problem: Die Klasse PdfProcessor existiert inIronPDFnicht.

Lösung: ChromePdfRenderer verwenden:

// Nutrient.io
using var processor = await PdfProcessor.CreateAsync();

// IronPDF
var renderer = new ChromePdfRenderer();
// Nutrient.io
using var processor = await PdfProcessor.CreateAsync();

// IronPDF
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

Ausgabe 2: GeneratePdfFromHtmlStringAsync nicht gefunden

Problem: Die Methode Async HTML existiert nicht.

Lösung: Verwenden Sie RenderHtmlAsPdf() :

// Nutrient.io
var document = await processor.GeneratePdfFromHtmlStringAsync(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
// Nutrient.io
var document = await processor.GeneratePdfFromHtmlStringAsync(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

Ausgabe 3: TextAnnotation nicht gefunden

Problem: InIronPDFexistieren keine Annotationsklassen.

Lösung: HTML-basierte Wasserzeichen verwenden:

// Nutrient.io
var watermark = new TextAnnotation("DRAFT") { Opacity = 0.5 };
await document.AddAnnotationAsync(0, watermark);

// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>");
// Nutrient.io
var watermark = new TextAnnotation("DRAFT") { Opacity = 0.5 };
await document.AddAnnotationAsync(0, watermark);

// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>");
$vbLabelText   $csharpLabel

Ausgabe 4: MergeAsync nicht gefunden

Problem: Die Methode "Async merge" existiert nicht.

Lösung: Verwenden Sie static PdfDocument.Merge() :

// Nutrient.io
var mergedDocument = await processor.MergeAsync(documentList);

// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
// Nutrient.io
var mergedDocument = await processor.MergeAsync(documentList);

// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • Erfassung aller PSPDFKit/Nährstoffverwendungen im Quellcode
  • Dokumentieren Sie asynchrone Muster, die möglicherweise angepasst werden müssen.
  • Listet alle Konfigurationsobjekte und ihre Eigenschaften auf
  • Identifizierung von annotationsbasierten Merkmalen (Wasserzeichen, Header)
  • Überprüfung der Anforderungen an die Formularbearbeitung
  • IronPDF-Lizenzschlüssel erhalten

Paketänderungen

  • Entfernen Sie das NuGet-Paket PSPDFKit.NET
  • Entfernen Sie Nutrient NuGet-Paket
  • Installieren Sie IronPdf NuGet-Paket: dotnet add package IronPdf
  • Namespace-Importe aktualisieren

Code-Änderungen

  • Lizenzschlüsselkonfiguration beim Start hinzufügen
  • Ersetzen Sie PdfProcessor.CreateAsync() durch new ChromePdfRenderer()
  • Ersetzen Sie processor.GeneratePdfFromHtmlStringAsync() durch renderer.RenderHtmlAsPdf()
  • Ersetzen processor.MergeAsync() durch PdfDocument.Merge()
  • Konvertierung TextAnnotation Wasserzeichen in HTML-Wasserzeichen
  • Ersetzen Sie Konfigurationsobjekte durch RenderingOptions -Eigenschaften
  • Aktualisieren Sie Kopf- und Fußzeile, um HtmlHeaderFooter mit Platzhaltern zu verwenden
  • Unnötige async/await-Muster entfernen

Nach der Migration

  • Entfernen Sie async/await, wo es nicht mehr benötigt wird.
  • 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

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