Wie man von QuestPDF zu IronPDF in C# migriert
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against QuestPDF on pricing, HTML support, and licensing.
Die Migration von QuestPDF zu IronPDF verwandelt Ihren PDF-Generierungs-Workflow von einer proprietären C#-API in einen standardmäßigen HTML/CSS-basierten Ansatz mit umfassenden PDF-Manipulationsmöglichkeiten. Dieses Handbuch bietet einen vollständigen, schrittweisen Migrationspfad, der es Ihnen ermöglicht, vorhandene Webkenntnisse zu nutzen, HTML-Vorlagen wiederzuverwenden und Funktionen zu erhalten, die QuestPDF einfach nicht bieten kann.
Warum von QuestPDF zu IronPDF migrieren
QuestPDF kennenlernen
QuestPDF ist eine moderne, fließende API, die speziell für die programmatische Erzeugung von PDFs in C# entwickelt wurde. Im Gegensatz zu einigen seiner Konkurrenten, die umfassende HTML-zu-PDF-Konvertierungsfunktionen anbieten, beschränkt sich QuestPDF auf programmatische Layout-API-Funktionen. QuestPDF eignet sich hervorragend für Szenarien, in denen Entwickler Dokumente von Grund auf mit C#-Code generieren müssen, ohne sich dabei auf HTML zu verlassen.
Die Bibliothek ist für Unternehmen mit einem Umsatz von weniger als 1 Mio. USD kostenlos, allerdings muss diese Umsatzhöhe nachgewiesen werden, was für einige Unternehmen eine Belastung bei der Einhaltung von Vorschriften darstellen könnte. Benutzer, die diese Schwelle überschreiten, müssen eine Lizenz erwerben, was bei der Bewertung von QuestPDF als potenzielle Lösung in die langfristige Planung einbezogen werden muss.
Das Kernproblem: Keine HTML-Unterstützung
QuestPDF wird oft für die HTML-zu-PDF-Konvertierung empfohlen, unterstützt aber HTML überhaupt nicht. Obwohl QuestPDF in Entwicklerforen stark beworben wird, verwendet es eine eigene, proprietäre Layout-Sprache, die das Erlernen einer völlig neuen DSL erfordert, anstatt die vorhandenen Webkenntnisse zu nutzen.
| Feature | QuestPDF | IronPDF |
|---|---|---|
| HTML-zu-PDF | NICHT UNTERSTÜTZT | Unterstützt |
| CSS-Styling | NICHT UNTERSTÜTZT | Vollständig CSS3 |
| Vorhandene Vorlagen | Muss von Grund auf neu erstellt werden | Wiederverwendung von HTML/CSS-Assets |
| Kompatibilität der Entwicklungswerkzeuge | Keine | Jedes Web-Design-Tool |
| Lernkurve | Neue proprietäre DSL | Vermittlung von Webkenntnissen |
| Layout-Vorschau | Erfordert IDE-Plugin | Vorschau in jedem Browser |
| PDF-Bearbeitung | Keine | Zusammenführen, Aufteilen, Bearbeiten |
IronPDF bietet ein natives HTML-zu-PDF-Rendering, das QuestPDF völlig fehlt, wodurch die Notwendigkeit entfällt, Dokumente manuell in C#-Code zu rekonstruieren. Sie enthält umfassende PDF-Manipulationsfunktionen (Zusammenführen, Teilen, Bearbeiten, Sichern), die QuestPDF nicht bieten kann.
Das QuestPDF-Lizenzierungsmodell
Die "Community-Lizenz" von QuestPDF ist nur dann kostenlos, wenn Ihr Unternehmen einen jährlichen Bruttoumsatz von weniger als 1 Million US-Dollar erzielt. Ihre Kunden (nicht nur Sie als Entwickler) müssen möglicherweise Lizenzen erwerben, wenn sie Umsatzschwellen überschreiten. Im Gegensatz zu einer einfachen kommerziellen Lizenz pro Entwickler erfordert das Modell von QuestPDF eine Offenlegung der Einnahmen und eine Nachverfolgung der Einhaltung der Vorschriften.
IronPDF bietet eine einfache Lizenzierung: eine Lizenz pro Entwickler, keine Umsatzprüfungen, keine Anforderungen an die Kundenlizenzierung und klare, vorhersehbare Kosten.
Für Teams, die die Einführung von .NET 10 und C# 14 bis 2025 und 2026 planen, bietet IronPDF eine transparente Lizenzierung ohne umsatzabhängige Audits und einen Standard-HTML/CSS-Ansatz, der die vorhandenen Webentwicklungskenntnisse nutzt.
Bevor Sie beginnen
Voraussetzungen
- .NET -Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet -Zugriff: Möglichkeit zur Installation von NuGet -Paketen
- IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.
NuGet-Paketänderungen
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
Lizenz-Konfiguration
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Finden Sie QuestPDF Verwendung
# Find all QuestPDF usages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
# Find all QuestPDF usages in your codebase
grep -r "QuestPDF\|Document.Create\|\.GeneratePdf" --include="*.cs" .
Komplette API-Referenz
Namensraumänderungen
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
// Before: QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// After: IronPDF
using IronPdf;
Imports IronPdf
Kern-API-Zuordnungen
| QuestPDF-Konzept | IronPDF-Äquivalent |
|---|---|
Document.Create() |
new ChromePdfRenderer() |
.Page() |
RenderHtmlAsPdf() |
.Text() |
HTML <p>, <h1>, <span> |
.Bold() |
CSS font-weight: bold |
.FontSize(24) |
CSS font-size: 24px |
.Image() |
HTML <img src="..."> |
.Table() |
HTML <table> |
.Column() |
CSS display: flex; flex-direction: column |
.Row() |
CSS display: flex; flex-direction: row |
PageSizes.A4 |
RenderingOptions.PaperSize |
.Margin() |
RenderingOptions.Margin* |
.GeneratePdf() |
pdf.SaveAs() |
| Nicht anwendbar | PdfDocument.Merge() |
| Nicht anwendbar | PdfDocument.FromFile() |
| Nicht anwendbar | pdf.SecuritySettings |
Beispiele für die Code-Migration
Beispiel 1: Einfache Dokumentenerstellung (HTML-zu-PDF)
Vor (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("Hello World").FontSize(20).Bold();
column.Item().Text("This is a paragraph of text.");
});
});
}).GeneratePdf("output.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("Hello World").FontSize(20).Bold()
column.Item().Text("This is a paragraph of text.")
End Sub)
End Sub)
End Sub).GeneratePdf("output.pdf")
End Sub
End Module
Nach (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a paragraph of text.</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Dieses Beispiel verdeutlicht den grundlegenden Paradigmenunterschied. QuestPDF erfordert das Erlernen seiner flüssigen API: Document.Create(), container.Page(), page.Content().Column(), column.Item().Text(), mit Styling über Methodenverkettung wie .FontSize(20).Bold(). Sie müssen außerdem den Lizenztyp mit QuestPDF.Settings.License = LicenseType.Community festlegen.
IronPDF verwendet Standard-HTML, das jedem Webentwickler bekannt ist: <h1> für Überschriften, <p> für Absätze. Es muss keine proprietäre Sprache erlernt werden. Der Ansatz von IronPDF bietet eine sauberere Syntax und eine bessere Integration in moderne .NET-Anwendungen. Umfassende Beispiele finden Sie in der HTML to PDF Dokumentation.
Beispiel 2: Erstellung von Rechnungen
Vor (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(column =>
{
column.Item().Text("INVOICE").FontSize(24).Bold();
column.Item().Text("Invoice #: 12345").FontSize(12);
column.Item().PaddingTop(20);
column.Item().Text("Customer: John Doe");
column.Item().Text("Total: $100.00").Bold();
});
});
}).GeneratePdf("invoice.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(column)
column.Item().Text("INVOICE").FontSize(24).Bold()
column.Item().Text("Invoice #: 12345").FontSize(12)
column.Item().PaddingTop(20)
column.Item().Text("Customer: John Doe")
column.Item().Text("Total: $100.00").Bold()
End Sub)
End Sub)
End Sub).GeneratePdf("invoice.pdf")
End Sub
End Module
Nach (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = @"
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("invoice.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "
<h1>INVOICE</h1>
<p>Invoice #: 12345</p>
<br/>
<p>Customer: John Doe</p>
<p><strong>Total: $100.00</strong></p>
"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("invoice.pdf")
End Sub
End Class
QuestPDF verwendet .Column() und .Item() für das Layout, mit .PaddingTop(20) für die Abstände.IronPDF verwendet Standard-HTML: <h1> für den Titel, <p> für Absätze, <br/> für Abstände und <strong> für Fettdruck.
Der eigentliche Vorteil: Mit IronPDF können Designer HTML-Vorlagen selbständig erstellen und ändern. Bei QuestPDF muss ein C#-Entwickler bei jeder Designänderung den Code ändern. Erfahren Sie mehr in unseren Tutorials.
Beispiel 3: Kopf- und Fußzeilen mit Seitenzahlen
Vor (QuestPDF):
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
// NuGet: Install-Package QuestPDF
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
class Program
{
static void Main()
{
QuestPDF.Settings.License = LicenseType.Community;
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Header().Text("Document Header").FontSize(14).Bold();
page.Content().Text("Main content of the document.");
page.Footer().AlignCenter().Text(text =>
{
text.Span("Page ");
text.CurrentPageNumber();
});
});
}).GeneratePdf("document.pdf");
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Module Program
Sub Main()
QuestPDF.Settings.License = LicenseType.Community
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Header().Text("Document Header").FontSize(14).Bold()
page.Content().Text("Main content of the document.")
page.Footer().AlignCenter().Text(Sub(text)
text.Span("Page ")
text.CurrentPageNumber()
End Sub)
End Sub)
End Sub).GeneratePdf("document.pdf")
End Sub
End Module
Nach (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<p>Main content of the document.</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.Header = new TextHeaderFooter()
{
CenterText = "Document Header",
FontSize = 14
};
pdf.Footer = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "<p>Main content of the document.</p>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.Header = New TextHeaderFooter() With {
.CenterText = "Document Header",
.FontSize = 14
}
pdf.Footer = New TextHeaderFooter() With {
.CenterText = "Page {page}"
}
pdf.SaveAs("document.pdf")
End Sub
End Class
QuestPDF verwendet page.Header() und page.Footer() mit Fluent-Methoden wie .AlignCenter() und .CurrentPageNumber().IronPDF verwendet TextHeaderFooter Objekte mit Eigenschaften wie CenterText und FontSize. Der Platzhalter {page} fügt automatisch die aktuelle Seitenzahl ein.
Kritische Hinweise zur Migration
Der Paradigmenwechsel
Die grundlegende Änderung ist der Wechsel von einer proprietären C#-DSL zu Standard-HTML/CSS:
// QuestPDF: Proprietary fluent API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// QuestPDF: Proprietary fluent API
container.Page(page =>
{
page.Content().Column(column =>
{
column.Item().Text("Invoice").Bold().FontSize(24);
column.Item().Row(row =>
{
row.RelativeItem().Text("Customer:");
row.RelativeItem().Text("Acme Corp");
});
});
});
// IronPDF: Standard HTML/CSS
var html = @"
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
' QuestPDF: Proprietary fluent API
container.Page(Sub(page)
page.Content().Column(Sub(column)
column.Item().Text("Invoice").Bold().FontSize(24)
column.Item().Row(Sub(row)
row.RelativeItem().Text("Customer:")
row.RelativeItem().Text("Acme Corp")
End Sub)
End Sub)
End Sub)
' IronPDF: Standard HTML/CSS
Dim html As String = "
<div style='font-family: Arial; padding: 40px;'>
<h1 style='font-weight: bold; font-size: 24px;'>Invoice</h1>
<div style='display: flex; justify-content: space-between;'>
<span>Customer:</span>
<span>Acme Corp</span>
</div>
</div>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
Layout-Muster-Konvertierungen
| QuestPDF-Muster | HTML/CSS-Äquivalent |
|---|---|
.Column() |
display: flex; flex-direction: column |
.Row() |
display: flex; flex-direction: row |
.RelativeItem() |
flex: 1 |
.Table() |
<table> Element |
.PaddingTop(20) |
padding-top: 20px oder <br/> |
.AlignCenter() |
text-align: center |
.FontSize(24) |
font-size: 24px |
.Bold() |
font-weight: bold oder <strong> |
Konvertierung von Seiteneinstellungen
// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20; // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
// QuestPDF
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
// IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20; // mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
' QuestPDF
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
' IronPDF
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20 ' mm (2cm = 20mm)
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Neue Funktionen nach der Migration
Nach der Umstellung auf IronPDF erhalten Sie Funktionen, die QuestPDF nicht bieten kann:
PDF-Zusammenführung
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
var cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>");
var content = renderer.RenderHtmlAsPdf(reportHtml);
var existing = PdfDocument.FromFile("appendix.pdf");
var merged = PdfDocument.Merge(cover, content, existing);
merged.SaveAs("complete.pdf");
Dim cover = renderer.RenderHtmlAsPdf("<h1>Cover</h1>")
Dim content = renderer.RenderHtmlAsPdf(reportHtml)
Dim existing = PdfDocument.FromFile("appendix.pdf")
Dim merged = PdfDocument.Merge(cover, content, existing)
merged.SaveAs("complete.pdf")
PDF-Sicherheit
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "reader";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.OwnerPassword = "admin"
pdf.SecuritySettings.UserPassword = "reader"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SaveAs("protected.pdf")
Link zur PDF-Datei
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
var pdf = renderer.RenderUrlAsPdf("https://example.com/report");
pdf.SaveAs("webpage.pdf");
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
Dim pdf = renderer.RenderUrlAsPdf("https://example.com/report")
pdf.SaveAs("webpage.pdf")
Laden und Bearbeiten vorhandener PDFs
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
var pdf = PdfDocument.FromFile("existing.pdf");
// Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf");
Dim pdf = PdfDocument.FromFile("existing.pdf")
' Modify, merge, add security, etc.
pdf.SaveAs("modified.pdf")
Zusammenfassung des Funktionsvergleichs
| Feature | QuestPDF | IronPDF |
|---|---|---|
| HTML-zu-PDF | Nicht unterstützt | Primäres Merkmal |
| Lernkurve | Proprietäre DSL | Standard-Webkenntnisse |
| Vorlage Vorschau | Plugin erforderlich | Jeder Browser |
| Zusammenarbeit gestalten | Nur Entwickler | Designer+Entwickler |
| Vorhandene Ressourcen | Muss wiederhergestellt werden | HTML/CSS wiederverwenden |
| PDF-Bearbeitung | Nicht unterstützt | Unterstützt |
| Sicherheit/Signatur | Nicht unterstützt | Unterstützt |
| Lizenzierungsmodell | Umsatzbasiert | Pro-Entwickler |
| Kundenwirkung | Benötigt eventuell Lizenzen | Keine |
| Bootstrap/Tailwind | Nicht unterstützt | Unterstützt |
| URL zu PDF | Nicht unterstützt | Unterstützt |
Migrations-Checkliste
Vor der Migration
- Alle QuestPDF-Dokumentvorlagen identifizieren (
Document.Create,.GeneratePdf) - Dokumentieren Sie die verwendeten DSL-Muster (
.Column(),.Row(),.Table(),.Text()) - Stilmethoden den entsprechenden CSS-Eigenschaften zuordnen
- Den IronPDF Lizenzschlüssel erhalten Sie unter IronPDF
Paketänderungen
- Entfernen Sie das NuGet Paket
QuestPDF - Installieren Sie das NuGet Paket
IronPdf:dotnet add package IronPdf
Code-Änderungen
- Namespace-Importe aktualisieren
- Entfernen Sie
QuestPDF.Settings.License = LicenseType.Community - Konvertiere das Muster
Document.Create()inChromePdfRenderer+ HTML - Ersetzen Sie
.Column()/.Row()durch CSS Flexbox - Ersetzen Sie
.Table()durch HTML-Elemente<table> - Konvertiere
.Text().Bold().FontSize(24)in<h1 style='...'> - Ersetzen Sie
page.Header()/page.Footer()durchTextHeaderFooter - Ersetzen Sie
.CurrentPageNumber()durch den Platzhalter{page} - Konvertiere
.GeneratePdf()inpdf.SaveAs() - Lizenzinitialisierung beim Anwendungsstart hinzufügen
Nach der Migration
- Visueller Vergleich der PDF-Ausgabe
- Mehrseitige Dokumente auf korrekte Seitenumbrüche prüfen
- Fügen Sie bei Bedarf neue Funktionen hinzu (Sicherheit, Zusammenführung, URL-zu-PDF).

