Wie man Razor Pages in PDFs in einer ASP.NET Core Web App konvertiert
Der Wechsel von ABCpdf for .NET zu IronPDF 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 dem .NET Framework 4.6.2 arbeiten oder .NET 9 anvisieren, dieser ABCpdf-Migrationsleitfaden sorgt für einen reibungslosen Übergang zur Chrome-basierten Rendering-Engine von IronPDF.
Warum eine ABCpdf-Migration in Betracht ziehen?
ABCpdf von WebSupergoo (aktuelle Linie: v13.4.4, veröffentlicht am 9. April 2026) ist seit Jahren eine leistungsfähige .NET-PDF-Bibliothek. Jedoch gibt es mehrere Faktoren, die IronPDF zu einer attraktiven Alternative für moderne Entwicklungsteams machen.
Lizenzierungskomplexität
ABCpdf verwendet ein gestuftes Lizenzmodell, das Aufwand bei der Navigation erfordert. Die Standard-Einzellizenz kostet $329 (nur 32-Bit); Professional kostet $479; Professionelle Weiterverbreitung kostet 4.790 $; die Gruppenlizenz beläuft sich auf $33.530. Lizenzen sind unbefristet, und v13-Schlüssel decken auch v8–v12 ab. Viele Entwickler berichten, dass die Stufenregelung eine erhebliche Verwaltungsbelastung darstellt, wenn es um die Budgetplanung für Projekte geht.
Windows-First Architecture (until v13)
ABCpdf war für den größten Teil seiner Geschichte Windows-exklusiv. Linux-Unterstützung wurde in v13 über die ABCpdf.ABCChrome117.Linux und ABCpdf.ABCChrome123.Linux Laufzeitpakete hinzugefügt. macOS wird nicht unterstützt, und einige Windows-spezifische Funktionen (XPS, WPF) sind auf Linux nicht verfügbar.
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 eine explizite Auswahl der Engine — EngineType.Chrome123 (Standard in v13), Chrome117, Chrome86, Chrome65, Gecko, WebKit oder MSHtml — und manuelle Ressourcenverwaltung mit doc.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 | ABCChrome (Chrome123/117/86/65), Gecko, WebKit, MSHtml | Vollständiges Chromium (CSS3, JavaScript) |
| Plattformübergreifend | Windows-zuerst; Linux hinzugefügt in v13 (kein macOS) | Native Windows, Linux, macOS, Docker |
| Lizenzierungsmodell | Standard $329 / Pro $479 / Pro-Weiterverbreitung $4,790 / Gruppe $33,530, unbefristet | Einfache, transparente Preisgestaltung |
| .NET-Unterstützung | .NET Framework 4.0+, .NET Core 3.0+, .NET 5+ | Framework 4.6.2 zu .NET 9 |
| Ressourcenmanagement | Manuelles 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" .
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 .NETund IronPDF 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 | Manuelles doc.Clear() |
IDisposable-Muster | Verwenden Sie using Anweisungen |
| Auswahl des Motors | doc.HtmlOptions.Engine = EngineType.Chrome123 (oder MSHtml) |
Eingebautes Chromium | Engine-Konfiguration entfernen |
| Indizierung der Seite | 1-basiert (doc.Page = 1) |
0-basiert (pdf.Pages[0]) |
Index-Referenzen anpassen |
| Koordinaten | Punkt-basiert 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
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"
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 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.Chrome123;
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.Chrome123;
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.Chrome123
doc.AddImageUrl("https://www.example.com")
doc.Save("output.pdf")
doc.Clear()
End Sub
End Class
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
Der Ansatz von IronPDF 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.Chrome123;
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.Chrome123;
doc.AddImageHtml(html);
doc.Save("output.pdf");
doc.Clear();
}
}
Imports System
Imports WebSupergoo.ABCpdf13
Imports WebSupergoo.ABCpdf13.Objects
Module Program
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.Chrome123
doc.AddImageHtml(html)
doc.Save("output.pdf")
doc.Clear()
End Sub
End Module
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
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
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
Die statische Merge Methode von IronPDF bietet eine schlankere API, die mehrere Dokumente akzeptiert und die Notwendigkeit, einzelne Doc Instanzen zu verfolgen und zu löschen, beseitigt.
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.Chrome123;
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.Chrome123;
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.Chrome123
doc.Rect.Inset(20, 20)
doc.AddImageHtml(html)
Dim data As Byte() = doc.GetData()
doc.Clear() ' Manual cleanup required
Return data
End Function
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
Erweiterte Migrationsszenarien
ASP.NET Core Web-Anwendung
Für Teams, die Webanwendungen mit .NET 6+ entwickeln, finden Sie hier das empfohlene Muster:
ABCpdf-Muster:
[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
Doc doc = new Doc();
doc.HtmlOptions.Engine = EngineType.Chrome123;
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.Chrome123;
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.Chrome123
doc.AddImageHtml(request.Html)
Dim pdfBytes As Byte() = doc.GetData()
doc.Clear()
Return File(pdfBytes, "application/pdf", "report.pdf")
End Function
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
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
Einrichtung der Dependency Injection
Registrieren Sie IronPDF in modernen .NET-Anwendungen, indem Sie aktuelle C#-Muster verwenden:
// 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)()
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
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")
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
}
Migrations-Checkliste
Vor der Migration
- Überprüfen Sie alle ABCpdf-Nutzungen 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 das IronPDF NuGet-Paket
- Lizenzschlüssel beim Anwendungsstart hinzufügen
- Aktualisieren Sie alle
usingAnweisungen - Konvertieren Sie
DocInstanziierungen zuChromePdfRenderer - Ersetzen Sie
doc.Clear()durchusingAnweisungen - 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

