Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Wie man von ABCpdf for .NET zu IronPDF migriert

Der Wechsel von ABCpdf for .NET zuIronPDF ist ein strategisches Upgrade für Entwicklungsteams, die eine vereinfachte Lizenzierung, eine moderne Dokumentation und native plattformübergreifende Unterstützung anstreben. Dieser ausführliche Leitfaden bietet einen schrittweisen Migrationspfad mit API-Zuordnungen und Code-Konvertierungsbeispielen aus realen Szenarien.

Egal, ob Sie mit .NET Framework 4.6.2 arbeiten oder .NET 9 und höher bis 2026 anvisieren, dieser ABCpdf-Migrationsleitfaden gewährleistet einen einfachen Übergang zur Chrome-basierten Rendering-Engine von IronPDF.

Warum eine ABCpdf-Migration in Betracht ziehen?

ABCpdf von WebSupergoo ist seit Jahren eine leistungsfähige .NET PDF-Bibliothek. Mehrere Faktoren machenIronPDF jedoch zu einer attraktiven Alternative für moderne Entwicklungsteams, die Projekte bis in die Jahre 2025 und 2026 planen.

Lizenzierungskomplexität

ABCpdf verwendet ein gestaffeltes Lizenzmodell, dessen Handhabung mitunter verwirrend sein kann. Die Preise beginnen bei 349 US-Dollar, steigen jedoch je nach Funktionen, Serverbereitstellung und Anwendungsfall. Viele Entwickler berichten, dass dieses Lizenzierungslabyrinth eine erhebliche administrative Belastung bei der Budgetierung von Projekten darstellt.

Windows-First-Architektur

ABCpdf hat zwar plattformübergreifende Unterstützung hinzugefügt, aber sein historisches, auf Windows ausgerichtetes Design taucht gelegentlich in Arbeitsabläufen auf. Entwickler, die mit Linux-Containern, Docker-Umgebungen oder macOS-Entwicklungsumgebungen arbeiten, könnten auf Reibungen stoßen, mit denen sie bei der Projektplanung nicht gerechnet haben.

Dokumentationsstil

Die Dokumentation von ABCpdf ist zwar gründlich, folgt aber einem älteren Stil, der im Vergleich zu modernen API-Dokumentationsstandards veraltet wirken kann. Neue Benutzer haben oft Schwierigkeiten, genau die Beispiele zu finden, die sie benötigen, insbesondere wenn sie mit neueren .NET-Versionen arbeiten.

Motor-Konfigurationsaufwand

ABCpdf erfordert die explizite Auswahl der Engine (Gecko, Trident oder Chrome) und die manuelle Ressourcenverwaltung mit Clear() Aufrufen. Dies fügt jedem PDF-Vorgang Kesselstein-Code hinzu, den moderne Entwickler lieber vermeiden würden.

IronPDF vs. ABCpdf: Funktionsvergleich

In der folgenden Vergleichstabelle sind die wichtigsten Unterschiede zwischen den beiden .NET-PDF-Bibliotheken aufgeführt:

Feature ABCpdf for .NET IronPDF
Rendering Engine Gecko/Trident/Chrome (konfigurierbar) Vollständiges Chromium (CSS3, JavaScript)
Plattformübergreifend Später hinzugefügt, zunächst für Windows Native Windows, Linux, macOS, Docker
Lizenzierungsmodell Komplexe Preisstaffelung ab $349+ Einfache, transparente Preisgestaltung
.NET-Unterstützung schwerpunkt .NET Framework Framework 4.6.2 zu .NET 9+
Ressourcenmanagement Manuelles Handbuch doc.Clear() erforderlich IDisposable mit using Anweisungen
Lizenz-Einrichtung Verwendet häufig Registry Einfacher codebasierter Lizenzschlüssel
Dokumentation Veralteter Stil Moderne Dokumentationen mit umfangreichen Beispielen

Bevor Sie mit Ihrer Migration beginnen

Voraussetzungen

Stellen Sie sicher, dass Ihre Entwicklungsumgebung diese Anforderungen erfüllt:

  • .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5-9
  • Visual Studio 2019+ oder JetBrains Rider
  • NuGet Package Manager Zugang
  • IronPDF Lizenzschlüssel (kostenlose Testversion verfügbar)

Alle ABCpdf-Referenzen finden

Führen Sie diese Befehle in Ihrem Lösungsverzeichnis aus, um alle Dateien zu finden, die ABCpdf for .NET verwenden:

grep -r "using WebSupergoo" --include="*.cs" .
grep -r "ABCpdf" --include="*.csproj" .
grep -r "using WebSupergoo" --include="*.cs" .
grep -r "ABCpdf" --include="*.csproj" .
SHELL

Bei dieser Prüfung wird jede Datei identifiziert, die geändert werden muss, um eine vollständige Migration zu gewährleisten.

Bahnbrechende Änderungen, die zu erwarten sind

Das Verständnis der architektonischen Unterschiede zwischen ABCpdf for .NETundIronPDF verhindert Überraschungen bei der Migration:

Kategorie ABCpdf-Verhalten IronPDF-Verhalten Migration Aktion
Objektmodell Doc Klasse ist zentral ChromePdfRenderer + PdfDocument Rendering vom Dokument trennen
Bereinigung von Ressourcen Handbuch doc.Clear() IDisposable-Muster Verwenden Sie using Anweisungen
Auswahl des Motors doc.HtmlOptions.Engine = EngineType.Chrome Eingebauter Chrome Engine-Konfiguration entfernen
Indizierung der Seite 1-basiert (doc.Page = 1) 0-basiert (pdf.Pages[0]) Index-Referenzen anpassen
Koordinaten Punktbasiert mit doc.Rect CSS-basierte Ränder CSS oder RenderingOptions verwenden

Schnellstart: 5-Minuten-Migration

Schritt 1: NuGet-Pakete aktualisieren

# Remove ABCpdf
dotnet remove package ABCpdf

# Install IronPDF
dotnet add package IronPdf
# Remove ABCpdf
dotnet remove package ABCpdf

# Install IronPDF
dotnet add package IronPdf
SHELL

Schritt 2: Festlegen des Lizenzschlüssels

Fügen Sie dies beim Starten der Anwendung vor allen IronPDF-Vorgängen hinzu:

// 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

Schritt 3: Globales Suchen und Ersetzen

Aktualisieren Sie alle Namespace-Referenzen in Ihrer Codebasis:

Finden Sie Ersetzen durch
using WebSupergoo.ABCpdf13; using IronPdf;
using WebSupergoo.ABCpdf13.Objects; using IronPdf;
using WebSupergoo.ABCpdf12; using IronPdf;
using WebSupergoo.ABCpdf11; using IronPdf;

Komplette API-Referenz

Methoden der Dokumentenerstellung

In der folgenden Tabelle werden die ABCpdf for .NET-Methoden auf ihre IronPDF-Entsprechungen abgebildet:

ABCpdf-Methode IronPDF-Methode
new Doc() new ChromePdfRenderer()
doc.AddImageUrl(url) renderer.RenderUrlAsPdf(url)
doc.AddImageHtml(html) renderer.RenderHtmlAsPdf(html)
doc.AddImageFile(path) renderer.RenderHtmlFileAsPdf(path)
doc.Read(path) PdfDocument.FromFile(path)
doc.Save(path) pdf.SaveAs(path)
doc.GetData() pdf.BinaryData
doc.Clear() Verwenden Sie die using Anweisung

Seitenbearbeitungsmethoden

ABCpdf-Methode IronPDF-Methode
doc.PageCount pdf.PageCount
doc.Page = n pdf.Pages[n-1]
doc.Delete(pageId) pdf.RemovePages(index)
doc.Append(otherDoc) PdfDocument.Merge(pdf1, pdf2)
doc.Rect.Inset(x, y) RenderingOptions.MarginTop/Bottom/Left/Right

Sicherheit und Verschlüsselungsmethoden

ABCpdf-Methode IronPDF-Methode
doc.Encryption.Password pdf.SecuritySettings.OwnerPassword
doc.Encryption.CanPrint pdf.SecuritySettings.AllowUserPrinting
doc.Encryption.CanCopy pdf.SecuritySettings.AllowUserCopyPasteContent
doc.SetInfo("Title", value) pdf.MetaData.Title

Beispiele für die Code-Migration

Beispiel 1: HTML zu PDF von URL

Dieses Beispiel zeigt die Konvertierung einer Webseite in PDF, eine der häufigsten Aufgaben bei der PDF-Erstellung.

ABCpdf for .NET Implementierung:

// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome;
        doc.AddImageUrl("https://www.example.com");
        doc.Save("output.pdf");
        doc.Clear();
    }
}
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome;
        doc.AddImageUrl("https://www.example.com");
        doc.Save("output.pdf");
        doc.Clear();
    }
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects

Class Program
    Shared Sub Main()
        Dim doc As New Doc()
        doc.HtmlOptions.Engine = EngineType.Chrome
        doc.AddImageUrl("https://www.example.com")
        doc.Save("output.pdf")
        doc.Clear()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}
Imports System
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Der Ansatz vonIronPDF macht eine explizite Konfiguration der Engine und manuelle Bereinigungen überflüssig, wodurch die Komplexität des Codes reduziert wird und gleichzeitig die volle Renderingfähigkeit von Chrome erhalten bleibt.

Beispiel 2: HTML-String in PDF

Die Konvertierung von HTML-Strings in PDF ist für die Erstellung dynamischer Berichte und Dokumente unerlässlich.

ABCpdf for .NET Implementierung:

// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome;
        doc.AddImageHtml(html);
        doc.Save("output.pdf");
        doc.Clear();
    }
}
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        Doc doc = new Doc();
        doc.HtmlOptions.Engine = EngineType.Chrome;
        doc.AddImageHtml(html);
        doc.Save("output.pdf");
        doc.Clear();
    }
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects

Class Program
    Shared Sub Main()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
        Dim doc As New Doc()
        doc.HtmlOptions.Engine = EngineType.Chrome
        doc.AddImageHtml(html)
        doc.Save("output.pdf")
        doc.Clear()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

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

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

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports System
Imports IronPdf

Module Program
    Sub Main()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

Die IronPDF-Version kommt mit weniger Codezeilen aus und verwendet standardmäßig das Chrome-Rendering, um eine konsistente Ausgabe auf allen Plattformen zu gewährleisten.

Beispiel 3: Mehrere PDFs zusammenführen

Das Kombinieren mehrerer PDF-Dokumente ist eine häufige Anforderung in Dokumentenverarbeitungs-Workflows.

ABCpdf for .NET Implementierung:

// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc1 = new Doc();
        doc1.Read("document1.pdf");

        Doc doc2 = new Doc();
        doc2.Read("document2.pdf");

        doc1.Append(doc2);
        doc1.Save("merged.pdf");

        doc1.Clear();
        doc2.Clear();
    }
}
// NuGet: Install-Package ABCpdf
using System;
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

class Program
{
    static void Main()
    {
        Doc doc1 = new Doc();
        doc1.Read("document1.pdf");

        Doc doc2 = new Doc();
        doc2.Read("document2.pdf");

        doc1.Append(doc2);
        doc1.Save("merged.pdf");

        doc1.Clear();
        doc2.Clear();
    }
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects

Class Program
    Shared Sub Main()
        Dim doc1 As New Doc()
        doc1.Read("document1.pdf")

        Dim doc2 As New Doc()
        doc2.Read("document2.pdf")

        doc1.Append(doc2)
        doc1.Save("merged.pdf")

        doc1.Clear()
        doc2.Clear()
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF-Implementierung:

// NuGet: Install-Package IronPdf
using System;
using System.Collections.Generic;
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 System;
using System.Collections.Generic;
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 System
Imports System.Collections.Generic
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

Die statische Merge Methode vonIronPDF bietet eine übersichtlichere API, die mehrere Dokumente akzeptiert, wodurch die Notwendigkeit entfällt, einzelne Doc Instanzen zu verfolgen und zu löschen.

Beispiel 4: Vollständiges Migrationsmuster mit Rändern

Dieses Beispiel zeigt eine vollständige Vorher/Nachher-Migration für die Erstellung von PDFs mit benutzerdefinierten Rändern.

Vor (ABCpdf for .NET):

using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

public byte[] GeneratePdf(string html)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome;
    doc.Rect.Inset(20, 20);
    doc.AddImageHtml(html);
    byte[] data = doc.GetData();
    doc.Clear();  // Manual cleanup required
    return data;
}
using WebSupergoo.ABCpdf13;
using WebSupergoo.ABCpdf13.Objects;

public byte[] GeneratePdf(string html)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome;
    doc.Rect.Inset(20, 20);
    doc.AddImageHtml(html);
    byte[] data = doc.GetData();
    doc.Clear();  // Manual cleanup required
    return data;
}
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects

Public Function GeneratePdf(html As String) As Byte()
    Dim doc As New Doc()
    doc.HtmlOptions.Engine = EngineType.Chrome
    doc.Rect.Inset(20, 20)
    doc.AddImageHtml(html)
    Dim data As Byte() = doc.GetData()
    doc.Clear()  ' Manual cleanup required
    Return data
End Function
$vbLabelText   $csharpLabel

Nach (IronPDF):

using IronPdf;

public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop = 20;
    renderer.RenderingOptions.MarginBottom = 20;
    renderer.RenderingOptions.MarginLeft = 20;
    renderer.RenderingOptions.MarginRight = 20;

    using var pdf = renderer.RenderHtmlAsPdf(html);
    return pdf.BinaryData;  // Automatic cleanup with 'using'
}
using IronPdf;

public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.MarginTop = 20;
    renderer.RenderingOptions.MarginBottom = 20;
    renderer.RenderingOptions.MarginLeft = 20;
    renderer.RenderingOptions.MarginRight = 20;

    using var pdf = renderer.RenderHtmlAsPdf(html);
    return pdf.BinaryData;  // Automatic cleanup with 'using'
}
Imports IronPdf

Public Function GeneratePdf(html As String) As Byte()
    Dim renderer As New ChromePdfRenderer()
    renderer.RenderingOptions.MarginTop = 20
    renderer.RenderingOptions.MarginBottom = 20
    renderer.RenderingOptions.MarginLeft = 20
    renderer.RenderingOptions.MarginRight = 20

    Using pdf = renderer.RenderHtmlAsPdf(html)
        Return pdf.BinaryData  ' Automatic cleanup with 'Using'
    End Using
End Function
$vbLabelText   $csharpLabel

Erweiterte Migrationsszenarien

ASP.NET Core Web-Anwendung

Für Teams, die Webanwendungen mit .NET 6+ entwickeln oder für die Veröffentlichung von .NET 10 in den Jahren 2025-2026 planen, wird das folgende Muster empfohlen:

ABCpdf-Muster:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome;
    doc.AddImageHtml(request.Html);
    byte[] pdfBytes = doc.GetData();
    doc.Clear();

    return File(pdfBytes, "application/pdf", "report.pdf");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    Doc doc = new Doc();
    doc.HtmlOptions.Engine = EngineType.Chrome;
    doc.AddImageHtml(request.Html);
    byte[] pdfBytes = doc.GetData();
    doc.Clear();

    return File(pdfBytes, "application/pdf", "report.pdf");
}
<HttpPost>
Public Function GeneratePdf(<FromBody> request As ReportRequest) As IActionResult
    Dim doc As New Doc()
    doc.HtmlOptions.Engine = EngineType.Chrome
    doc.AddImageHtml(request.Html)
    Dim pdfBytes As Byte() = doc.GetData()
    doc.Clear()

    Return File(pdfBytes, "application/pdf", "report.pdf")
End Function
$vbLabelText   $csharpLabel

IronPDF-Muster:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
<HttpPost>
Public Function GeneratePdf(<FromBody> request As ReportRequest) As IActionResult
    Dim renderer As New ChromePdfRenderer()
    Using pdf = renderer.RenderHtmlAsPdf(request.Html)
        Return File(pdf.BinaryData, "application/pdf", "report.pdf")
    End Using
End Function
$vbLabelText   $csharpLabel

Asynchrone PDF-Erzeugung

ABCpdf hat keine native async-Unterstützung.IronPDF bietet async-Methoden für eine bessere Leistung von Webanwendungen:

using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}
Imports IronPdf

Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte())
    Dim renderer As New ChromePdfRenderer()
    Using pdf = Await renderer.RenderHtmlAsPdfAsync(html)
        Return pdf.BinaryData
    End Using
End Function
$vbLabelText   $csharpLabel

Einrichtung der Dependency Injection

Registrieren SieIronPDF in modernen .NET-Anwendungen unter Verwendung von C# 12+-Mustern, die mit zukünftigen C# 14-Versionen kompatibel sind:

// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Or create a service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }
}

// Register: builder.Services.AddSingleton<IPdfService, IronPdfService>();
// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Or create a service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }
}

// Register: builder.Services.AddSingleton<IPdfService, IronPdfService>();
Imports Microsoft.Extensions.DependencyInjection
Imports System.Threading.Tasks

' Program.vb (.NET 6+)
builder.Services.AddSingleton(Of ChromePdfRenderer)()

' Or create a service wrapper
Public Interface IPdfService
    Function GeneratePdfAsync(html As String) As Task(Of Byte())
End Interface

Public Class IronPdfService
    Implements IPdfService

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer()
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
    End Sub

    Public Async Function GeneratePdfAsync(html As String) As Task(Of Byte()) Implements IPdfService.GeneratePdfAsync
        Using pdf = Await _renderer.RenderHtmlAsPdfAsync(html)
            Return pdf.BinaryData
        End Using
    End Function
End Class

' Register: builder.Services.AddSingleton(Of IPdfService, IronPdfService)()
$vbLabelText   $csharpLabel

Tipps zur Leistungsoptimierung

Wiederverwendung des Renderers für Batch-Operationen

// Good: Single renderer instance
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}

// Bad: New renderer each time (slower startup)
foreach (var html in htmlList)
{
    var renderer = new ChromePdfRenderer(); // Overhead!
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
// Good: Single renderer instance
var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}

// Bad: New renderer each time (slower startup)
foreach (var html in htmlList)
{
    var renderer = new ChromePdfRenderer(); // Overhead!
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}
Imports System

' Good: Single renderer instance
Dim renderer As New ChromePdfRenderer()
For Each html In htmlList
    Using pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs($"output_{i}.pdf")
    End Using
Next

' Bad: New renderer each time (slower startup)
For Each html In htmlList
    Dim renderer As New ChromePdfRenderer() ' Overhead!
    Using pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs($"output_{i}.pdf")
    End Using
Next
$vbLabelText   $csharpLabel

Vergleich der Speichernutzung

Szenario ABCpdf for .NET IronPDF
Einzelne 10-seitige PDF-Datei ~80 MB ~50 MB
Stapel von 100 PDFs Hoch (manuelle Bereinigung) ~100 MB
Großes HTML (5MB+) Variable ~150 MB

Fehlerbehebung bei allgemeinen Migrationsproblemen

PDF wird leer wiedergegeben

Symptom: Die PDF-Ausgabe hat nach der Migration leere Seiten.

Lösung: JavaScript-Inhalte werden vor dem Rendern möglicherweise nicht vollständig geladen:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Wait 2 seconds
// Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Wait 2 seconds
// Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.WaitFor.RenderDelay(2000) ' Wait 2 seconds
' Or wait for specific element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded")
$vbLabelText   $csharpLabel

Kopf-/Fußzeilen werden nicht angezeigt

Symptom: TextHeader/TextFooter in der Ausgabe nicht sichtbar.

Lösung: Stellen Sie sicher, dass die Ränder Platz für Kopf- und Fußzeilen lassen:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 40; // mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40; // mm - leave room for footer

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Header Text",
    FontSize = 12
};
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.MarginTop = 40; // mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40; // mm - leave room for footer

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Header Text",
    FontSize = 12
};
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.MarginTop = 40 ' mm - leave room for header
renderer.RenderingOptions.MarginBottom = 40 ' mm - leave room for footer

renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .CenterText = "Header Text",
    .FontSize = 12
}
$vbLabelText   $csharpLabel

Migrations-Checkliste

Vor der Migration

  • Überprüfen Sie die gesamte Nutzung von ABCpdf mit grep -r "WebSupergoo" --include="*.cs" .
  • Dokumentieren Sie die aktuellen Anforderungen an die PDF-Ausgabe
  • Erstellen Sie Testfälle mit Beispiel-PDF-Ausgaben zum Vergleich
  • IronPDF -Lizenzschlüssel erhalten
  • Backup der Codebasis

Während der Migration

  • Entfernen Sie das NuGet Paket ABCpdf
  • Installieren Sie dasIronPDF NuGet -Paket
  • Lizenzschlüssel beim Anwendungsstart hinzufügen
  • Aktualisiere alle using-Anweisungen
  • Konvertiere die Instanziierung Doc in ChromePdfRenderer
  • Ersetzen Sie die Anweisungen doc.Clear() durch using
  • Aktualisierung der Methodenaufrufe pro API-Zuordnung
  • Koordinatenbasierte Layouts in CSS-Ränder umwandeln

Nach der Migration

  • Alle vorhandenen PDF-Tests ausführen
  • Visueller Vergleich der PDF-Ausgaben (ABCpdf vs IronPDF)
  • Alle PDF-Workflows in der Staging-Umgebung testen
  • Leistungsvergleich
  • ABCpdf-Lizenzkonfiguration entfernen
  • CI/CD-Pipeline-Abhängigkeiten 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

Iron Support Team

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