Comment convertir un PDF en HTML en C#
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against QuestPDF on pricing, HTML support, and licensing.
Migrer de QuestPDF à IronPDF déplace votre flux de travail de génération de PDF d'une API de mise en page fluente C# vers une approche standard basée sur HTML/CSS avec des capacités de manipulation de PDF plus larges. Ce guide fournit un chemin de migration étape par étape pour vous permettre de tirer parti des compétences Web existantes, de réutiliser les modèles HTML et de profiter des fonctionnalités que la bibliothèque de base de QuestPDF n'inclut pas.
Pourquoi migrer de QuestPDF à IronPDF
Comprendre QuestPDF
QuestPDF est une API moderne et fluide créée spécifiquement pour générer des PDF de manière programmatique en C#. Contrairement aux bibliothèques qui offrent une conversion complète de HTML en PDF, la bibliothèque de base de QuestPDF se limite à une API de mise en page programmatique. QuestPDF excelle dans les scénarios où les développeurs doivent générer des documents à partir de zéro en utilisant du code C#, sans s'appuyer sur le HTML.
Le niveau Communautaire est gratuit sous les termes MIT pour les individus, les organisations à but non lucratif, les projets FOSS et les organisations avec moins de 1 million USD de revenus bruts annuels. Au-delà de ce seuil, QuestPDF propose une licence Professional à partir de 999 $ (perpétuelle, jusqu'à 10 développeurs) et une licence Enterprise à 2 999 $ (perpétuelle, à l'échelle de l'organisation), qui doivent être pris en compte dans la planification à long terme.
Le Problème Fondamental : Pas de Moteur HTML dans la Bibliothèque de Base
QuestPDF est parfois recommandé pour la conversion HTML en PDF, mais la bibliothèque de base ne rend pas HTML. Une extension maintenue par la communauté QuestPDF.HTML couvre un sous-ensemble limité de HTML/CSS, mais le moteur principal est uniquement programmatique et n'exécute pas un véritable moteur de navigateur. Les équipes ayant déjà des modèles HTML/CSS doivent généralement les reconstruire dans l'API fluente.
| Fonction | QuestPDF | IronPDF |
|---|---|---|
| HTML-en-PDF (noyau) | Non pris en charge (API fluente uniquement) | Prise en charge complète |
| HTML-to-PDF (extension) | Partiellement via QuestPDF.HTML (sous-ensemble limité) |
Prise en charge complète |
| CSS Styling | Limité via l'extension | CSS3 complet |
| Modèles existants | Doit être reconstruit à partir de zéro | Réutiliser les actifs HTML/CSS |
| Compatibilité des outils de conception | None | Tout outil de conception web |
| Courbe d'apprentissage | Nouvelle API fluente C# | Transfert de compétences dans le domaine du web |
| Aperçu de la mise en page | Application compagnon | Prévisualisation dans n'importe quel navigateur |
| Manipulation de PDF | Fusion / extraction / superposition / cryptage (API des opérations de document, 2024.12.0+) | Fusion, division, édition, signature |
IronPDF fournit un rendu HTML-natif que la bibliothèque de base QuestPDF n'inclut pas, éliminant ainsi la nécessité de reconstruire manuellement les documents dans le code C#. Il couvre également les fonctionnalités de manipulation de PDF telles que la fusion, la division, l'édition, la sécurisation et la signature numérique — l'API des opérations sur les documents de QuestPDF (2024.12.0+) couvre la fusion, l'extraction de pages, la superposition/sous-couche, les pièces jointes et le chiffrement, mais pas l'édition du contenu des pages existantes, l'OCR ou les signatures numériques.
Le modèle de licence QuestPDF
La Licence Communautaire de QuestPDF (termes MIT) est gratuite pour les individus, les organisations à but non lucratif, les projets FOSS, et les organisations avec moins de 1 million USD de revenus bruts annuels. Au-delà de ce seuil, vous avez besoin d'une licence Professional à 999 $ (perpétuelle, jusqu'à 10 développeurs) ou Enterprise à 2 999 $ (perpétuelle, à l'échelle de l'organisation). Parce que le déclencheur est le revenu de votre organisation plutôt que le nombre de postes, cela peut changer les conversations en aval avec les clients et votre propre gestion des licences.
IronPDF propose une licence commerciale par développeur : pas d'audits de revenus, pas de exigences de licence client, et des coûts prévisibles.
Pour les équipes adoptant les versions modernes de .NET,IronPDF offre une concession de licence par développeur sans déclencheurs basés sur les revenus et une approche standard HTML/CSS qui tire parti des compétences de développement Web existantes.
Avant de commencer
Prérequis
- Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Accès à NuGet : possibilité d'installer des packages NuGet
- Licence IronPDF : Obtenez votre clé de licence sur IronPDF
Modifications du paquet NuGet
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
# Remove QuestPDF
dotnet remove package QuestPDF
# Add IronPDF
dotnet add package IronPdf
Configuration de la licence
// 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"
Trouver l'utilisation de QuestPDF
# 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" .
Référence API complète
Modifications de l'espace de nommage
// 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
Mappages de l'API de base
| Concept QuestPDF | Équivalent d'IronPDF |
|---|---|
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() |
| N/A | PdfDocument.Merge() |
| N/A | PdfDocument.FromFile() |
| N/A | pdf.SecuritySettings |
Exemples de migration de code
Exemple 1 : Création d'un document de base (HTML vers PDF)
Avant (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
Après (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
Cet exemple montre la différence de paradigme. QuestPDF nécessite l'apprentissage de son API fluente : Document.Create(), container.Page(), page.Content().Column(), column.Item().Text(), avec le style via chaînage de méthodes comme .FontSize(20).Bold(). Vous devez également définir le type de licence avec QuestPDF.Settings.License = LicenseType.Community.
IronPDF utilise du HTML standard que tout développeur web connaît : <h1> pour les titres, <p> pour les paragraphes. Aucun nouveau DSL de mise en page à apprendre. L'approche d'IronPDF offre une syntaxe plus propre et s'intègre avec le reste d'une pile .NET web moderne. Consultez la documentation HTML vers PDF pour des exemples complets.
Exemple 2 : Génération de factures
Avant (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
Après (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 utilise .Column() et .Item() pour la mise en page, avec .PaddingTop(20) pour l'espacement.IronPDF utilise du HTML standard : <h1> pour le titre, <p> pour les paragraphes, <br/> pour l'espacement, et <strong> pour le texte en gras.
Le véritable avantage : avec IronPDF, les concepteurs peuvent créer et modifier des modèles HTML de manière autonome. Avec QuestPDF, chaque changement de conception nécessite qu'un développeur C# modifie le code. Pour en savoir plus, consultez nos tutoriels.
Exemple 3 : En-têtes et pieds de page avec numéros de page
Avant (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
Après (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 utilise page.Header() et page.Footer() avec des méthodes fluentes comme .AlignCenter() et .CurrentPageNumber().IronPDF utilise des objets TextHeaderFooter avec des propriétés comme CenterText et FontSize. Le placeholder {page} insère automatiquement le numéro de page actuel.
Notes de migration essentielles
Le changement de paradigme
Le changement fondamental est de passer d'une API de mise en page fluente C# sur mesure à du HTML/CSS standard :
// QuestPDF: Fluent C# layout 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: Fluent C# layout 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: Fluent VB.NET layout 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)
Conversions de modèles de mise en page
| Modèle QuestPDF | Équivalent HTML/CSS |
|---|---|
.Column() |
display : flex ; flex-direction : column |
.Row() |
display : flex ; flex-direction : row |
.RelativeItem() |
flex: 1 |
.Table() |
<table> élément |
.PaddingTop(20) |
padding-top: 20px ou <br/> |
.AlignCenter() |
text-align: center |
.FontSize(24) |
font-size: 24px |
.Bold() |
font-weight: bold ou <strong> |
Conversion des paramètres de page
// 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
Nouvelles capacités après la migration
Après avoir migré vers IronPDF, vous bénéficiez de fonctionnalités que QuestPDF ne peut pas vous offrir :
Fusion de fichiers 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");
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")
Sécurité des PDF
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")
URL en PDF
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")
Chargez et modifiez des PDF existants
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")
Résumé de la comparaison des fonctionnalités
| Fonction | QuestPDF | IronPDF |
|---|---|---|
| HTML-à-PDF | Core : non pris en charge (limité via l'extension QuestPDF.HTML) |
Caractéristiques principales |
| Courbe d'apprentissage | API fluente C# | Compétences web standard |
| Aperçu du modèle | Application compagnon | Tout navigateur |
| Collaboration en matière de conception | Développeurs uniquement | Concepteurs + développeurs |
| Actifs existants | Doit reconstruire | Réutiliser HTML/CSS |
| Manipulation de PDF | Fusion / extraction / superposition (API des opérations de document, 2024.12.0+) | Prise en charge |
| Sécurité/Signature | Chiffrement + autorisations (pas de signature numérique) | Chiffrement + signature numérique |
| Modèle de licence | Basé sur le revenu (seuil de 1M $) | Par développeur |
| Impact sur le client | Peut nécessiter des licences au-dessus de 1M $ de revenus | None |
| Bootstrap/Tailwind | Non pris en charge | Prise en charge |
| URL vers PDF | Non pris en charge | Prise en charge |
Liste de contrôle de la migration
Pré-migration
- Identifiez tous les modèles de documents QuestPDF (
Document.Create,.GeneratePdf) - Documentez les modèles DSL utilisés (
.Column(),.Row(),.Table(),.Text()) - Associer les méthodes de style à leurs équivalents CSS
- Obtenez votre clé de licence IronPDF sur IronPDF
Modifications du paquet
- Supprimez le package NuGet
QuestPDF - Installez le package NuGet
IronPdf:dotnet add package IronPdf
Modifications du code
- Mettre à jour les importations d'espace de noms
- Supprimez
QuestPDF.Settings.License = LicenseType.Community - Convertissez le modèle
Document.Create()enChromePdfRenderer+ HTML - Remplacez
.Column()/.Row()par Flexbox CSS - Remplacez
.Table()par les éléments HTML<table> - Convertissez
.Text().Bold().FontSize(24)en<h1 style='...'> - Remplacez
page.Header()/page.Footer()parTextHeaderFooter - Remplacez
.CurrentPageNumber()par le placeholder{page} - Convertissez
.GeneratePdf()enpdf.SaveAs() - Ajouter l'initialisation de la licence au démarrage de l'application
Après la migration
- Comparaison visuelle des fichiers PDF générés
- Vérifier que les documents multipages comportent des sauts de page corrects.
- Ajouter de nouvelles fonctionnalités (sécurité, fusion, conversion d'URL en PDF) selon les besoins

